piral-update 1.6.0-beta.7240 → 1.6.0-beta.7243
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/lib/UpdateDialog.js +8 -11
- package/lib/UpdateDialog.js.map +1 -1
- package/lib/actions.js +49 -30
- package/lib/actions.js.map +1 -1
- package/lib/components.js +2 -5
- package/lib/components.js.map +1 -1
- package/lib/create.js +10 -11
- package/lib/create.js.map +1 -1
- package/lib/default.js +2 -6
- package/lib/default.js.map +1 -1
- package/lib/helpers.js +4 -11
- package/lib/helpers.js.map +1 -1
- package/lib/index.js +5 -8
- package/lib/index.js.map +1 -1
- package/lib/types.d.ts +3 -1
- package/lib/types.js +1 -2
- package/package.json +8 -22
- package/piral-update.min.js +1 -1
- package/src/UpdateDialog.tsx +7 -2
- package/src/actions.ts +59 -22
- package/src/create.ts +5 -1
- package/src/types.ts +3 -1
- package/esm/UpdateDialog.d.ts +0 -2
- package/esm/UpdateDialog.js +0 -9
- package/esm/UpdateDialog.js.map +0 -1
- package/esm/actions.d.ts +0 -6
- package/esm/actions.js +0 -67
- package/esm/actions.js.map +0 -1
- package/esm/components.d.ts +0 -2
- package/esm/components.js +0 -3
- package/esm/components.js.map +0 -1
- package/esm/create.d.ts +0 -13
- package/esm/create.js +0 -38
- package/esm/create.js.map +0 -1
- package/esm/default.d.ts +0 -3
- package/esm/default.js +0 -3
- package/esm/default.js.map +0 -1
- package/esm/helpers.d.ts +0 -67
- package/esm/helpers.js +0 -57
- package/esm/helpers.js.map +0 -1
- package/esm/index.d.ts +0 -5
- package/esm/index.js +0 -6
- package/esm/index.js.map +0 -1
- package/esm/types.d.ts +0 -52
- package/esm/types.js +0 -2
- package/esm/types.js.map +0 -1
package/lib/UpdateDialog.js
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
const { active, target } = (0, piral_core_1.useGlobalState)((m) => m.updatability);
|
|
10
|
-
return (React.createElement(React.Fragment, null, active && (React.createElement(components_1.PiralUpdateDialog, { piletsToUpdate: target, onApprove: actions.approveUpdate, onReject: actions.rejectUpdate }))));
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useActions, useGlobalState } from 'piral-core';
|
|
3
|
+
import { PiralUpdateDialog } from './components';
|
|
4
|
+
export const UpdateDialog = () => {
|
|
5
|
+
const actions = useActions();
|
|
6
|
+
const { active, updated, removed } = useGlobalState((m) => m.updatability);
|
|
7
|
+
const piletsToUpdate = [...updated, ...removed];
|
|
8
|
+
return (React.createElement(React.Fragment, null, active && (React.createElement(PiralUpdateDialog, { piletsToUpdate: piletsToUpdate, onApprove: actions.approveUpdate, onReject: actions.rejectUpdate }))));
|
|
11
9
|
};
|
|
12
|
-
exports.UpdateDialog = UpdateDialog;
|
|
13
10
|
//# sourceMappingURL=UpdateDialog.js.map
|
package/lib/UpdateDialog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateDialog.js","sourceRoot":"","sources":["../src/UpdateDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"UpdateDialog.js","sourceRoot":"","sources":["../src/UpdateDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,CAAC,MAAM,YAAY,GAAa,GAAG,EAAE;IACzC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC3E,MAAM,cAAc,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;IAEhD,OAAO,CACL,0CACG,MAAM,IAAI,CACT,oBAAC,iBAAiB,IAChB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,OAAO,CAAC,aAAa,EAChC,QAAQ,EAAE,OAAO,CAAC,YAAY,GAC9B,CACH,CACA,CACJ,CAAC;AACJ,CAAC,CAAC"}
|
package/lib/actions.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setUpdateMode = exports.checkForUpdates = exports.approveUpdate = exports.rejectUpdate = void 0;
|
|
4
|
-
const piral_core_1 = require("piral-core");
|
|
1
|
+
import { withKey } from 'piral-core';
|
|
5
2
|
function getPiletHash(pilet) {
|
|
6
3
|
return {
|
|
7
4
|
name: pilet.name,
|
|
@@ -14,61 +11,83 @@ function sortPilets(a, b) {
|
|
|
14
11
|
function computePiletHash(pilets) {
|
|
15
12
|
return JSON.stringify(pilets.map(getPiletHash).sort(sortPilets));
|
|
16
13
|
}
|
|
17
|
-
function
|
|
14
|
+
function reset(ctx) {
|
|
18
15
|
ctx.dispatch((state) => ({
|
|
19
16
|
...state,
|
|
20
17
|
updatability: {
|
|
21
18
|
...state.updatability,
|
|
22
|
-
|
|
19
|
+
added: [],
|
|
20
|
+
updated: [],
|
|
21
|
+
removed: [],
|
|
23
22
|
active: false,
|
|
24
23
|
},
|
|
25
24
|
}));
|
|
26
25
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
ctx.addPilet(pilet);
|
|
26
|
+
async function apply(ctx) {
|
|
27
|
+
const { added, removed, updated } = ctx.readState((s) => s.updatability);
|
|
28
|
+
for (const pilet of removed) {
|
|
29
|
+
await ctx.removePilet(pilet.name);
|
|
32
30
|
}
|
|
33
|
-
|
|
31
|
+
for (const pilet of updated) {
|
|
32
|
+
await ctx.removePilet(pilet.name);
|
|
33
|
+
await ctx.addPilet(pilet);
|
|
34
|
+
}
|
|
35
|
+
for (const pilet of added) {
|
|
36
|
+
await ctx.addPilet(pilet);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export function rejectUpdate(ctx) {
|
|
40
|
+
reset(ctx);
|
|
34
41
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
export function approveUpdate(ctx) {
|
|
43
|
+
apply(ctx);
|
|
44
|
+
reset(ctx);
|
|
45
|
+
}
|
|
46
|
+
export function checkForUpdates(ctx, pilets) {
|
|
47
|
+
const currentHash = computePiletHash(pilets);
|
|
48
|
+
const currentPilets = ctx.readState((s) => s.modules);
|
|
49
|
+
const previousHash = ctx.readState((s) => s.updatability.lastHash || computePiletHash(currentPilets));
|
|
50
|
+
if (currentHash !== previousHash) {
|
|
40
51
|
const currentModes = ctx.readState((s) => s.registry.updatability);
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
-
const
|
|
52
|
+
const currentPiletNames = currentPilets.map((m) => m.name);
|
|
53
|
+
const isPending = (pilet) => currentModes[pilet.name]?.mode === 'ask';
|
|
54
|
+
const isNotBlocked = (pilet) => currentModes[pilet.name]?.mode !== 'block';
|
|
55
|
+
const added = pilets.filter((m) => !currentPiletNames.includes(m.name));
|
|
56
|
+
const removed = currentPilets.filter((m) => !pilets.some((p) => p.name === m.name) && isNotBlocked(m));
|
|
57
|
+
const updated = pilets.filter((pilet) => {
|
|
58
|
+
if ('version' in pilet && isNotBlocked(pilet)) {
|
|
59
|
+
const version = currentPilets.find((m) => m.name)?.version;
|
|
60
|
+
return !!version && version !== pilet.version;
|
|
61
|
+
}
|
|
62
|
+
return false;
|
|
63
|
+
});
|
|
46
64
|
ctx.dispatch((state) => {
|
|
65
|
+
const anyPendingDecision = [...removed, ...updated].some(isPending);
|
|
47
66
|
// no need to ask for approval
|
|
48
|
-
if (!
|
|
67
|
+
if (!anyPendingDecision) {
|
|
49
68
|
// automatically start the update in the next cycle
|
|
50
69
|
setTimeout(ctx.approveUpdate, 0);
|
|
51
70
|
}
|
|
52
71
|
return {
|
|
53
72
|
...state,
|
|
54
73
|
updatability: {
|
|
55
|
-
active,
|
|
56
|
-
lastHash:
|
|
57
|
-
|
|
74
|
+
active: anyPendingDecision,
|
|
75
|
+
lastHash: currentHash,
|
|
76
|
+
added,
|
|
77
|
+
removed,
|
|
78
|
+
updated,
|
|
58
79
|
},
|
|
59
80
|
};
|
|
60
81
|
});
|
|
61
82
|
}
|
|
62
83
|
}
|
|
63
|
-
|
|
64
|
-
function setUpdateMode(ctx, piletName, mode) {
|
|
84
|
+
export function setUpdateMode(ctx, piletName, mode) {
|
|
65
85
|
ctx.dispatch((state) => ({
|
|
66
86
|
...state,
|
|
67
87
|
registry: {
|
|
68
88
|
...state.registry,
|
|
69
|
-
updatability:
|
|
89
|
+
updatability: withKey(state.registry.updatability, piletName, { mode }),
|
|
70
90
|
},
|
|
71
91
|
}));
|
|
72
92
|
}
|
|
73
|
-
exports.setUpdateMode = setUpdateMode;
|
|
74
93
|
//# sourceMappingURL=actions.js.map
|
package/lib/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|
package/lib/components.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.PiralUpdateDialog = void 0;
|
|
4
|
-
const piral_core_1 = require("piral-core");
|
|
5
|
-
exports.PiralUpdateDialog = (0, piral_core_1.getPiralComponent)('UpdateDialog');
|
|
1
|
+
import { getPiralComponent } from 'piral-core';
|
|
2
|
+
export const PiralUpdateDialog = getPiralComponent('UpdateDialog');
|
|
6
3
|
//# sourceMappingURL=components.js.map
|
package/lib/components.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC"}
|
package/lib/create.js
CHANGED
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const actions = require("./actions");
|
|
5
|
-
const default_1 = require("./default");
|
|
6
|
-
const helpers_1 = require("./helpers");
|
|
1
|
+
import * as actions from './actions';
|
|
2
|
+
import { DefaultUpdateDialog } from './default';
|
|
3
|
+
import { checkPeriodically } from './helpers';
|
|
7
4
|
/**
|
|
8
5
|
* Creates new Pilet API extensions for updates of pilets.
|
|
9
6
|
*/
|
|
10
|
-
function createUpdateApi(config = {}) {
|
|
11
|
-
const { listen =
|
|
7
|
+
export function createUpdateApi(config = {}) {
|
|
8
|
+
const { listen = checkPeriodically() } = config;
|
|
12
9
|
return (context) => {
|
|
13
10
|
context.defineActions(actions);
|
|
14
11
|
context.dispatch((state) => ({
|
|
15
12
|
...state,
|
|
16
13
|
components: {
|
|
17
|
-
UpdateDialog:
|
|
14
|
+
UpdateDialog: DefaultUpdateDialog,
|
|
18
15
|
...state.components,
|
|
19
16
|
},
|
|
20
17
|
registry: {
|
|
@@ -24,12 +21,15 @@ function createUpdateApi(config = {}) {
|
|
|
24
21
|
updatability: {
|
|
25
22
|
active: false,
|
|
26
23
|
lastHash: undefined,
|
|
27
|
-
|
|
24
|
+
added: [],
|
|
25
|
+
removed: [],
|
|
26
|
+
updated: [],
|
|
28
27
|
},
|
|
29
28
|
}));
|
|
30
29
|
listen(context.checkForUpdates, context);
|
|
31
30
|
return (_, target) => {
|
|
32
31
|
const pilet = target.name;
|
|
32
|
+
target.config;
|
|
33
33
|
return {
|
|
34
34
|
canUpdate(mode) {
|
|
35
35
|
context.setUpdateMode(pilet, mode);
|
|
@@ -38,5 +38,4 @@ function createUpdateApi(config = {}) {
|
|
|
38
38
|
};
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
|
-
exports.createUpdateApi = createUpdateApi;
|
|
42
41
|
//# sourceMappingURL=create.js.map
|
package/lib/create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAW9C;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,SAAuB,EAAE;IACvD,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,EAAE,GAAG,MAAM,CAAC;IAEhD,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE/B,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3B,GAAG,KAAK;YACR,UAAU,EAAE;gBACV,YAAY,EAAE,mBAAmB;gBACjC,GAAG,KAAK,CAAC,UAAU;aACpB;YACD,QAAQ,EAAE;gBACR,GAAG,KAAK,CAAC,QAAQ;gBACjB,YAAY,EAAE,EAAE;aACjB;YACD,YAAY,EAAE;gBACZ,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,SAAS;gBACnB,KAAK,EAAE,EAAE;gBACT,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,EAAE;aACZ;SACF,CAAC,CAAC,CAAC;QAEJ,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAEzC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACnB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;YAE1B,MAAM,CAAC,MAAM,CAAA;YAEb,OAAO;gBACL,SAAS,CAAC,IAAI;oBACZ,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACrC,CAAC;aACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
package/lib/default.js
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.DefaultUpdateDialog = void 0;
|
|
4
|
-
const piral_core_1 = require("piral-core");
|
|
5
|
-
const DefaultUpdateDialog = (props) => (0, piral_core_1.defaultRender)(props.children);
|
|
6
|
-
exports.DefaultUpdateDialog = DefaultUpdateDialog;
|
|
1
|
+
import { defaultRender } from 'piral-core';
|
|
2
|
+
export const DefaultUpdateDialog = (props) => defaultRender(props.children);
|
|
7
3
|
//# sourceMappingURL=default.js.map
|
package/lib/default.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default.js","sourceRoot":"","sources":["../src/default.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"default.js","sourceRoot":"","sources":["../src/default.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,MAAM,CAAC,MAAM,mBAAmB,GAA0B,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC"}
|
package/lib/helpers.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.checkPiralEvent = exports.checkServerSentEvents = exports.checkWebSocket = exports.checkPeriodically = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* Creates a listener which periodicially checks the API.
|
|
6
3
|
* @param options The options to create the listener.
|
|
7
4
|
*/
|
|
8
|
-
function checkPeriodically(options = {}) {
|
|
5
|
+
export function checkPeriodically(options = {}) {
|
|
9
6
|
const { period = 5 * 60 * 1000 } = options;
|
|
10
7
|
return (notify, context) => {
|
|
11
8
|
setInterval(() => {
|
|
@@ -13,12 +10,11 @@ function checkPeriodically(options = {}) {
|
|
|
13
10
|
}, period);
|
|
14
11
|
};
|
|
15
12
|
}
|
|
16
|
-
exports.checkPeriodically = checkPeriodically;
|
|
17
13
|
/**
|
|
18
14
|
* Creates a listener connecting to a WebSocket.
|
|
19
15
|
* @param options The options to create the listener.
|
|
20
16
|
*/
|
|
21
|
-
function checkWebSocket(options) {
|
|
17
|
+
export function checkWebSocket(options) {
|
|
22
18
|
const { url, available } = options;
|
|
23
19
|
return (notify, context) => {
|
|
24
20
|
const ws = new WebSocket(url);
|
|
@@ -29,12 +25,11 @@ function checkWebSocket(options) {
|
|
|
29
25
|
};
|
|
30
26
|
};
|
|
31
27
|
}
|
|
32
|
-
exports.checkWebSocket = checkWebSocket;
|
|
33
28
|
/**
|
|
34
29
|
* Creates a listener connecting to an EventSource.
|
|
35
30
|
* @param options The options to create the listener.
|
|
36
31
|
*/
|
|
37
|
-
function checkServerSentEvents(options) {
|
|
32
|
+
export function checkServerSentEvents(options) {
|
|
38
33
|
const { url, name, available = () => true } = options;
|
|
39
34
|
return (notify, context) => {
|
|
40
35
|
const sse = new EventSource(url);
|
|
@@ -45,12 +40,11 @@ function checkServerSentEvents(options) {
|
|
|
45
40
|
});
|
|
46
41
|
};
|
|
47
42
|
}
|
|
48
|
-
exports.checkServerSentEvents = checkServerSentEvents;
|
|
49
43
|
/**
|
|
50
44
|
* Creates a listener relying on a Piral event.
|
|
51
45
|
* @param options The options to create the listener.
|
|
52
46
|
*/
|
|
53
|
-
function checkPiralEvent(options) {
|
|
47
|
+
export function checkPiralEvent(options) {
|
|
54
48
|
const { name, available = () => true } = options;
|
|
55
49
|
return (notify, context) => {
|
|
56
50
|
context.on(name, (e) => {
|
|
@@ -60,5 +54,4 @@ function checkPiralEvent(options) {
|
|
|
60
54
|
});
|
|
61
55
|
};
|
|
62
56
|
}
|
|
63
|
-
exports.checkPiralEvent = checkPiralEvent;
|
|
64
57
|
//# sourceMappingURL=helpers.js.map
|
package/lib/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAA2C,EAAE;IAC7E,MAAM,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAE3C,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACzB,WAAW,CAAC,GAAG,EAAE;YACf,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC,EAAE,MAAM,CAAC,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AAeD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAqC;IAClE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAEnC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACzB,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;QAC9B,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE;YACnB,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;gBACxB,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC5C;QACH,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAkBD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAA4C;IAChF,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC;IAEtD,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;YAC/B,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;gBAChB,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC5C;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAcD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAsC;IACpE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC;IAEjD,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACzB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;YACrB,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;gBAChB,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC5C;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
tslib_1.__exportStar(require("./helpers"), exports);
|
|
7
|
-
tslib_1.__exportStar(require("./types"), exports);
|
|
8
|
-
tslib_1.__exportStar(require("./UpdateDialog"), exports);
|
|
1
|
+
export * from './components';
|
|
2
|
+
export * from './create';
|
|
3
|
+
export * from './helpers';
|
|
4
|
+
export * from './types';
|
|
5
|
+
export * from './UpdateDialog';
|
|
9
6
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC"}
|
package/lib/types.d.ts
CHANGED
|
@@ -31,7 +31,9 @@ export interface UpdateModeRegistration {
|
|
|
31
31
|
export interface UpdatabilityState {
|
|
32
32
|
active: boolean;
|
|
33
33
|
lastHash: string;
|
|
34
|
-
|
|
34
|
+
added: PiletEntries;
|
|
35
|
+
removed: PiletEntries;
|
|
36
|
+
updated: PiletEntries;
|
|
35
37
|
}
|
|
36
38
|
export interface ListenCallback {
|
|
37
39
|
(notify: (pilets: PiletEntries) => void, context: GlobalStateContext): void;
|
package/lib/types.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "piral-update",
|
|
3
|
-
"version": "1.6.0-beta.
|
|
3
|
+
"version": "1.6.0-beta.7243",
|
|
4
4
|
"description": "Plugin for auto-updating pilets in Piral.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"piral",
|
|
@@ -18,29 +18,16 @@
|
|
|
18
18
|
"author": "smapiot",
|
|
19
19
|
"homepage": "https://piral.io",
|
|
20
20
|
"license": "MIT",
|
|
21
|
-
"module": "
|
|
21
|
+
"module": "lib/index.js",
|
|
22
22
|
"main": "lib/index.js",
|
|
23
23
|
"typings": "lib/index.d.ts",
|
|
24
24
|
"exports": {
|
|
25
|
-
".":
|
|
26
|
-
|
|
27
|
-
"require": "./lib/index.js"
|
|
28
|
-
},
|
|
29
|
-
"./esm/*": {
|
|
30
|
-
"import": "./esm/*"
|
|
31
|
-
},
|
|
32
|
-
"./lib/*": {
|
|
33
|
-
"require": "./lib/*"
|
|
34
|
-
},
|
|
35
|
-
"./_/*": {
|
|
36
|
-
"import": "./esm/*.js",
|
|
37
|
-
"require": "./lib/*.js"
|
|
38
|
-
},
|
|
25
|
+
".": "./lib/index.js",
|
|
26
|
+
"./lib/*": "./lib/*",
|
|
39
27
|
"./package.json": "./package.json"
|
|
40
28
|
},
|
|
41
29
|
"sideEffects": false,
|
|
42
30
|
"files": [
|
|
43
|
-
"esm",
|
|
44
31
|
"lib",
|
|
45
32
|
"src",
|
|
46
33
|
"piral-update.min.js"
|
|
@@ -54,17 +41,16 @@
|
|
|
54
41
|
},
|
|
55
42
|
"scripts": {
|
|
56
43
|
"cleanup": "rimraf esm lib piral-update.min.js",
|
|
57
|
-
"build": "yarn build:bundle && yarn build:
|
|
44
|
+
"build": "yarn build:bundle && yarn build:esnext",
|
|
58
45
|
"build:bundle": "esbuild src/index.ts --outfile=piral-update.min.js --bundle --external:piral-core --external:react --minify --global-name=piralUpdate",
|
|
59
|
-
"build:
|
|
60
|
-
"build:esnext": "tsc --project tsconfig.json --outDir esm --module esnext",
|
|
46
|
+
"build:esnext": "tsc --project tsconfig.json --outDir lib --module esnext",
|
|
61
47
|
"typedoc": "typedoc --json ../../../docs/types/piral-update.json src --exclude \"src/**/*.test.*\"",
|
|
62
48
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
|
63
49
|
},
|
|
64
50
|
"devDependencies": {
|
|
65
51
|
"@types/react": "^18.0.0",
|
|
66
|
-
"piral-core": "1.6.0-beta.
|
|
52
|
+
"piral-core": "1.6.0-beta.7243",
|
|
67
53
|
"react": "^18.0.0"
|
|
68
54
|
},
|
|
69
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "bbb6e4f78c61b6ef753099a5b378ad2708565ce3"
|
|
70
56
|
}
|
package/piral-update.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var piralUpdate=(()=>{var
|
|
1
|
+
var piralUpdate=(()=>{var O=Object.create;var m=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,A=Object.prototype.hasOwnProperty;var k=e=>m(e,"__esModule",{value:!0});var p=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(t,o)=>(typeof require!="undefined"?require:t)[o]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var C=(e,t)=>{k(e);for(var o in t)m(e,o,{get:t[o],enumerable:!0})},R=(e,t,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of L(t))!A.call(e,a)&&a!=="default"&&m(e,a,{get:()=>t[a],enumerable:!(o=G(t,a))||o.enumerable});return e},c=e=>R(k(m(e!=null?O(M(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var V={};C(V,{PiralUpdateDialog:()=>y,UpdateDialog:()=>Q,checkPeriodically:()=>P,checkPiralEvent:()=>q,checkServerSentEvents:()=>_,checkWebSocket:()=>K,createUpdateApi:()=>z});var U=c(p("piral-core")),y=(0,U.getPiralComponent)("UpdateDialog");var v={};C(v,{approveUpdate:()=>B,checkForUpdates:()=>I,rejectUpdate:()=>T,setUpdateMode:()=>J});var S=c(p("piral-core"));function W(e){return{name:e.name,version:e.version}}function j(e,t){return e.name.localeCompare(t.name)}function E(e){return JSON.stringify(e.map(W).sort(j))}function x(e){e.dispatch(t=>({...t,updatability:{...t.updatability,added:[],updated:[],removed:[],active:!1}}))}async function N(e){let{added:t,removed:o,updated:a}=e.readState(r=>r.updatability);for(let r of o)await e.removePilet(r.name);for(let r of a)await e.removePilet(r.name),await e.addPilet(r);for(let r of t)await e.addPilet(r)}function T(e){x(e)}function B(e){N(e),x(e)}function I(e,t){let o=E(t),a=e.readState(n=>n.modules),r=e.readState(n=>n.updatability.lastHash||E(a));if(o!==r){let n=e.readState(i=>i.registry.updatability),s=a.map(i=>i.name),u=i=>n[i.name]?.mode==="ask",h=i=>n[i.name]?.mode!=="block",H=t.filter(i=>!s.includes(i.name)),b=a.filter(i=>!t.some(l=>l.name===i.name)&&h(i)),g=t.filter(i=>{if("version"in i&&h(i)){let l=a.find(w=>w.name)?.version;return!!l&&l!==i.version}return!1});e.dispatch(i=>{let l=[...b,...g].some(u);return l||setTimeout(e.approveUpdate,0),{...i,updatability:{active:l,lastHash:o,added:H,removed:b,updated:g}}})}}function J(e,t,o){e.dispatch(a=>({...a,registry:{...a.registry,updatability:(0,S.withKey)(a.registry.updatability,t,{mode:o})}}))}var D=c(p("piral-core")),F=e=>(0,D.defaultRender)(e.children);function P(e={}){let{period:t=5*60*1e3}=e;return(o,a)=>{setInterval(()=>{a.options.fetchPilets().then(o)},t)}}function K(e){let{url:t,available:o}=e;return(a,r)=>{let n=new WebSocket(t);n.onmessage=s=>{o(s.data,s)&&r.options.fetchPilets().then(a)}}}function _(e){let{url:t,name:o,available:a=()=>!0}=e;return(r,n)=>{new EventSource(t).addEventListener(o,u=>{a(u)&&n.options.fetchPilets().then(r)})}}function q(e){let{name:t,available:o=()=>!0}=e;return(a,r)=>{r.on(t,n=>{o(n)&&r.options.fetchPilets().then(a)})}}function z(e={}){let{listen:t=P()}=e;return o=>(o.defineActions(v),o.dispatch(a=>({...a,components:{UpdateDialog:F,...a.components},registry:{...a.registry,updatability:{}},updatability:{active:!1,lastHash:void 0,added:[],removed:[],updated:[]}})),t(o.checkForUpdates,o),(a,r)=>{let n=r.name;return r.config,{canUpdate(s){o.setUpdateMode(n,s)}}})}var d=c(p("react")),f=c(p("piral-core"));var Q=()=>{let e=(0,f.useActions)(),{active:t,updated:o,removed:a}=(0,f.useGlobalState)(n=>n.updatability),r=[...o,...a];return d.createElement(d.Fragment,null,t&&d.createElement(y,{piletsToUpdate:r,onApprove:e.approveUpdate,onReject:e.rejectUpdate}))};return V;})();
|
package/src/UpdateDialog.tsx
CHANGED
|
@@ -4,12 +4,17 @@ import { PiralUpdateDialog } from './components';
|
|
|
4
4
|
|
|
5
5
|
export const UpdateDialog: React.FC = () => {
|
|
6
6
|
const actions = useActions();
|
|
7
|
-
const { active,
|
|
7
|
+
const { active, updated, removed } = useGlobalState((m) => m.updatability);
|
|
8
|
+
const piletsToUpdate = [...updated, ...removed];
|
|
8
9
|
|
|
9
10
|
return (
|
|
10
11
|
<>
|
|
11
12
|
{active && (
|
|
12
|
-
<PiralUpdateDialog
|
|
13
|
+
<PiralUpdateDialog
|
|
14
|
+
piletsToUpdate={piletsToUpdate}
|
|
15
|
+
onApprove={actions.approveUpdate}
|
|
16
|
+
onReject={actions.rejectUpdate}
|
|
17
|
+
/>
|
|
13
18
|
)}
|
|
14
19
|
</>
|
|
15
20
|
);
|
package/src/actions.ts
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
import { withKey, GlobalStateContext, PiletEntries, PiletMetadata } from 'piral-core';
|
|
1
|
+
import { withKey, GlobalStateContext, PiletEntries, PiletMetadata, PiletEntry } from 'piral-core';
|
|
2
2
|
import { PiletUpdateMode } from './types';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
interface HashEntry {
|
|
5
|
+
name: string;
|
|
6
|
+
version: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function getPiletHash(pilet: PiletMetadata): HashEntry {
|
|
5
10
|
return {
|
|
6
11
|
name: pilet.name,
|
|
7
12
|
version: pilet.version,
|
|
8
13
|
};
|
|
9
14
|
}
|
|
10
15
|
|
|
11
|
-
function sortPilets(a:
|
|
16
|
+
function sortPilets(a: HashEntry, b: HashEntry) {
|
|
12
17
|
return a.name.localeCompare(b.name);
|
|
13
18
|
}
|
|
14
19
|
|
|
@@ -16,42 +21,72 @@ function computePiletHash(pilets: PiletEntries) {
|
|
|
16
21
|
return JSON.stringify(pilets.map(getPiletHash).sort(sortPilets));
|
|
17
22
|
}
|
|
18
23
|
|
|
19
|
-
|
|
24
|
+
function reset(ctx: GlobalStateContext) {
|
|
20
25
|
ctx.dispatch((state) => ({
|
|
21
26
|
...state,
|
|
22
27
|
updatability: {
|
|
23
28
|
...state.updatability,
|
|
24
|
-
|
|
29
|
+
added: [],
|
|
30
|
+
updated: [],
|
|
31
|
+
removed: [],
|
|
25
32
|
active: false,
|
|
26
33
|
},
|
|
27
34
|
}));
|
|
28
35
|
}
|
|
29
36
|
|
|
30
|
-
|
|
31
|
-
const
|
|
37
|
+
async function apply(ctx: GlobalStateContext) {
|
|
38
|
+
const { added, removed, updated } = ctx.readState((s) => s.updatability);
|
|
32
39
|
|
|
33
|
-
for (const pilet of
|
|
34
|
-
ctx.
|
|
40
|
+
for (const pilet of removed) {
|
|
41
|
+
await ctx.removePilet(pilet.name);
|
|
35
42
|
}
|
|
36
43
|
|
|
37
|
-
|
|
44
|
+
for (const pilet of updated) {
|
|
45
|
+
await ctx.removePilet(pilet.name);
|
|
46
|
+
await ctx.addPilet(pilet);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
for (const pilet of added) {
|
|
50
|
+
await ctx.addPilet(pilet);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function rejectUpdate(ctx: GlobalStateContext) {
|
|
55
|
+
reset(ctx);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function approveUpdate(ctx: GlobalStateContext) {
|
|
59
|
+
apply(ctx);
|
|
60
|
+
reset(ctx);
|
|
38
61
|
}
|
|
39
62
|
|
|
40
63
|
export function checkForUpdates(ctx: GlobalStateContext, pilets: PiletEntries) {
|
|
41
|
-
const
|
|
42
|
-
const
|
|
64
|
+
const currentHash = computePiletHash(pilets);
|
|
65
|
+
const currentPilets = ctx.readState((s) => s.modules);
|
|
66
|
+
const previousHash = ctx.readState((s) => s.updatability.lastHash || computePiletHash(currentPilets));
|
|
43
67
|
|
|
44
|
-
if (
|
|
68
|
+
if (currentHash !== previousHash) {
|
|
45
69
|
const currentModes = ctx.readState((s) => s.registry.updatability);
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
const
|
|
70
|
+
const currentPiletNames = currentPilets.map((m) => m.name);
|
|
71
|
+
const isPending = (pilet: PiletEntry) => currentModes[pilet.name]?.mode === 'ask';
|
|
72
|
+
const isNotBlocked = (pilet: PiletEntry) => currentModes[pilet.name]?.mode !== 'block';
|
|
73
|
+
|
|
74
|
+
const added = pilets.filter((m) => !currentPiletNames.includes(m.name));
|
|
75
|
+
const removed = currentPilets.filter((m) => !pilets.some((p) => p.name === m.name) && isNotBlocked(m));
|
|
76
|
+
const updated = pilets.filter((pilet) => {
|
|
77
|
+
if ('version' in pilet && isNotBlocked(pilet)) {
|
|
78
|
+
const version = currentPilets.find((m) => m.name)?.version;
|
|
79
|
+
return !!version && version !== pilet.version;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return false;
|
|
83
|
+
});
|
|
51
84
|
|
|
52
85
|
ctx.dispatch((state) => {
|
|
86
|
+
const anyPendingDecision = [...removed, ...updated].some(isPending);
|
|
87
|
+
|
|
53
88
|
// no need to ask for approval
|
|
54
|
-
if (!
|
|
89
|
+
if (!anyPendingDecision) {
|
|
55
90
|
// automatically start the update in the next cycle
|
|
56
91
|
setTimeout(ctx.approveUpdate, 0);
|
|
57
92
|
}
|
|
@@ -59,9 +94,11 @@ export function checkForUpdates(ctx: GlobalStateContext, pilets: PiletEntries) {
|
|
|
59
94
|
return {
|
|
60
95
|
...state,
|
|
61
96
|
updatability: {
|
|
62
|
-
active,
|
|
63
|
-
lastHash:
|
|
64
|
-
|
|
97
|
+
active: anyPendingDecision,
|
|
98
|
+
lastHash: currentHash,
|
|
99
|
+
added,
|
|
100
|
+
removed,
|
|
101
|
+
updated,
|
|
65
102
|
},
|
|
66
103
|
};
|
|
67
104
|
});
|
package/src/create.ts
CHANGED
|
@@ -34,7 +34,9 @@ export function createUpdateApi(config: UpdateConfig = {}): PiralPlugin<PiletUpd
|
|
|
34
34
|
updatability: {
|
|
35
35
|
active: false,
|
|
36
36
|
lastHash: undefined,
|
|
37
|
-
|
|
37
|
+
added: [],
|
|
38
|
+
removed: [],
|
|
39
|
+
updated: [],
|
|
38
40
|
},
|
|
39
41
|
}));
|
|
40
42
|
|
|
@@ -43,6 +45,8 @@ export function createUpdateApi(config: UpdateConfig = {}): PiralPlugin<PiletUpd
|
|
|
43
45
|
return (_, target) => {
|
|
44
46
|
const pilet = target.name;
|
|
45
47
|
|
|
48
|
+
target.config
|
|
49
|
+
|
|
46
50
|
return {
|
|
47
51
|
canUpdate(mode) {
|
|
48
52
|
context.setUpdateMode(pilet, mode);
|
package/src/types.ts
CHANGED
|
@@ -40,7 +40,9 @@ export interface UpdateModeRegistration {
|
|
|
40
40
|
export interface UpdatabilityState {
|
|
41
41
|
active: boolean;
|
|
42
42
|
lastHash: string;
|
|
43
|
-
|
|
43
|
+
added: PiletEntries;
|
|
44
|
+
removed: PiletEntries;
|
|
45
|
+
updated: PiletEntries;
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
export interface ListenCallback {
|
package/esm/UpdateDialog.d.ts
DELETED
package/esm/UpdateDialog.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { useActions, useGlobalState } from 'piral-core';
|
|
3
|
-
import { PiralUpdateDialog } from './components';
|
|
4
|
-
export const UpdateDialog = () => {
|
|
5
|
-
const actions = useActions();
|
|
6
|
-
const { active, target } = useGlobalState((m) => m.updatability);
|
|
7
|
-
return (React.createElement(React.Fragment, null, active && (React.createElement(PiralUpdateDialog, { piletsToUpdate: target, onApprove: actions.approveUpdate, onReject: actions.rejectUpdate }))));
|
|
8
|
-
};
|
|
9
|
-
//# sourceMappingURL=UpdateDialog.js.map
|
package/esm/UpdateDialog.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateDialog.js","sourceRoot":"","sources":["../src/UpdateDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,CAAC,MAAM,YAAY,GAAa,GAAG,EAAE;IACzC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAEjE,OAAO,CACL,0CACG,MAAM,IAAI,CACT,oBAAC,iBAAiB,IAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,YAAY,GAAI,CAChH,CACA,CACJ,CAAC;AACJ,CAAC,CAAC"}
|
package/esm/actions.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { GlobalStateContext, PiletEntries } from 'piral-core';
|
|
2
|
-
import { PiletUpdateMode } from './types';
|
|
3
|
-
export declare function rejectUpdate(ctx: GlobalStateContext): void;
|
|
4
|
-
export declare function approveUpdate(ctx: GlobalStateContext): void;
|
|
5
|
-
export declare function checkForUpdates(ctx: GlobalStateContext, pilets: PiletEntries): void;
|
|
6
|
-
export declare function setUpdateMode(ctx: GlobalStateContext, piletName: string, mode: PiletUpdateMode): void;
|
package/esm/actions.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { withKey } from 'piral-core';
|
|
2
|
-
function getPiletHash(pilet) {
|
|
3
|
-
return {
|
|
4
|
-
name: pilet.name,
|
|
5
|
-
version: pilet.version,
|
|
6
|
-
};
|
|
7
|
-
}
|
|
8
|
-
function sortPilets(a, b) {
|
|
9
|
-
return a.name.localeCompare(b.name);
|
|
10
|
-
}
|
|
11
|
-
function computePiletHash(pilets) {
|
|
12
|
-
return JSON.stringify(pilets.map(getPiletHash).sort(sortPilets));
|
|
13
|
-
}
|
|
14
|
-
export function rejectUpdate(ctx) {
|
|
15
|
-
ctx.dispatch((state) => ({
|
|
16
|
-
...state,
|
|
17
|
-
updatability: {
|
|
18
|
-
...state.updatability,
|
|
19
|
-
target: [],
|
|
20
|
-
active: false,
|
|
21
|
-
},
|
|
22
|
-
}));
|
|
23
|
-
}
|
|
24
|
-
export function approveUpdate(ctx) {
|
|
25
|
-
const pilets = ctx.readState((s) => s.updatability.target);
|
|
26
|
-
for (const pilet of pilets) {
|
|
27
|
-
ctx.addPilet(pilet);
|
|
28
|
-
}
|
|
29
|
-
ctx.rejectUpdate();
|
|
30
|
-
}
|
|
31
|
-
export function checkForUpdates(ctx, pilets) {
|
|
32
|
-
const checkHash = computePiletHash(pilets);
|
|
33
|
-
const lastHash = ctx.readState((s) => s.updatability.lastHash || computePiletHash(s.modules));
|
|
34
|
-
if (checkHash !== lastHash) {
|
|
35
|
-
const currentModes = ctx.readState((s) => s.registry.updatability);
|
|
36
|
-
const piletNames = Object.keys(currentModes);
|
|
37
|
-
const blocked = piletNames.filter((m) => currentModes[m].mode === 'block');
|
|
38
|
-
const ask = piletNames.filter((m) => currentModes[m].mode === 'ask');
|
|
39
|
-
const target = pilets.filter((pilet) => !blocked.includes(pilet.name));
|
|
40
|
-
const active = ask.length > 0;
|
|
41
|
-
ctx.dispatch((state) => {
|
|
42
|
-
// no need to ask for approval
|
|
43
|
-
if (!active) {
|
|
44
|
-
// automatically start the update in the next cycle
|
|
45
|
-
setTimeout(ctx.approveUpdate, 0);
|
|
46
|
-
}
|
|
47
|
-
return {
|
|
48
|
-
...state,
|
|
49
|
-
updatability: {
|
|
50
|
-
active,
|
|
51
|
-
lastHash: checkHash,
|
|
52
|
-
target,
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
export function setUpdateMode(ctx, piletName, mode) {
|
|
59
|
-
ctx.dispatch((state) => ({
|
|
60
|
-
...state,
|
|
61
|
-
registry: {
|
|
62
|
-
...state.registry,
|
|
63
|
-
updatability: withKey(state.registry.updatability, piletName, { mode }),
|
|
64
|
-
},
|
|
65
|
-
}));
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=actions.js.map
|
package/esm/actions.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|
package/esm/components.d.ts
DELETED
package/esm/components.js
DELETED
package/esm/components.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC"}
|
package/esm/create.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { PiralPlugin } from 'piral-core';
|
|
2
|
-
import { PiletUpdateApi, ListenCallback } from './types';
|
|
3
|
-
export interface UpdateConfig {
|
|
4
|
-
/**
|
|
5
|
-
* Sets the connector for listening to retrieve update notifications.
|
|
6
|
-
* By default a periodic check every 5 minute is used.
|
|
7
|
-
*/
|
|
8
|
-
listen?: ListenCallback;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Creates new Pilet API extensions for updates of pilets.
|
|
12
|
-
*/
|
|
13
|
-
export declare function createUpdateApi(config?: UpdateConfig): PiralPlugin<PiletUpdateApi>;
|
package/esm/create.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import * as actions from './actions';
|
|
2
|
-
import { DefaultUpdateDialog } from './default';
|
|
3
|
-
import { checkPeriodically } from './helpers';
|
|
4
|
-
/**
|
|
5
|
-
* Creates new Pilet API extensions for updates of pilets.
|
|
6
|
-
*/
|
|
7
|
-
export function createUpdateApi(config = {}) {
|
|
8
|
-
const { listen = checkPeriodically() } = config;
|
|
9
|
-
return (context) => {
|
|
10
|
-
context.defineActions(actions);
|
|
11
|
-
context.dispatch((state) => ({
|
|
12
|
-
...state,
|
|
13
|
-
components: {
|
|
14
|
-
UpdateDialog: DefaultUpdateDialog,
|
|
15
|
-
...state.components,
|
|
16
|
-
},
|
|
17
|
-
registry: {
|
|
18
|
-
...state.registry,
|
|
19
|
-
updatability: {},
|
|
20
|
-
},
|
|
21
|
-
updatability: {
|
|
22
|
-
active: false,
|
|
23
|
-
lastHash: undefined,
|
|
24
|
-
target: [],
|
|
25
|
-
},
|
|
26
|
-
}));
|
|
27
|
-
listen(context.checkForUpdates, context);
|
|
28
|
-
return (_, target) => {
|
|
29
|
-
const pilet = target.name;
|
|
30
|
-
return {
|
|
31
|
-
canUpdate(mode) {
|
|
32
|
-
context.setUpdateMode(pilet, mode);
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
};
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=create.js.map
|
package/esm/create.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAW9C;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,SAAuB,EAAE;IACvD,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,EAAE,GAAG,MAAM,CAAC;IAEhD,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE/B,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3B,GAAG,KAAK;YACR,UAAU,EAAE;gBACV,YAAY,EAAE,mBAAmB;gBACjC,GAAG,KAAK,CAAC,UAAU;aACpB;YACD,QAAQ,EAAE;gBACR,GAAG,KAAK,CAAC,QAAQ;gBACjB,YAAY,EAAE,EAAE;aACjB;YACD,YAAY,EAAE;gBACZ,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,EAAE;aACX;SACF,CAAC,CAAC,CAAC;QAEJ,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAEzC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACnB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;YAE1B,OAAO;gBACL,SAAS,CAAC,IAAI;oBACZ,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACrC,CAAC;aACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
package/esm/default.d.ts
DELETED
package/esm/default.js
DELETED
package/esm/default.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"default.js","sourceRoot":"","sources":["../src/default.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,MAAM,CAAC,MAAM,mBAAmB,GAA0B,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC"}
|
package/esm/helpers.d.ts
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { ListenCallback } from './types';
|
|
2
|
-
export interface CheckPeriodicallyFactoryOptions {
|
|
3
|
-
/**
|
|
4
|
-
* The time [in ms] between two checks for updates.
|
|
5
|
-
* By default 5 minutes.
|
|
6
|
-
* @default 300000
|
|
7
|
-
*/
|
|
8
|
-
period?: number;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Creates a listener which periodicially checks the API.
|
|
12
|
-
* @param options The options to create the listener.
|
|
13
|
-
*/
|
|
14
|
-
export declare function checkPeriodically(options?: CheckPeriodicallyFactoryOptions): ListenCallback;
|
|
15
|
-
export interface CheckWebSocketFactoryOptions {
|
|
16
|
-
/**
|
|
17
|
-
* The fully qualified URL for the WebSocket endpoint.
|
|
18
|
-
*/
|
|
19
|
-
url: string;
|
|
20
|
-
/**
|
|
21
|
-
* A function that is used to determine if the current message indicates an update.
|
|
22
|
-
* @param data The data of the message. This is the string.
|
|
23
|
-
* @param raw The raw WebSocket message event.
|
|
24
|
-
*/
|
|
25
|
-
available(data: string, raw: MessageEvent<any>): boolean;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Creates a listener connecting to a WebSocket.
|
|
29
|
-
* @param options The options to create the listener.
|
|
30
|
-
*/
|
|
31
|
-
export declare function checkWebSocket(options: CheckWebSocketFactoryOptions): ListenCallback;
|
|
32
|
-
export interface CheckServerSentEventsFactoryOptions {
|
|
33
|
-
/**
|
|
34
|
-
* The fully qualified URL for the Server-Side-Events endpoint.
|
|
35
|
-
*/
|
|
36
|
-
url: string;
|
|
37
|
-
/**
|
|
38
|
-
* The name of the event announcing updates to a pilet.
|
|
39
|
-
*/
|
|
40
|
-
name: string;
|
|
41
|
-
/**
|
|
42
|
-
* An optional function that is used to determine if the current event indicates an update.
|
|
43
|
-
* @param raw The raw message event.
|
|
44
|
-
*/
|
|
45
|
-
available?(raw: Event): boolean;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Creates a listener connecting to an EventSource.
|
|
49
|
-
* @param options The options to create the listener.
|
|
50
|
-
*/
|
|
51
|
-
export declare function checkServerSentEvents(options: CheckServerSentEventsFactoryOptions): ListenCallback;
|
|
52
|
-
export interface CheckPiralEventFactoryOptions {
|
|
53
|
-
/**
|
|
54
|
-
* The name of the event announcing updates to a pilet.
|
|
55
|
-
*/
|
|
56
|
-
name: string;
|
|
57
|
-
/**
|
|
58
|
-
* An optional function that is used to determine if the current event indicates an update.
|
|
59
|
-
* @param e The event data.
|
|
60
|
-
*/
|
|
61
|
-
available?(e: any): boolean;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Creates a listener relying on a Piral event.
|
|
65
|
-
* @param options The options to create the listener.
|
|
66
|
-
*/
|
|
67
|
-
export declare function checkPiralEvent(options: CheckPiralEventFactoryOptions): ListenCallback;
|
package/esm/helpers.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Creates a listener which periodicially checks the API.
|
|
3
|
-
* @param options The options to create the listener.
|
|
4
|
-
*/
|
|
5
|
-
export function checkPeriodically(options = {}) {
|
|
6
|
-
const { period = 5 * 60 * 1000 } = options;
|
|
7
|
-
return (notify, context) => {
|
|
8
|
-
setInterval(() => {
|
|
9
|
-
context.options.fetchPilets().then(notify);
|
|
10
|
-
}, period);
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Creates a listener connecting to a WebSocket.
|
|
15
|
-
* @param options The options to create the listener.
|
|
16
|
-
*/
|
|
17
|
-
export function checkWebSocket(options) {
|
|
18
|
-
const { url, available } = options;
|
|
19
|
-
return (notify, context) => {
|
|
20
|
-
const ws = new WebSocket(url);
|
|
21
|
-
ws.onmessage = (e) => {
|
|
22
|
-
if (available(e.data, e)) {
|
|
23
|
-
context.options.fetchPilets().then(notify);
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Creates a listener connecting to an EventSource.
|
|
30
|
-
* @param options The options to create the listener.
|
|
31
|
-
*/
|
|
32
|
-
export function checkServerSentEvents(options) {
|
|
33
|
-
const { url, name, available = () => true } = options;
|
|
34
|
-
return (notify, context) => {
|
|
35
|
-
const sse = new EventSource(url);
|
|
36
|
-
sse.addEventListener(name, (e) => {
|
|
37
|
-
if (available(e)) {
|
|
38
|
-
context.options.fetchPilets().then(notify);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Creates a listener relying on a Piral event.
|
|
45
|
-
* @param options The options to create the listener.
|
|
46
|
-
*/
|
|
47
|
-
export function checkPiralEvent(options) {
|
|
48
|
-
const { name, available = () => true } = options;
|
|
49
|
-
return (notify, context) => {
|
|
50
|
-
context.on(name, (e) => {
|
|
51
|
-
if (available(e)) {
|
|
52
|
-
context.options.fetchPilets().then(notify);
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=helpers.js.map
|
package/esm/helpers.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAA2C,EAAE;IAC7E,MAAM,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAE3C,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACzB,WAAW,CAAC,GAAG,EAAE;YACf,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC,EAAE,MAAM,CAAC,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AAeD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAqC;IAClE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAEnC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACzB,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;QAC9B,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE;YACnB,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;gBACxB,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC5C;QACH,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAkBD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAA4C;IAChF,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC;IAEtD,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;YAC/B,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;gBAChB,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC5C;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAcD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAsC;IACpE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC;IAEjD,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACzB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;YACrB,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;gBAChB,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC5C;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
package/esm/index.d.ts
DELETED
package/esm/index.js
DELETED
package/esm/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC"}
|
package/esm/types.d.ts
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import type { ComponentType, ReactNode } from 'react';
|
|
2
|
-
import type { Dict, GlobalStateContext, PiletEntries } from 'piral-core';
|
|
3
|
-
declare module 'piral-core/lib/types/custom' {
|
|
4
|
-
interface PiletCustomApi extends PiletUpdateApi {
|
|
5
|
-
}
|
|
6
|
-
interface PiralCustomRegistryState {
|
|
7
|
-
/**
|
|
8
|
-
* The registered update abilities from the different pilets.
|
|
9
|
-
*/
|
|
10
|
-
updatability: Dict<UpdateModeRegistration>;
|
|
11
|
-
}
|
|
12
|
-
interface PiralCustomState {
|
|
13
|
-
updatability: UpdatabilityState;
|
|
14
|
-
}
|
|
15
|
-
interface PiralCustomActions {
|
|
16
|
-
rejectUpdate(): void;
|
|
17
|
-
approveUpdate(): void;
|
|
18
|
-
checkForUpdates(pilets: PiletEntries): void;
|
|
19
|
-
setUpdateMode(piletName: string, mode: PiletUpdateMode): void;
|
|
20
|
-
}
|
|
21
|
-
interface PiralCustomComponentsState {
|
|
22
|
-
/**
|
|
23
|
-
* The dialog to inform the user about updates for pilets.
|
|
24
|
-
*/
|
|
25
|
-
UpdateDialog: ComponentType<UpdateDialogProps>;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
export interface UpdateModeRegistration {
|
|
29
|
-
mode: PiletUpdateMode;
|
|
30
|
-
}
|
|
31
|
-
export interface UpdatabilityState {
|
|
32
|
-
active: boolean;
|
|
33
|
-
lastHash: string;
|
|
34
|
-
target: PiletEntries;
|
|
35
|
-
}
|
|
36
|
-
export interface ListenCallback {
|
|
37
|
-
(notify: (pilets: PiletEntries) => void, context: GlobalStateContext): void;
|
|
38
|
-
}
|
|
39
|
-
export interface UpdateDialogProps {
|
|
40
|
-
piletsToUpdate: PiletEntries;
|
|
41
|
-
onApprove(): void;
|
|
42
|
-
onReject(): void;
|
|
43
|
-
children?: ReactNode;
|
|
44
|
-
}
|
|
45
|
-
export type PiletUpdateMode = 'allow' | 'block' | 'ask';
|
|
46
|
-
export interface PiletUpdateApi {
|
|
47
|
-
/**
|
|
48
|
-
* Configures the update-ability of the current pilet.
|
|
49
|
-
* @param mode The current update mode of the pilet.
|
|
50
|
-
*/
|
|
51
|
-
canUpdate(mode: PiletUpdateMode): void;
|
|
52
|
-
}
|
package/esm/types.js
DELETED
package/esm/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|