initiative-plugin-sdk 5.0.0 → 7.0.0
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 +200 -7
- package/dist/build.d.ts +5 -5
- package/dist/build.js +140 -10
- package/dist/build.js.map +1 -1
- package/dist/client.d.ts +68 -3
- package/dist/client.js +71 -1
- package/dist/client.js.map +1 -1
- package/dist/contract.d.ts +259 -4
- package/dist/contract.js +28 -2
- package/dist/contract.js.map +1 -1
- package/dist/define.d.ts +176 -6
- package/dist/define.js +7 -2
- package/dist/define.js.map +1 -1
- package/dist/jsx-dev-runtime.d.ts +2 -0
- package/dist/jsx-dev-runtime.js +3 -0
- package/dist/jsx-dev-runtime.js.map +1 -0
- package/dist/jsx-runtime.d.ts +28 -0
- package/dist/jsx-runtime.js +20 -0
- package/dist/jsx-runtime.js.map +1 -0
- package/dist/manifest.d.ts +1 -1
- package/dist/manifest.js +1 -1
- package/dist/manifest.js.map +1 -1
- package/dist/pack.js +1 -2
- package/dist/pack.js.map +1 -1
- package/dist/parts.d.ts +43 -0
- package/dist/parts.js +63 -0
- package/dist/parts.js.map +1 -0
- package/dist/plugin-api.generated.d.ts +1 -3
- package/dist/plugin-api.generated.js +1 -1
- package/dist/plugin-api.generated.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +51 -11
- package/dist/server.js.map +1 -1
- package/dist/tokens.d.ts +27 -4
- package/dist/tokens.js +34 -5
- package/dist/tokens.js.map +1 -1
- package/dist/validate.d.ts +4 -2
- package/dist/validate.js +86 -6
- package/dist/validate.js.map +1 -1
- package/manifest.contract.json +439 -3
- package/package.json +15 -3
- package/schemas/plugin-api.json +3 -36
- package/schemas/plugin-manifest.json +435 -2
package/README.md
CHANGED
|
@@ -14,6 +14,8 @@ holds its tokens, and builds its manifest.
|
|
|
14
14
|
| `initiative-plugin-sdk/server` | `createPlugin`, `serve`, `EndpointError` |
|
|
15
15
|
| `initiative-plugin-sdk/client` | `Initiative` and the `Client` it gives, acting as the community or a member; plug-in keys |
|
|
16
16
|
| `initiative-plugin-sdk/widget` | What a widget is handed, and the scenes it returns |
|
|
17
|
+
| `initiative-plugin-sdk/parts` | The components a part's tree is built from: `Section`, `Stack`, `Field`, `Value`, `Text`, `Button` |
|
|
18
|
+
| `initiative-plugin-sdk/jsx-runtime` | JSX for a part's tree, with no React |
|
|
17
19
|
| `initiative-plugin-sdk/testing` | A declarative plug-in's requests and maps, run against recorded vendor answers |
|
|
18
20
|
| `initiative-plugin-sdk/plugin-api.json` | The plug-in API contract: the OpenAPI document of every route a plug-in may call |
|
|
19
21
|
| bin `initiative-plugin` | `init`, `build`, `pack`, `dev`, `validate`, `keygen`, `uid`, `schema` |
|
|
@@ -74,12 +76,13 @@ export default definePlugin({
|
|
|
74
76
|
does not compile either.
|
|
75
77
|
- **Endpoints are named by their key.** The manifest id is
|
|
76
78
|
`plugin.<publicId>.<key>`, and everywhere the definition refers to an endpoint
|
|
77
|
-
(a widget, a sample, a parameter's `options_from`, a bundled dashboard
|
|
78
|
-
uses the key.
|
|
79
|
+
(a widget, a sample, a parameter's `options_from`, a bundled dashboard, an
|
|
80
|
+
action) it uses the key.
|
|
79
81
|
- **Everything else is the contract's own shape**, from
|
|
80
82
|
[`manifest.contract.json`](manifest.contract.json): `vendor`, `connections`
|
|
81
83
|
(keyed by id), `webhooks`, `pages` (keyed by id),
|
|
82
|
-
`dashboards
|
|
84
|
+
`dashboards`, `fields` (keyed by metadata key), `parts` and `actions` (keyed
|
|
85
|
+
by id). The types are generated from the contract, so every term the
|
|
83
86
|
contract declares has a type here.
|
|
84
87
|
- **Features follow from what is filled in.** A plug-in with widgets declares
|
|
85
88
|
`widgets`, and so on.
|
|
@@ -89,11 +92,14 @@ export default definePlugin({
|
|
|
89
92
|
| | |
|
|
90
93
|
|---|---|
|
|
91
94
|
| `params` | What the caller sent, by the declared names. Initiative sends strings; an automation may send numbers and booleans as they are. |
|
|
92
|
-
| `installation` | The community, by the reference this plug-in
|
|
95
|
+
| `installation` | The community, by the reference this plug-in knows it by. It stays the same across uninstall and reinstall, until the community erases the plug-in's data, so it is what your own rows key on. Member references hold the same way. |
|
|
96
|
+
| `community_status` | Where the community stands: `active`, `read_only`, `suspended`, `on_hold` or `deleted`. Anything but `active` means hold back work done on its behalf. |
|
|
93
97
|
| `actor` | `{ kind: "installation" }`, or `{ kind: "member", member }` when another plug-in called as one of the community's members. |
|
|
94
98
|
| `caller` | The plug-in that made the call through Initiative, or null for Initiative's own. |
|
|
95
99
|
| `initiative` | The initiative the call is confined to, or null. |
|
|
96
100
|
| `connections` | Connection id → the handle Initiative gives a vendor token for. |
|
|
101
|
+
| `viewer` | On a call one of the plug-in's actions made: the reader who ran it, by this installation's reference for them. Otherwise null. |
|
|
102
|
+
| `subject` | On a call one of the plug-in's actions made: the item it was run on, `{ type, id }`. Otherwise null. |
|
|
97
103
|
| `client` | Initiative, already acting as `actor` and narrowed to `initiative`. |
|
|
98
104
|
| `context` | What you gave `createPlugin` (below). |
|
|
99
105
|
|
|
@@ -102,9 +108,10 @@ credential than the call's own (a read that always uses the community's
|
|
|
102
108
|
installation, say). To refuse, throw `new EndpointError(status, code, detail)`;
|
|
103
109
|
anything else thrown is answered 500 and logged.
|
|
104
110
|
|
|
105
|
-
A `write` is reachable
|
|
106
|
-
declares, and only when it is `public
|
|
107
|
-
the
|
|
111
|
+
A `write` is reachable through another plug-in, as one of the actors it
|
|
112
|
+
declares, and only when it is `public`; or through one of the plug-in's own
|
|
113
|
+
actions, on an item kind the action is offered on, as the installation. The
|
|
114
|
+
SDK refuses anything else before the handler runs.
|
|
108
115
|
|
|
109
116
|
### Hooks
|
|
110
117
|
|
|
@@ -136,6 +143,40 @@ hooks: {
|
|
|
136
143
|
A hook that throws is answered 500: a connection is then not recorded, and a
|
|
137
144
|
delivery or a schedule is tried again.
|
|
138
145
|
|
|
146
|
+
### The community's own hooks
|
|
147
|
+
|
|
148
|
+
Five hooks are about the community's install rather than a connection. Each
|
|
149
|
+
is optional; a plug-in that defines none is answered 404, and Initiative stops
|
|
150
|
+
sending that hook.
|
|
151
|
+
|
|
152
|
+
```ts
|
|
153
|
+
hooks: {
|
|
154
|
+
installed: async ({ installation }) => { /* a first install, or a return */ },
|
|
155
|
+
uninstalled: async ({ installation }) => { /* keep what you hold: it may come back */ },
|
|
156
|
+
erase: async ({ installation }) => { /* delete everything about this community */ },
|
|
157
|
+
community_status: async ({ installation, status }) => { /* pause unless active */ },
|
|
158
|
+
entitlement: async ({ installation, version, values }) => { /* keep the newest */ },
|
|
159
|
+
},
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
- `installed` runs when the community installs the plug-in, and again if it
|
|
163
|
+
returns after an uninstall. It comes back under the same `installation`
|
|
164
|
+
and the same member references, so whatever you kept for it still fits.
|
|
165
|
+
- `uninstalled` runs when it removes the plug-in. Its references stand.
|
|
166
|
+
- `erase` runs when the community asks for the plug-in's data to be deleted,
|
|
167
|
+
or is itself purged. Delete everything you hold for it. Once the hook
|
|
168
|
+
answers, Initiative forgets the references, and a later install starts
|
|
169
|
+
afresh under new ones. A hook that throws is asked again.
|
|
170
|
+
- `community_status` runs whenever the community's standing changes. The same
|
|
171
|
+
value rides every call as `community_status`, so a missed hook is caught up
|
|
172
|
+
on the next call.
|
|
173
|
+
- `entitlement` carries the deployment's statement of what this community
|
|
174
|
+
holds of the plug-in: `values`, whose keys are agreed between the plug-in
|
|
175
|
+
and the deployment's issuer, and a `version` that rises with each
|
|
176
|
+
statement. Statements can repeat or arrive out of order, so keep the
|
|
177
|
+
highest version you have seen and ignore a lower one. A deployment with no
|
|
178
|
+
issuer never sends one.
|
|
179
|
+
|
|
139
180
|
### The vendor's own setup
|
|
140
181
|
|
|
141
182
|
`vendor.fields` are the values an operator gives once per deployment for the
|
|
@@ -220,6 +261,107 @@ alpha-2 country, with `default` for every country not listed:
|
|
|
220
261
|
`{ default: 16, US: 13 }`. It is a declaration; whether a deployment enforces
|
|
221
262
|
it is the deployment's decision.
|
|
222
263
|
|
|
264
|
+
### Fields, parts and actions
|
|
265
|
+
|
|
266
|
+
What a plug-in adds to the views and pages of Initiative's items: tasks,
|
|
267
|
+
calendar events, queue items, counters, gallery images and posts
|
|
268
|
+
(`ITEM_KINDS`). Initiative draws all of it with its own components, so no
|
|
269
|
+
plug-in code runs in a reader's browser, and the community's managers place
|
|
270
|
+
it; a plug-in never places itself. They are a container plug-in's: a declarative
|
|
271
|
+
plug-in holds no installation token to keep metadata with, and no handler to
|
|
272
|
+
run an action.
|
|
273
|
+
|
|
274
|
+
**Metadata** is what the plug-in keeps on an item or on its own install: values
|
|
275
|
+
by key (a lowercase letter, then lowercase letters, digits, `_` and `.`), held
|
|
276
|
+
by Initiative and written with the installation token (`client.metadata`,
|
|
277
|
+
below). Initiative enforces its sizes: a value of at most 8192 bytes as JSON,
|
|
278
|
+
32 keys and 64 KiB on one item, and 256 keys and 1 MiB on the install. A
|
|
279
|
+
string of at most 255 characters can be found by.
|
|
280
|
+
|
|
281
|
+
**A field** says how one metadata key is shown. Initiative draws the value with
|
|
282
|
+
its own component for `kind` and computes its plain text itself, so a field
|
|
283
|
+
filters, sorts and exports with no call to the plug-in.
|
|
284
|
+
|
|
285
|
+
| `kind` | The value |
|
|
286
|
+
|---|---|
|
|
287
|
+
| `text` | a string |
|
|
288
|
+
| `number` | a number |
|
|
289
|
+
| `date` | `"YYYY-MM-DD"` |
|
|
290
|
+
| `datetime` | ISO 8601, with its offset |
|
|
291
|
+
| `link` | `{ url, text? }` |
|
|
292
|
+
| `badge` | `{ text, tone? }` |
|
|
293
|
+
| `progress` | `{ value, max }` |
|
|
294
|
+
| `checkbox` | a boolean |
|
|
295
|
+
|
|
296
|
+
```ts
|
|
297
|
+
fields: {
|
|
298
|
+
"demo.link": { name: { en: "Demo" }, kind: "link", on: ["task"], description: { en: "The task's demo" } },
|
|
299
|
+
"demo.opened": { name: { en: "Opened" }, kind: "number", on: ["task"] },
|
|
300
|
+
},
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
`on` is the item kinds it is offered on; `description` is the line the view
|
|
304
|
+
editor's Add picker shows; `tone` is a badge's tone when its value names none
|
|
305
|
+
(`accent`, `positive`, `negative`, `warning`, `neutral`, `muted`).
|
|
306
|
+
|
|
307
|
+
**An action** runs one of the plug-in's write endpoints on one item, from a
|
|
308
|
+
part's button, or from the item's own menu with `menu: true`. Initiative calls
|
|
309
|
+
the endpoint as the installation, with `viewer` and `subject` set, and the
|
|
310
|
+
handler does the work, usually writing metadata. Initiative then answers the
|
|
311
|
+
reader with the item's metadata as it stands. With `confirm`, Initiative asks
|
|
312
|
+
first.
|
|
313
|
+
|
|
314
|
+
```ts
|
|
315
|
+
actions: {
|
|
316
|
+
"new-link": { name: { en: "New link" }, endpoint: "create-link", on: ["task"], menu: true },
|
|
317
|
+
},
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**A part** is a tree of Initiative's components bound to the plug-in's fields
|
|
321
|
+
and actions, at most 50 nodes and 4 deep. Initiative places at most 3 of a
|
|
322
|
+
plug-in's parts on one item.
|
|
323
|
+
|
|
324
|
+
| Component | Props | Holds nodes |
|
|
325
|
+
|---|---|---|
|
|
326
|
+
| `section` | `title?`, `collapsed?` | yes |
|
|
327
|
+
| `stack` | `direction?` (`row`, `column`), `gap?` (`none`, `small`, `medium`, `large`), `wrap?` | yes |
|
|
328
|
+
| `field` | `field`: a field's key. Its label and value. | no |
|
|
329
|
+
| `value` | `field`: a field's key. Its value alone. | no |
|
|
330
|
+
| `text` | `text`, `tone?` | no |
|
|
331
|
+
| `button` | `action`: an action's id; `variant?` (`primary`, `secondary`, `ghost`) | no |
|
|
332
|
+
|
|
333
|
+
Every field and action a part names must be offered on each kind in the
|
|
334
|
+
part's `on`. A tree is plain data, `{ type, props?, children? }`, or JSX through
|
|
335
|
+
the SDK's runtime, which the build turns into the same data:
|
|
336
|
+
|
|
337
|
+
```tsx
|
|
338
|
+
/** @jsxImportSource initiative-plugin-sdk */
|
|
339
|
+
import { Button, Field, Section, Stack, Text, Value } from "initiative-plugin-sdk/parts";
|
|
340
|
+
|
|
341
|
+
parts: {
|
|
342
|
+
demo: {
|
|
343
|
+
name: { en: "Demo" },
|
|
344
|
+
on: ["task"],
|
|
345
|
+
tree: (
|
|
346
|
+
<Section title={{ en: "Demo" }}>
|
|
347
|
+
<Field field="demo.link" />
|
|
348
|
+
<Stack direction="row" gap="small">
|
|
349
|
+
<Value field="demo.opened" />
|
|
350
|
+
<Text text={{ en: "times opened" }} tone="muted" />
|
|
351
|
+
</Stack>
|
|
352
|
+
<Button action="new-link" />
|
|
353
|
+
</Section>
|
|
354
|
+
),
|
|
355
|
+
},
|
|
356
|
+
},
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
The pragma, or `"jsx": "react-jsx"` and `"jsxImportSource":
|
|
360
|
+
"initiative-plugin-sdk"` in `tsconfig.json`, selects the runtime. A fragment's
|
|
361
|
+
children join the node that holds it, and `null` and `false` children are left
|
|
362
|
+
out. `key` is JSX's own and is not passed on, which is why a field is named by
|
|
363
|
+
`field`.
|
|
364
|
+
|
|
223
365
|
## 2. Widgets
|
|
224
366
|
|
|
225
367
|
A widget is a module exporting `render`, typed from the endpoint it draws:
|
|
@@ -379,10 +521,23 @@ for (const { installation, active } of await initiative.installations()) {
|
|
|
379
521
|
- `client.callPlugin(publicId, endpointId, params)` calls another plug-in's public
|
|
380
522
|
endpoint through Initiative. It needs `plugins:<publicId>` among the plug-in's
|
|
381
523
|
scopes, granted by the community.
|
|
524
|
+
- `client.metadata`, the plug-in's metadata, always on the installation's
|
|
525
|
+
token: `get(itemKind, ids)` answers each item's values by id;
|
|
526
|
+
`set(itemKind, id, values)` writes some of one item's values, a null
|
|
527
|
+
removing its key, and answers them as they now stand; `find(key, value)`
|
|
528
|
+
answers the items holding `value` under `key`, as `{ type, id }`.
|
|
529
|
+
`metadata.install.get()` and `metadata.install.set(values)` do the same for
|
|
530
|
+
the install's own values.
|
|
382
531
|
- The installation itself, on any installation token: `client.config()`,
|
|
383
532
|
`client.connections()`, `client.connectionToken(ref)` for a usable vendor
|
|
384
533
|
token, `client.reportConfigStatus({ state, detail })`, and
|
|
385
534
|
`client.emitEvent({ eventType, payload, initiativeId })`.
|
|
535
|
+
- What the community holds of the plug-in: `client.entitlement()` reads the
|
|
536
|
+
statement the `entitlement` hook delivers, or null when there is none, and
|
|
537
|
+
`client.reportUsage({ meter, period, quantity })` reports a meter's total
|
|
538
|
+
for one `YYYY-MM` period. The total is the whole period's, never an
|
|
539
|
+
increment, so repeating a report is harmless. Only meters the deployment
|
|
540
|
+
allows the plug-in are accepted.
|
|
386
541
|
|
|
387
542
|
The plug-in authenticates with its key (`private_key_jwt`, RFC 7523). Tokens are
|
|
388
543
|
opaque; the client caches each until shortly before it expires, shares one
|
|
@@ -403,6 +558,7 @@ listing: {
|
|
|
403
558
|
summary: "Your tracker's tickets on a dashboard and in your automations.",
|
|
404
559
|
description: "…",
|
|
405
560
|
avatar: "assets/avatar.png",
|
|
561
|
+
images: [{ path: "assets/board.png", alt: "Open tickets on a dashboard" }],
|
|
406
562
|
version: "1.2.0",
|
|
407
563
|
minAppVersion: "0.72.0",
|
|
408
564
|
releaseNotes: "…",
|
|
@@ -418,6 +574,13 @@ listing: {
|
|
|
418
574
|
},
|
|
419
575
|
```
|
|
420
576
|
|
|
577
|
+
`images` is optional: the screenshots on the listing page, in order, at most
|
|
578
|
+
12. Each is a PNG, JPEG, WebP, GIF, AVIF or SVG file with `alt` text of 1 to
|
|
579
|
+
300 characters for someone who cannot see it, and a file name of its own (the
|
|
580
|
+
avatar sits beside them in the registry source). The registry signs each one
|
|
581
|
+
by its digest, as it does the avatar. `pack` leaves them out: a deployment's
|
|
582
|
+
own listing upload takes only the avatar.
|
|
583
|
+
|
|
421
584
|
`compose` is optional: the Docker Compose service an operator copies to run
|
|
422
585
|
your image beside Initiative, which Initiative shows on the plug-in's settings
|
|
423
586
|
page. `service` is the fragment, YAML text of at most 4096 characters, with two
|
|
@@ -427,6 +590,35 @@ the build, so a misspelt placeholder cannot ship. `baseUrl` is where the
|
|
|
427
590
|
service answers on the Compose network, an http or https URL of at most 512
|
|
428
591
|
characters; Initiative pre-fills the deployment's base URL with it.
|
|
429
592
|
|
|
593
|
+
`runtime` is optional too, and is for a plug-in a deployment runs for its
|
|
594
|
+
operator from a reviewed package. It says what the container needs, so the
|
|
595
|
+
deployment can run it with no code of its own:
|
|
596
|
+
|
|
597
|
+
```ts
|
|
598
|
+
runtime: {
|
|
599
|
+
name: "tracker",
|
|
600
|
+
port: 8080,
|
|
601
|
+
health: { ready: "/readyz", live: "/healthz" },
|
|
602
|
+
facts: { INITIATIVE_API_URL: "app_api_internal" },
|
|
603
|
+
settings: [{ env: "TRACKER_MODE", required: true }],
|
|
604
|
+
signingKey: { env: "TRACKER_PRIVATE_KEY_PEM" },
|
|
605
|
+
database: {
|
|
606
|
+
roles: [{ id: "owner", login: "tracker_owner", env: "DATABASE_URL" }],
|
|
607
|
+
provisionSql: "/app/provision.sql",
|
|
608
|
+
},
|
|
609
|
+
},
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
It holds nothing that raises a privilege. Resources, network rules, hostnames
|
|
613
|
+
and every key and password stay the deployment's:
|
|
614
|
+
|
|
615
|
+
- `facts` come from a fixed list: `app_url`, `app_origin`, `app_api_public`,
|
|
616
|
+
`app_api_internal`, `page_origin` and `port`.
|
|
617
|
+
- `settings` are names the operator fills.
|
|
618
|
+
- `secrets` are generated by the deployment and kept.
|
|
619
|
+
|
|
620
|
+
The public registry refuses a listing that carries a runtime.
|
|
621
|
+
|
|
430
622
|
`minAppVersion` is the oldest Initiative release a version runs on. Beside it,
|
|
431
623
|
the definition's `minPluginApi` (the manifest's `min_plugin_api`) is the
|
|
432
624
|
oldest [plug-in API contract](#the-plug-in-api-contract) the plug-in calls, as
|
|
@@ -646,6 +838,7 @@ npx initiative-plugin schema # the JSON Schema it checks again
|
|
|
646
838
|
`validateManifest` runs the bundled JSON Schema, then the checks a schema
|
|
647
839
|
cannot express: features against the blocks present, ids that must name
|
|
648
840
|
something the manifest declares, connection, vendor setup and schedule rules,
|
|
841
|
+
what a part's nodes and an action name, a part's size and depth,
|
|
649
842
|
and every term the contract does not declare (a deployment discards those
|
|
650
843
|
without saying so). The deployment also enforces byte-size caps.
|
|
651
844
|
|
package/dist/build.d.ts
CHANGED
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
* parse fails the build at its place in the manifest.
|
|
8
8
|
* - With `--registry <dir>`, the plug-in's registry source under
|
|
9
9
|
* `<dir>/<publisher>/<uid>/`: `listing.json`, this version's
|
|
10
|
-
* `<version>/manifest.json
|
|
11
|
-
* listing names the package's own version: between releases
|
|
12
|
-
* runs ahead of its listing, and what the listing already
|
|
13
|
-
* as it was.
|
|
10
|
+
* `<version>/manifest.json`, the avatar and any images. It is written
|
|
11
|
+
* only while the listing names the package's own version: between releases
|
|
12
|
+
* the package runs ahead of its listing, and what the listing already
|
|
13
|
+
* publishes is left as it was.
|
|
14
14
|
*
|
|
15
15
|
* With `--check` nothing is written, and any file that differs from what would
|
|
16
16
|
* be written is a failure.
|
|
@@ -77,6 +77,6 @@ export declare function load(command: string, root: string, options: {
|
|
|
77
77
|
export declare function compile(esbuild: Esbuild, root: string, entry: string): Promise<Compiled>;
|
|
78
78
|
/** Build, or check, the plug-in's files. Answers the process's exit code. */
|
|
79
79
|
export declare function build(options: BuildOptions): Promise<number>;
|
|
80
|
-
/** A listing's registration: the plug-in's kind, and a container's image
|
|
80
|
+
/** A listing's registration: the plug-in's kind, and a container's image, Compose service and runtime. */
|
|
81
81
|
export declare function registrationOf(plugin: ListedPlugin): Record<string, unknown>;
|
|
82
82
|
export {};
|
package/dist/build.js
CHANGED
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
* parse fails the build at its place in the manifest.
|
|
8
8
|
* - With `--registry <dir>`, the plug-in's registry source under
|
|
9
9
|
* `<dir>/<publisher>/<uid>/`: `listing.json`, this version's
|
|
10
|
-
* `<version>/manifest.json
|
|
11
|
-
* listing names the package's own version: between releases
|
|
12
|
-
* runs ahead of its listing, and what the listing already
|
|
13
|
-
* as it was.
|
|
10
|
+
* `<version>/manifest.json`, the avatar and any images. It is written
|
|
11
|
+
* only while the listing names the package's own version: between releases
|
|
12
|
+
* the package runs ahead of its listing, and what the listing already
|
|
13
|
+
* publishes is left as it was.
|
|
14
14
|
*
|
|
15
15
|
* With `--check` nothing is written, and any file that differs from what would
|
|
16
16
|
* be written is a failure.
|
|
@@ -86,12 +86,28 @@ export async function compile(esbuild, root, entry) {
|
|
|
86
86
|
}
|
|
87
87
|
return checked(plugin, manifestOf(plugin, modules), problems);
|
|
88
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Listing terms this contract no longer has, named rather than dropped: a
|
|
91
|
+
* built plug-in is JSON, and a key it still carries would otherwise vanish
|
|
92
|
+
* without a word.
|
|
93
|
+
*/
|
|
94
|
+
function retiredProblems(plugin) {
|
|
95
|
+
const listing = (plugin.listing ?? {});
|
|
96
|
+
return "referenceSectors" in listing
|
|
97
|
+
? ["listing.referenceSectors was removed in 7.0: whether a plug-in is billable is a package's to state, not its listing's"]
|
|
98
|
+
: [];
|
|
99
|
+
}
|
|
89
100
|
/** The plug-in and its manifest, or every problem with them beside `problems`. */
|
|
90
101
|
function checked(plugin, manifest, problems) {
|
|
91
102
|
problems.push(...validateManifest(manifest, { publicId: plugin.publicId }).map((problem) => `manifest${problem.where}: ${problem.message}`));
|
|
92
103
|
problems.push(...kindProblems(plugin));
|
|
104
|
+
problems.push(...retiredProblems(plugin));
|
|
93
105
|
if (plugin.listing?.compose)
|
|
94
106
|
problems.push(...composeProblems(plugin.listing.compose));
|
|
107
|
+
if (plugin.listing?.runtime)
|
|
108
|
+
problems.push(...runtimeProblems(plugin.listing.runtime));
|
|
109
|
+
if (plugin.listing?.images)
|
|
110
|
+
problems.push(...imageProblems(plugin.listing));
|
|
95
111
|
return problems.length ? { problems } : { plugin, manifest };
|
|
96
112
|
}
|
|
97
113
|
/** Build, or check, the plug-in's files. Answers the process's exit code. */
|
|
@@ -119,8 +135,9 @@ export async function build(options) {
|
|
|
119
135
|
: listing.version;
|
|
120
136
|
if (version === listing.version) {
|
|
121
137
|
const avatar = readFileSync(resolve(root, listing.avatar));
|
|
138
|
+
const images = (listing.images ?? []).map((image) => readFileSync(resolve(root, image.path)));
|
|
122
139
|
const source = resolve(root, options.registry, listing.publisher, plugin.uid);
|
|
123
|
-
outputs.push([join(source, "listing.json"), `${JSON.stringify(listingSource(plugin, avatar), null, 2)}\n`], [join(source, listing.version, "manifest.json"), manifestText], [join(source, "assets", basename(listing.avatar)), avatar]);
|
|
140
|
+
outputs.push([join(source, "listing.json"), `${JSON.stringify(listingSource(plugin, avatar, images), null, 2)}\n`], [join(source, listing.version, "manifest.json"), manifestText], [join(source, "assets", basename(listing.avatar)), avatar], ...(listing.images ?? []).map((image, index) => [join(source, "assets", basename(image.path)), images[index]]));
|
|
124
141
|
}
|
|
125
142
|
else {
|
|
126
143
|
process.stdout.write(`the registry source lists ${listing.version}; ${version} is listed at its release\n`);
|
|
@@ -204,8 +221,9 @@ function kindProblems(plugin) {
|
|
|
204
221
|
problems.push("hooks: a declarative plug-in runs no hooks");
|
|
205
222
|
if (plugin.scopes)
|
|
206
223
|
problems.push("scopes: a declarative plug-in asks for none, since it does not call Initiative");
|
|
207
|
-
if (plugin.listing?.image || plugin.listing?.compose)
|
|
208
|
-
problems.push("listing: a declarative plug-in has no image
|
|
224
|
+
if (plugin.listing?.image || plugin.listing?.compose || plugin.listing?.runtime) {
|
|
225
|
+
problems.push("listing: a declarative plug-in has no image, compose service or runtime");
|
|
226
|
+
}
|
|
209
227
|
}
|
|
210
228
|
else if (plugin.listing && !plugin.listing.image) {
|
|
211
229
|
problems.push("listing: a container plug-in names its image");
|
|
@@ -226,8 +244,75 @@ function composeProblems({ service, baseUrl }) {
|
|
|
226
244
|
}
|
|
227
245
|
return problems;
|
|
228
246
|
}
|
|
247
|
+
const PICTURE = /\.(png|jpe?g|webp|gif|avif|svg)$/i;
|
|
248
|
+
const MAX_IMAGES = 12;
|
|
249
|
+
/**
|
|
250
|
+
* The registry's rules for a listing's screenshots: how many, their alt text,
|
|
251
|
+
* their file types, and a name of their own in the listing's `assets/`, where
|
|
252
|
+
* the avatar sits beside them.
|
|
253
|
+
*/
|
|
254
|
+
function imageProblems({ avatar, images = [] }) {
|
|
255
|
+
const problems = [];
|
|
256
|
+
if (images.length > MAX_IMAGES)
|
|
257
|
+
problems.push(`listing images: at most ${MAX_IMAGES}, not ${images.length}`);
|
|
258
|
+
const names = new Set([basename(avatar)]);
|
|
259
|
+
for (const { path, alt } of images) {
|
|
260
|
+
if (!PICTURE.test(path))
|
|
261
|
+
problems.push(`listing images: ${path} is not a PNG, JPEG, WebP, GIF, AVIF or SVG file`);
|
|
262
|
+
if (typeof alt !== "string" || !alt.trim() || alt.length > 300) {
|
|
263
|
+
problems.push(`listing images: ${path} needs alt text of 1 to 300 characters`);
|
|
264
|
+
}
|
|
265
|
+
const name = basename(path);
|
|
266
|
+
if (names.has(name))
|
|
267
|
+
problems.push(`listing images: ${path} has the same file name as another picture`);
|
|
268
|
+
names.add(name);
|
|
269
|
+
}
|
|
270
|
+
return problems;
|
|
271
|
+
}
|
|
272
|
+
const ENV = /^[A-Z][A-Z0-9_]{0,63}$/;
|
|
273
|
+
const PATH = /^\/[A-Za-z0-9._~/-]*$/;
|
|
274
|
+
/**
|
|
275
|
+
* The registry's rules for a runtime that a build can see by itself: names,
|
|
276
|
+
* the port, paths and variable names. The registry checks the rest.
|
|
277
|
+
*/
|
|
278
|
+
function runtimeProblems(runtime) {
|
|
279
|
+
const problems = [];
|
|
280
|
+
const say = (problem) => problems.push(`listing runtime: ${problem}`);
|
|
281
|
+
if (!/^[a-z]([a-z0-9-]{0,18}[a-z0-9])?$/.test(runtime.name))
|
|
282
|
+
say("name is a DNS label of at most 20 characters");
|
|
283
|
+
if (!Number.isInteger(runtime.port) || runtime.port < 1024 || runtime.port > 65535)
|
|
284
|
+
say("port is 1024 to 65535");
|
|
285
|
+
for (const path of [runtime.health.ready, runtime.health.live, ...(runtime.publicPaths ?? []), ...(runtime.metrics ? [runtime.metrics.path] : [])]) {
|
|
286
|
+
if (!PATH.test(path) || path.length > 200)
|
|
287
|
+
say(`${path} is not an absolute path`);
|
|
288
|
+
}
|
|
289
|
+
const envs = [
|
|
290
|
+
...Object.keys(runtime.facts ?? {}),
|
|
291
|
+
...(runtime.settings ?? []).map((setting) => setting.env),
|
|
292
|
+
...(runtime.signingKey ? [runtime.signingKey.env] : []),
|
|
293
|
+
...(runtime.database?.roles ?? []).map((role) => role.env),
|
|
294
|
+
...(runtime.secrets ?? []).map((secret) => secret.env),
|
|
295
|
+
...(runtime.metrics ? [runtime.metrics.tokenEnv] : []),
|
|
296
|
+
];
|
|
297
|
+
for (const env of envs)
|
|
298
|
+
if (!ENV.test(env))
|
|
299
|
+
say(`${env} is not an environment variable name`);
|
|
300
|
+
const seen = new Set();
|
|
301
|
+
for (const env of envs) {
|
|
302
|
+
if (seen.has(env))
|
|
303
|
+
say(`${env} is filled twice`);
|
|
304
|
+
seen.add(env);
|
|
305
|
+
}
|
|
306
|
+
if (runtime.facts && Object.values(runtime.facts).includes("page_origin") && !runtime.pages) {
|
|
307
|
+
say("page_origin is a plug-in's own origin, which only one that serves pages has");
|
|
308
|
+
}
|
|
309
|
+
if (runtime.database && !/^\/[A-Za-z0-9._/-]+\.sql$/.test(runtime.database.provisionSql)) {
|
|
310
|
+
say("database provisionSql is an absolute path to a .sql file in the image");
|
|
311
|
+
}
|
|
312
|
+
return problems;
|
|
313
|
+
}
|
|
229
314
|
/** The registry source listing: what the catalogue shows, this version, and the registration, a container's or a declarative plug-in's. */
|
|
230
|
-
function listingSource(plugin, avatar) {
|
|
315
|
+
function listingSource(plugin, avatar, images) {
|
|
231
316
|
const listing = plugin.listing;
|
|
232
317
|
return {
|
|
233
318
|
schema: 1,
|
|
@@ -242,6 +327,15 @@ function listingSource(plugin, avatar) {
|
|
|
242
327
|
path: `assets/${basename(listing.avatar)}`,
|
|
243
328
|
sha256: createHash("sha256").update(avatar).digest("hex"),
|
|
244
329
|
},
|
|
330
|
+
...(listing.images?.length
|
|
331
|
+
? {
|
|
332
|
+
images: listing.images.map((image, index) => ({
|
|
333
|
+
path: `assets/${basename(image.path)}`,
|
|
334
|
+
sha256: createHash("sha256").update(images[index]).digest("hex"),
|
|
335
|
+
alt: image.alt,
|
|
336
|
+
})),
|
|
337
|
+
}
|
|
338
|
+
: {}),
|
|
245
339
|
versions: [
|
|
246
340
|
{
|
|
247
341
|
version: listing.version,
|
|
@@ -253,14 +347,50 @@ function listingSource(plugin, avatar) {
|
|
|
253
347
|
registration: registrationOf(plugin),
|
|
254
348
|
};
|
|
255
349
|
}
|
|
256
|
-
/** A listing's registration: the plug-in's kind, and a container's image
|
|
350
|
+
/** A listing's registration: the plug-in's kind, and a container's image, Compose service and runtime. */
|
|
257
351
|
export function registrationOf(plugin) {
|
|
258
352
|
const listing = plugin.listing;
|
|
259
353
|
return {
|
|
260
354
|
...(plugin.hosts ? { kind: "declarative" } : { kind: "container", image: listing.image }),
|
|
261
355
|
scope_ceiling: [...(listing.scopeCeiling ?? plugin.scopes ?? [])],
|
|
262
|
-
reference_sectors: [...(listing.referenceSectors ?? [])],
|
|
263
356
|
...(listing.compose ? { compose: { service: listing.compose.service, base_url: listing.compose.baseUrl } } : {}),
|
|
357
|
+
...(listing.runtime ? { runtime: runtimeOf(listing.runtime) } : {}),
|
|
264
358
|
};
|
|
265
359
|
}
|
|
360
|
+
/** A runtime as the registry spells it. Variable names stay as they are; only field names change. */
|
|
361
|
+
function runtimeOf(runtime) {
|
|
362
|
+
const defined = (entries) => Object.fromEntries(Object.entries(entries).filter(([, value]) => value !== undefined));
|
|
363
|
+
const { health, database, metrics, integrations } = runtime;
|
|
364
|
+
return defined({
|
|
365
|
+
name: runtime.name,
|
|
366
|
+
port: runtime.port,
|
|
367
|
+
health: defined({ ready: health.ready, live: health.live, startup_seconds: health.startupSeconds }),
|
|
368
|
+
stop_grace_seconds: runtime.stopGraceSeconds,
|
|
369
|
+
migrates_on_start: runtime.migratesOnStart,
|
|
370
|
+
pages: runtime.pages,
|
|
371
|
+
public_paths: runtime.publicPaths && [...runtime.publicPaths],
|
|
372
|
+
facts: runtime.facts && { ...runtime.facts },
|
|
373
|
+
settings: runtime.settings?.map((setting) => defined({ env: setting.env, required: setting.required })),
|
|
374
|
+
signing_key: runtime.signingKey && { env: runtime.signingKey.env },
|
|
375
|
+
database: database &&
|
|
376
|
+
defined({
|
|
377
|
+
min_major: database.minMajor,
|
|
378
|
+
dsn_scheme: database.dsnScheme,
|
|
379
|
+
roles: database.roles.map((role) => ({ id: role.id, login: role.login, env: role.env })),
|
|
380
|
+
provision_sql: database.provisionSql,
|
|
381
|
+
}),
|
|
382
|
+
secrets: runtime.secrets?.map((secret) => ({ id: secret.id, kind: secret.kind, env: secret.env })),
|
|
383
|
+
metrics: metrics && { path: metrics.path, token_env: metrics.tokenEnv },
|
|
384
|
+
integrations: integrations &&
|
|
385
|
+
defined({
|
|
386
|
+
billing: integrations.billing &&
|
|
387
|
+
defined({
|
|
388
|
+
hmac_env: integrations.billing.hmacEnv,
|
|
389
|
+
hmac_previous_env: integrations.billing.hmacPreviousEnv,
|
|
390
|
+
public_key_env: integrations.billing.publicKeyEnv,
|
|
391
|
+
}),
|
|
392
|
+
bundled_channel: integrations.bundledChannel && { env: integrations.bundledChannel.env },
|
|
393
|
+
}),
|
|
394
|
+
});
|
|
395
|
+
}
|
|
266
396
|
//# sourceMappingURL=build.js.map
|
package/dist/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,UAAU,EAA2C,MAAM,aAAa,CAAC;AAElF,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAgBjD,uDAAuD;AACvD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,yDAAyD,CAAC,CAAC;QAC5G,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAoBD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,OAAe,EACf,IAAY,EACZ,OAA8C;IAE9C,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC;AAED,yEAAyE;AACzE,SAAS,YAAY,CAAC,IAAY,EAAE,IAAY;IAC9C,IAAI,KAAkB,CAAC;IACvB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAgB,CAAC;IAChF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;IAChE,CAAC;IACD,MAAM,OAAO,GAAI,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC;IACvG,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACpF,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,+BAA+B,CAAC,GAAG,OAAO,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACrG,CAAC;IACD,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IACrC,OAAO,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;AACtG,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAgB,EAAE,IAAY,EAAE,KAAa;IACzE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACtD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM,CAAC,MAAM,eAAe,KAAK,oBAAoB,IAAI,CAAC,iBAAiB,WAAW,CAAC,CAAC;QACzH,CAAC;QACD,OAAO,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;IACvB,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAChE,CAAC;AAED,kFAAkF;AAClF,SAAS,OAAO,CAAC,MAAoB,EAAE,QAAkB,EAAE,QAAkB;IAC3E,QAAQ,CAAC,IAAI,CACX,GAAG,gBAAgB,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAC9H,CAAC;IACF,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACvF,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC/D,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAqB;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,CAAC;IACxB,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QAC9E,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;IAEtC,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IAC9D,MAAM,OAAO,GACX,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;YACpF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,OAAO,GACX,OAAO,CAAC,QAAQ,KAAK,SAAS;YAC5B,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAyB,CAAC,OAAO;YAChG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QACtB,IAAI,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9E,OAAO,CAAC,IAAI,CACV,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAC7F,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,YAAY,CAAC,EAC9D,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAC3D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,OAAO,CAAC,OAAO,KAAK,OAAO,6BAA6B,CAAC,CAAC;QAC9G,CAAC;IACH,CAAC;IAED,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,OAAO,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7D,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,gDAAgD,CAAC,CAAC;gBAC9E,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;QACH,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,2EAA2E;AAC3E,KAAK,UAAU,UAAU,CAAC,OAAgB,EAAE,IAAY,EAAE,KAAa;IACrE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,mBAAmB,EAAE,UAAU,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrH,MAAM,OAAO,CAAC,KAAK,CAAC;QAClB,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,OAAO;QACP,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAA4B,CAAC;QACtF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,6DAA6D,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,YAAY,CAAC,OAAgB,EAAE,IAAY,EAAE,MAAc;IACxE,MAAM,IAAI,GAAG,KAAK,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAChF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC;QACjC,KAAK,EAAE;YACL,QAAQ,EAAE,0BAA0B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kCAAkC;YAC1F,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,WAAW;YACvB,MAAM,EAAE,IAAI;SACb;QACD,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,MAAoB;IACxC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM;YAAE,QAAQ,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACxG,IAAI,MAAM,CAAC,MAAM;YAAE,QAAQ,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;QACnH,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO;YAAE,QAAQ,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;IACxI,CAAC;SAAM,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,+FAA+F;AAC/F,SAAS,eAAe,CAAC,EAAE,OAAO,EAAE,OAAO,EAA8C;IACvF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;IACxE,CAAC;IACD,KAAK,MAAM,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,6CAA6C,CAAC,EAAE,CAAC;QAC5F,QAAQ,CAAC,IAAI,CAAC,oBAAoB,WAAW,0EAA0E,CAAC,CAAC;IAC3H,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,4DAA4D,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxG,QAAQ,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,2IAA2I;AAC3I,SAAS,aAAa,CAAC,MAAoB,EAAE,MAAc;IACzD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAQ,CAAC;IAChC,OAAO;QACL,MAAM,EAAE,CAAC;QACT,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,SAAS,EAAE,MAAM,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,MAAM,EAAE;YACN,IAAI,EAAE,UAAU,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC1C,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC1D;QACD,QAAQ,EAAE;YACR;gBACE,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,UAAU,EAAE,GAAG,OAAO,CAAC,OAAO,gBAAgB;gBAC9C,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1F,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvF;SACF;QACD,YAAY,EAAE,cAAc,CAAC,MAAM,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAQ,CAAC;IAChC,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;QACzF,aAAa,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACjE,iBAAiB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;QACxD,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjH,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
|