@excom/service-worker 0.1.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/.rush/temp/chunked-rush-logs/service-worker.apply-exports.chunks.jsonl +1 -0
- package/.rush/temp/chunked-rush-logs/service-worker.build_docs.chunks.jsonl +1 -0
- package/.rush/temp/chunked-rush-logs/service-worker.build_package-metas.chunks.jsonl +1 -0
- package/.rush/temp/operation/apply-exports/all.log +1 -0
- package/.rush/temp/operation/apply-exports/log-chunks.jsonl +1 -0
- package/.rush/temp/operation/apply-exports/state.json +3 -0
- package/.rush/temp/operation/build_docs/all.log +1 -0
- package/.rush/temp/operation/build_docs/log-chunks.jsonl +1 -0
- package/.rush/temp/operation/build_docs/state.json +3 -0
- package/.rush/temp/operation/build_package-metas/all.log +1 -0
- package/.rush/temp/operation/build_package-metas/log-chunks.jsonl +1 -0
- package/.rush/temp/operation/build_package-metas/state.json +3 -0
- package/.rush/temp/shrinkwrap-deps.json +3 -0
- package/config/rig.json +5 -0
- package/index.ts +17 -0
- package/package.json +43 -0
- package/rush-logs/service-worker.apply-exports.cache.log +1 -0
- package/rush-logs/service-worker.apply-exports.log +1 -0
- package/rush-logs/service-worker.build_docs.cache.log +1 -0
- package/rush-logs/service-worker.build_docs.log +1 -0
- package/rush-logs/service-worker.build_package-metas.cache.log +1 -0
- package/rush-logs/service-worker.build_package-metas.log +1 -0
- package/service-worker.ts +217 -0
- package/support/custom-elements.json +162 -0
- package/support/demos/simple.html +3 -0
- package/support/dist-docs/service-worker.md +111 -0
- package/support/docs/INTERNAL.md +13 -0
- package/support/docs/README.md +55 -0
- package/support/package-meta.json +104 -0
- package/support/tests/service-worker.test.ts +525 -0
- package/support/tests/simple.view.test.ts +19 -0
- package/tsconfig.json +5 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# service-worker
|
|
2
|
+
|
|
3
|
+
Observes `navigator.serviceWorker` and optionally relays its events — zero app JS required.
|
|
4
|
+
|
|
5
|
+
<include-content data-demo="simple"></include-content>
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **Observation only** Reports on an existing Service Worker; never registers one
|
|
10
|
+
- **Support detection** `is-supported` reflects API availability
|
|
11
|
+
- **Ready state** `is-ready` reflects once an active worker controls the page
|
|
12
|
+
- **Event relay** `relay-events` forwards `message` / `messageerror` / `controllerchange` as plain DOM events
|
|
13
|
+
- **Bindable state** `.provision` is `{ isSupported, isReady, hasController, scope }` — kept current on connect, `ready`, and every `controllerchange`; read it from Quark with `prop("provision")`
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
<include-content is-active template-ref="/views/install-section/install-section.html"></include-content>
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
This element only *observes* an already-registered Service Worker — it does not call `navigator.serviceWorker.register(...)` itself. Register your Service Worker separately (in app code, or your build tool), then drop this element anywhere to expose its state as attributes and, optionally, relay its events.
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<service-worker relay-events></service-worker>
|
|
25
|
+
<event-handler listen-for="message" fire-event="sw-message-received">
|
|
26
|
+
...
|
|
27
|
+
</event-handler>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Relayed events (`message`, `messageerror`, `controllerchange`) are dispatched with their original names — they are **not** prefixed with `service-worker-`.
|
|
31
|
+
|
|
32
|
+
### API Reference
|
|
33
|
+
|
|
34
|
+
<include-content is-active template-ref="/views/api-reference/api-reference.html"></include-content>
|
|
35
|
+
|
|
36
|
+
### Examples
|
|
37
|
+
|
|
38
|
+
#### Support / mount / ready state
|
|
39
|
+
|
|
40
|
+
`is-supported`, `is-mounted` (reflected by default), and `is-ready` are all plain attributes — style or branch on them with CSS. `is-ready` needs an app-registered Service Worker to ever resolve, so it will likely stay unset in this docs site.
|
|
41
|
+
|
|
42
|
+
<include-content data-demo="simple"></include-content>
|
|
43
|
+
|
|
44
|
+
#### Relay messages from your Service Worker
|
|
45
|
+
|
|
46
|
+
Relaying `message` / `messageerror` / `controllerchange` requires a Service Worker that your app has already registered and that is actively posting messages — this is not runnable in this docs site, but works like so once wired up:
|
|
47
|
+
|
|
48
|
+
```html
|
|
49
|
+
<service-worker relay-events="message"></service-worker>
|
|
50
|
+
<script>
|
|
51
|
+
document
|
|
52
|
+
.querySelector("service-worker")
|
|
53
|
+
.addEventListener("message", (e) => console.log(e.detail));
|
|
54
|
+
</script>
|
|
55
|
+
```
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"shortName": "service-worker",
|
|
3
|
+
"package": {
|
|
4
|
+
"name": "@excom/service-worker",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"description": "<service-worker> custom element",
|
|
7
|
+
"peerDependencies": {},
|
|
8
|
+
"excom": {
|
|
9
|
+
"packageType": "kit-element"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"demos": {
|
|
13
|
+
"simple": "<div>\n <service-worker></service-worker>\n</div>\n"
|
|
14
|
+
},
|
|
15
|
+
"readme": "<h1 id=\"md-service-worker\">service-worker</h1>\n<p>Observes <code>navigator.serviceWorker</code> and optionally relays its events — zero app JS required.</p>\n<p><include-content data-demo=\"simple\"></include-content></p>\n<h2 id=\"md-features\">Features</h2>\n<ul>\n<li><strong>Observation only</strong> Reports on an existing Service Worker; never registers one</li>\n<li><strong>Support detection</strong> <code>is-supported</code> reflects API availability</li>\n<li><strong>Ready state</strong> <code>is-ready</code> reflects once an active worker controls the page</li>\n<li><strong>Event relay</strong> <code>relay-events</code> forwards <code>message</code> / <code>messageerror</code> / <code>controllerchange</code> as plain DOM events</li>\n<li><strong>Bindable state</strong> <code>.provision</code> is <code>{ isSupported, isReady, hasController, scope }</code> — kept current on connect, <code>ready</code>, and every <code>controllerchange</code>; read it from Quark with <code>prop("provision")</code></li>\n</ul>\n<h2 id=\"md-installation\">Installation</h2>\n<p><include-content is-active template-ref=\"/views/install-section/install-section.html\"></include-content></p>\n<h2 id=\"md-usage\">Usage</h2>\n<p>This element only <em>observes</em> an already-registered Service Worker — it does not call <code>navigator.serviceWorker.register(...)</code> itself. Register your Service Worker separately (in app code, or your build tool), then drop this element anywhere to expose its state as attributes and, optionally, relay its events.</p>\n<include-content data-language=\"html\"><template><service-worker relay-events></service-worker>\n<event-handler listen-for=\"message\" fire-event=\"sw-message-received\">\n ...\n</event-handler></template></include-content>\n<p>Relayed events (<code>message</code>, <code>messageerror</code>, <code>controllerchange</code>) are dispatched with their original names — they are <strong>not</strong> prefixed with <code>service-worker-</code>.</p>\n<h3 id=\"md-api-reference\">API Reference</h3>\n<p><include-content is-active template-ref=\"/views/api-reference/api-reference.html\"></include-content></p>\n<h3 id=\"md-examples\">Examples</h3>\n<h4 id=\"md-support-mount-ready-state\">Support / mount / ready state</h4>\n<p><code>is-supported</code>, <code>is-mounted</code> (reflected by default), and <code>is-ready</code> are all plain attributes — style or branch on them with CSS. <code>is-ready</code> needs an app-registered Service Worker to ever resolve, so it will likely stay unset in this docs site.</p>\n<p><include-content data-demo=\"simple\"></include-content></p>\n<h4 id=\"md-relay-messages-from-your-service-worker\">Relay messages from your Service Worker</h4>\n<p>Relaying <code>message</code> / <code>messageerror</code> / <code>controllerchange</code> requires a Service Worker that your app has already registered and that is actively posting messages — this is not runnable in this docs site, but works like so once wired up:</p>\n<include-content data-language=\"html\"><template><service-worker relay-events=\"message\"></service-worker>\n<script>\n document\n .querySelector(\"service-worker\")\n .addEventListener(\"message\", (e) => console.log(e.detail));\n</script></template></include-content>\n",
|
|
16
|
+
"docs": {
|
|
17
|
+
"readme": "<h1 id=\"md-service-worker\">service-worker</h1>\n<p>Observes <code>navigator.serviceWorker</code> and optionally relays its events — zero app JS required.</p>\n<p><include-content data-demo=\"simple\"></include-content></p>\n<h2 id=\"md-features\">Features</h2>\n<ul>\n<li><strong>Observation only</strong> Reports on an existing Service Worker; never registers one</li>\n<li><strong>Support detection</strong> <code>is-supported</code> reflects API availability</li>\n<li><strong>Ready state</strong> <code>is-ready</code> reflects once an active worker controls the page</li>\n<li><strong>Event relay</strong> <code>relay-events</code> forwards <code>message</code> / <code>messageerror</code> / <code>controllerchange</code> as plain DOM events</li>\n<li><strong>Bindable state</strong> <code>.provision</code> is <code>{ isSupported, isReady, hasController, scope }</code> — kept current on connect, <code>ready</code>, and every <code>controllerchange</code>; read it from Quark with <code>prop("provision")</code></li>\n</ul>\n<h2 id=\"md-installation\">Installation</h2>\n<p><include-content is-active template-ref=\"/views/install-section/install-section.html\"></include-content></p>\n<h2 id=\"md-usage\">Usage</h2>\n<p>This element only <em>observes</em> an already-registered Service Worker — it does not call <code>navigator.serviceWorker.register(...)</code> itself. Register your Service Worker separately (in app code, or your build tool), then drop this element anywhere to expose its state as attributes and, optionally, relay its events.</p>\n<include-content data-language=\"html\"><template><service-worker relay-events></service-worker>\n<event-handler listen-for=\"message\" fire-event=\"sw-message-received\">\n ...\n</event-handler></template></include-content>\n<p>Relayed events (<code>message</code>, <code>messageerror</code>, <code>controllerchange</code>) are dispatched with their original names — they are <strong>not</strong> prefixed with <code>service-worker-</code>.</p>\n<h3 id=\"md-api-reference\">API Reference</h3>\n<p><include-content is-active template-ref=\"/views/api-reference/api-reference.html\"></include-content></p>\n<h3 id=\"md-examples\">Examples</h3>\n<h4 id=\"md-support-mount-ready-state\">Support / mount / ready state</h4>\n<p><code>is-supported</code>, <code>is-mounted</code> (reflected by default), and <code>is-ready</code> are all plain attributes — style or branch on them with CSS. <code>is-ready</code> needs an app-registered Service Worker to ever resolve, so it will likely stay unset in this docs site.</p>\n<p><include-content data-demo=\"simple\"></include-content></p>\n<h4 id=\"md-relay-messages-from-your-service-worker\">Relay messages from your Service Worker</h4>\n<p>Relaying <code>message</code> / <code>messageerror</code> / <code>controllerchange</code> requires a Service Worker that your app has already registered and that is actively posting messages — this is not runnable in this docs site, but works like so once wired up:</p>\n<include-content data-language=\"html\"><template><service-worker relay-events=\"message\"></service-worker>\n<script>\n document\n .querySelector(\"service-worker\")\n .addEventListener(\"message\", (e) => console.log(e.detail));\n</script></template></include-content>\n"
|
|
18
|
+
},
|
|
19
|
+
"installation": {
|
|
20
|
+
"name": "@excom/service-worker",
|
|
21
|
+
"shortName": "service-worker",
|
|
22
|
+
"version": "0.1.0",
|
|
23
|
+
"description": "<service-worker> custom element",
|
|
24
|
+
"packageType": "kit-element",
|
|
25
|
+
"cdn": "<script src=\"https://unpkg.com/@excom/kit-utils/dist/index.umd.min.js\"></script>\n<script src=\"https://unpkg.com/@excom/neutron/dist/index.umd.min.js\"></script>\n<script src=\"https://unpkg.com/@excom/service-worker@0.1.0/dist/index.umd.min.js\"></script>",
|
|
26
|
+
"install": {
|
|
27
|
+
"npm": "npm install @excom/service-worker"
|
|
28
|
+
},
|
|
29
|
+
"imports": {
|
|
30
|
+
"js": "import \"@excom/service-worker\";",
|
|
31
|
+
"html": "<!-- import path to `node_modules` will depend on your build setup -->\n<script type=\"module\" src=\"/node_modules/@excom/service-worker\"></script>\n<link rel=\"stylesheet\" href=\"/node_modules/@excom/service-worker\">"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": []
|
|
34
|
+
},
|
|
35
|
+
"elementApis": [
|
|
36
|
+
{
|
|
37
|
+
"tag": "service-worker",
|
|
38
|
+
"summary": "Observes <code>navigator.serviceWorker</code> — does not register a SW.",
|
|
39
|
+
"kind": "class",
|
|
40
|
+
"attributes": [
|
|
41
|
+
{
|
|
42
|
+
"name": "relay-events",
|
|
43
|
+
"type": "tokenlist",
|
|
44
|
+
"description": "Space-separated <code>navigator.serviceWorker</code> events to relay onto this element. Bare attribute (no value) relays all three. Event names are relayed as-is — not prefixed with the tag.",
|
|
45
|
+
"fieldName": "relayEvents",
|
|
46
|
+
"surface": "option",
|
|
47
|
+
"values": "\"message\" | \"messageerror\" | \"controllerchange\""
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "is-ready",
|
|
51
|
+
"type": "boolean",
|
|
52
|
+
"description": "<code>navigator.serviceWorker.ready</code> has resolved — an active worker is controlling the page.",
|
|
53
|
+
"fieldName": "isReady",
|
|
54
|
+
"surface": "state"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "is-supported",
|
|
58
|
+
"type": "boolean",
|
|
59
|
+
"description": "The Service Worker API is available (<code>'serviceWorker' in navigator</code>).",
|
|
60
|
+
"fieldName": "isSupported",
|
|
61
|
+
"surface": "state"
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"events": [
|
|
65
|
+
{
|
|
66
|
+
"name": "controllerchange",
|
|
67
|
+
"description": "Relayed verbatim from <code>navigator.serviceWorker</code>'s <code>controllerchange</code> event when <code>controllerchange</code> is included in <code>relay-events</code>. Not tag-prefixed.",
|
|
68
|
+
"type": "ServiceWorkerControllerChangeEvent",
|
|
69
|
+
"typeExpanded": "CustomEvent & { type: \"controllerchange\"; detail: void; bubbles: true; cancelable: true; composed: true }"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "message",
|
|
73
|
+
"description": "Relayed verbatim from <code>navigator.serviceWorker</code>'s <code>message</code> event when <code>message</code> is included in <code>relay-events</code>. Not tag-prefixed. <code>event.detail</code> is <code>event.data</code> from the original message.",
|
|
74
|
+
"type": "ServiceWorkerMessageEvent",
|
|
75
|
+
"typeExpanded": "CustomEvent & { type: \"message\"; detail: unknown; bubbles: true; cancelable: true; composed: true }"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"name": "messageerror",
|
|
79
|
+
"description": "Relayed verbatim from <code>navigator.serviceWorker</code>'s <code>messageerror</code> event when <code>messageerror</code> is included in <code>relay-events</code>. Not tag-prefixed.",
|
|
80
|
+
"type": "ServiceWorkerMessageErrorEvent",
|
|
81
|
+
"typeExpanded": "CustomEvent & { type: \"messageerror\"; detail: unknown; bubbles: true; cancelable: true; composed: true }"
|
|
82
|
+
}
|
|
83
|
+
],
|
|
84
|
+
"slots": [],
|
|
85
|
+
"cssProperties": [],
|
|
86
|
+
"cssClasses": [],
|
|
87
|
+
"cssAliases": [],
|
|
88
|
+
"listens": [],
|
|
89
|
+
"commands": [],
|
|
90
|
+
"defaultActions": [],
|
|
91
|
+
"expectedChildren": [],
|
|
92
|
+
"provisions": [
|
|
93
|
+
{
|
|
94
|
+
"name": "provision",
|
|
95
|
+
"type": "ServiceWorkerProvision",
|
|
96
|
+
"typeExpanded": "{ isSupported: boolean; isReady: boolean; hasController: boolean; scope: string | null; }",
|
|
97
|
+
"description": "<code>{ isSupported, isReady, hasController, scope }</code> — set on connect, when <code>ready</code> resolves (<code>scope</code> comes from the registration), and on every <code>controllerchange</code>. Not reflected as an attribute.",
|
|
98
|
+
"fieldName": "provision"
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"exportedFiles": {}
|
|
104
|
+
}
|