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.
@@ -1,13 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UpdateDialog = void 0;
4
- const React = require("react");
5
- const piral_core_1 = require("piral-core");
6
- const components_1 = require("./components");
7
- const UpdateDialog = () => {
8
- const actions = (0, piral_core_1.useActions)();
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
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateDialog.js","sourceRoot":"","sources":["../src/UpdateDialog.tsx"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,2CAAwD;AACxD,6CAAiD;AAE1C,MAAM,YAAY,GAAa,GAAG,EAAE;IACzC,MAAM,OAAO,GAAG,IAAA,uBAAU,GAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,2BAAc,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAEjE,OAAO,CACL,0CACG,MAAM,IAAI,CACT,oBAAC,8BAAiB,IAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,YAAY,GAAI,CAChH,CACA,CACJ,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,YAAY,gBAWvB"}
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
- "use strict";
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 rejectUpdate(ctx) {
14
+ function reset(ctx) {
18
15
  ctx.dispatch((state) => ({
19
16
  ...state,
20
17
  updatability: {
21
18
  ...state.updatability,
22
- target: [],
19
+ added: [],
20
+ updated: [],
21
+ removed: [],
23
22
  active: false,
24
23
  },
25
24
  }));
26
25
  }
27
- exports.rejectUpdate = rejectUpdate;
28
- function approveUpdate(ctx) {
29
- const pilets = ctx.readState((s) => s.updatability.target);
30
- for (const pilet of pilets) {
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
- ctx.rejectUpdate();
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
- exports.approveUpdate = approveUpdate;
36
- function checkForUpdates(ctx, pilets) {
37
- const checkHash = computePiletHash(pilets);
38
- const lastHash = ctx.readState((s) => s.updatability.lastHash || computePiletHash(s.modules));
39
- if (checkHash !== lastHash) {
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 piletNames = Object.keys(currentModes);
42
- const blocked = piletNames.filter((m) => currentModes[m].mode === 'block');
43
- const ask = piletNames.filter((m) => currentModes[m].mode === 'ask');
44
- const target = pilets.filter((pilet) => !blocked.includes(pilet.name));
45
- const active = ask.length > 0;
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 (!active) {
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: checkHash,
57
- target,
74
+ active: anyPendingDecision,
75
+ lastHash: currentHash,
76
+ added,
77
+ removed,
78
+ updated,
58
79
  },
59
80
  };
60
81
  });
61
82
  }
62
83
  }
63
- exports.checkForUpdates = checkForUpdates;
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: (0, piral_core_1.withKey)(state.registry.updatability, piletName, { mode }),
89
+ updatability: withKey(state.registry.updatability, piletName, { mode }),
70
90
  },
71
91
  }));
72
92
  }
73
- exports.setUpdateMode = setUpdateMode;
74
93
  //# sourceMappingURL=actions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
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
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
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
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":";;;AAAA,2CAA+C;AAElC,QAAA,iBAAiB,GAAG,IAAA,8BAAiB,EAAC,cAAc,CAAC,CAAC"}
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
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createUpdateApi = void 0;
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 = (0, helpers_1.checkPeriodically)() } = config;
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: default_1.DefaultUpdateDialog,
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
- target: [],
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":";;;AAAA,qCAAqC;AAErC,uCAAgD;AAChD,uCAA8C;AAW9C;;GAEG;AACH,SAAgB,eAAe,CAAC,SAAuB,EAAE;IACvD,MAAM,EAAE,MAAM,GAAG,IAAA,2BAAiB,GAAE,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,6BAAmB;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;AAnCD,0CAmCC"}
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
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
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
@@ -1 +1 @@
1
- {"version":3,"file":"default.js","sourceRoot":"","sources":["../src/default.tsx"],"names":[],"mappings":";;;AACA,2CAA2C;AAGpC,MAAM,mBAAmB,GAA0B,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAAtF,QAAA,mBAAmB,uBAAmE"}
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
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":";;;AAWA;;;GAGG;AACH,SAAgB,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;AARD,8CAQC;AAeD;;;GAGG;AACH,SAAgB,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;AAXD,wCAWC;AAkBD;;;GAGG;AACH,SAAgB,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;AAXD,sDAWC;AAcD;;;GAGG;AACH,SAAgB,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;AAVD,0CAUC"}
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
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./components"), exports);
5
- tslib_1.__exportStar(require("./create"), exports);
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":";;;AAAA,uDAA6B;AAC7B,mDAAyB;AACzB,oDAA0B;AAC1B,kDAAwB;AACxB,yDAA+B"}
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
- target: PiletEntries;
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
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=types.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "piral-update",
3
- "version": "1.6.0-beta.7240",
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": "esm/index.js",
21
+ "module": "lib/index.js",
22
22
  "main": "lib/index.js",
23
23
  "typings": "lib/index.d.ts",
24
24
  "exports": {
25
- ".": {
26
- "import": "./esm/index.js",
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:commonjs && yarn build:esnext",
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:commonjs": "tsc --project tsconfig.json --outDir lib --module commonjs",
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.7240",
52
+ "piral-core": "1.6.0-beta.7243",
67
53
  "react": "^18.0.0"
68
54
  },
69
- "gitHead": "2fd8ff47d9a7e0666e4e6bc1dc5a7ef45e8e9f39"
55
+ "gitHead": "bbb6e4f78c61b6ef753099a5b378ad2708565ce3"
70
56
  }
@@ -1 +1 @@
1
- var piralUpdate=(()=>{var E=Object.create;var d=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,L=Object.prototype.hasOwnProperty;var y=t=>d(t,"__esModule",{value:!0});var p=(t=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(t,{get:(e,a)=>(typeof require!="undefined"?require:e)[a]}):t)(function(t){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var P=(t,e)=>{y(t);for(var a in e)d(t,a,{get:e[a],enumerable:!0})},M=(t,e,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of D(e))!L.call(t,o)&&o!=="default"&&d(t,o,{get:()=>e[o],enumerable:!(a=F(e,o))||a.enumerable});return t},s=t=>M(y(d(t!=null?E(O(t)):{},"default",t&&t.__esModule&&"default"in t?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t);var K={};P(K,{PiralUpdateDialog:()=>u,UpdateDialog:()=>J,checkPeriodically:()=>h,checkPiralEvent:()=>T,checkServerSentEvents:()=>N,checkWebSocket:()=>W,createUpdateApi:()=>I});var k=s(p("piral-core")),u=(0,k.getPiralComponent)("UpdateDialog");var b={};P(b,{approveUpdate:()=>G,checkForUpdates:()=>j,rejectUpdate:()=>A,setUpdateMode:()=>R});var v=s(p("piral-core"));function H(t){return{name:t.name,version:t.version}}function w(t,e){return t.name.localeCompare(e.name)}function U(t){return JSON.stringify(t.map(H).sort(w))}function A(t){t.dispatch(e=>({...e,updatability:{...e.updatability,target:[],active:!1}}))}function G(t){let e=t.readState(a=>a.updatability.target);for(let a of e)t.addPilet(a);t.rejectUpdate()}function j(t,e){let a=U(e),o=t.readState(r=>r.updatability.lastHash||U(r.modules));if(a!==o){let r=t.readState(n=>n.registry.updatability),i=Object.keys(r),l=i.filter(n=>r[n].mode==="block"),m=i.filter(n=>r[n].mode==="ask"),x=e.filter(n=>!l.includes(n.name)),g=m.length>0;t.dispatch(n=>(g||setTimeout(t.approveUpdate,0),{...n,updatability:{active:g,lastHash:a,target:x}}))}}function R(t,e,a){t.dispatch(o=>({...o,registry:{...o.registry,updatability:(0,v.withKey)(o.registry.updatability,e,{mode:a})}}))}var C=s(p("piral-core")),S=t=>(0,C.defaultRender)(t.children);function h(t={}){let{period:e=5*60*1e3}=t;return(a,o)=>{setInterval(()=>{o.options.fetchPilets().then(a)},e)}}function W(t){let{url:e,available:a}=t;return(o,r)=>{let i=new WebSocket(e);i.onmessage=l=>{a(l.data,l)&&r.options.fetchPilets().then(o)}}}function N(t){let{url:e,name:a,available:o=()=>!0}=t;return(r,i)=>{new EventSource(e).addEventListener(a,m=>{o(m)&&i.options.fetchPilets().then(r)})}}function T(t){let{name:e,available:a=()=>!0}=t;return(o,r)=>{r.on(e,i=>{a(i)&&r.options.fetchPilets().then(o)})}}function I(t={}){let{listen:e=h()}=t;return a=>(a.defineActions(b),a.dispatch(o=>({...o,components:{UpdateDialog:S,...o.components},registry:{...o.registry,updatability:{}},updatability:{active:!1,lastHash:void 0,target:[]}})),e(a.checkForUpdates,a),(o,r)=>{let i=r.name;return{canUpdate(l){a.setUpdateMode(i,l)}}})}var c=s(p("react")),f=s(p("piral-core"));var J=()=>{let t=(0,f.useActions)(),{active:e,target:a}=(0,f.useGlobalState)(o=>o.updatability);return c.createElement(c.Fragment,null,e&&c.createElement(u,{piletsToUpdate:a,onApprove:t.approveUpdate,onReject:t.rejectUpdate}))};return K;})();
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;})();
@@ -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, target } = useGlobalState((m) => m.updatability);
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 piletsToUpdate={target} onApprove={actions.approveUpdate} onReject={actions.rejectUpdate} />
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
- function getPiletHash(pilet: PiletMetadata) {
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: { name: string }, b: { name: string }) {
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
- export function rejectUpdate(ctx: GlobalStateContext) {
24
+ function reset(ctx: GlobalStateContext) {
20
25
  ctx.dispatch((state) => ({
21
26
  ...state,
22
27
  updatability: {
23
28
  ...state.updatability,
24
- target: [],
29
+ added: [],
30
+ updated: [],
31
+ removed: [],
25
32
  active: false,
26
33
  },
27
34
  }));
28
35
  }
29
36
 
30
- export function approveUpdate(ctx: GlobalStateContext) {
31
- const pilets = ctx.readState((s) => s.updatability.target);
37
+ async function apply(ctx: GlobalStateContext) {
38
+ const { added, removed, updated } = ctx.readState((s) => s.updatability);
32
39
 
33
- for (const pilet of pilets) {
34
- ctx.addPilet(pilet);
40
+ for (const pilet of removed) {
41
+ await ctx.removePilet(pilet.name);
35
42
  }
36
43
 
37
- ctx.rejectUpdate();
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 checkHash = computePiletHash(pilets);
42
- const lastHash = ctx.readState((s) => s.updatability.lastHash || computePiletHash(s.modules));
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 (checkHash !== lastHash) {
68
+ if (currentHash !== previousHash) {
45
69
  const currentModes = ctx.readState((s) => s.registry.updatability);
46
- const piletNames = Object.keys(currentModes);
47
- const blocked = piletNames.filter((m) => currentModes[m].mode === 'block');
48
- const ask = piletNames.filter((m) => currentModes[m].mode === 'ask');
49
- const target = pilets.filter((pilet) => !blocked.includes(pilet.name));
50
- const active = ask.length > 0;
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 (!active) {
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: checkHash,
64
- target,
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
- target: [],
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
- target: PiletEntries;
43
+ added: PiletEntries;
44
+ removed: PiletEntries;
45
+ updated: PiletEntries;
44
46
  }
45
47
 
46
48
  export interface ListenCallback {
@@ -1,2 +0,0 @@
1
- import * as React from 'react';
2
- export declare const UpdateDialog: React.FC;
@@ -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
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- /// <reference types="react" />
2
- export declare const PiralUpdateDialog: import("react").ComponentType<import("./types").UpdateDialogProps>;
package/esm/components.js DELETED
@@ -1,3 +0,0 @@
1
- import { getPiralComponent } from 'piral-core';
2
- export const PiralUpdateDialog = getPiralComponent('UpdateDialog');
3
- //# sourceMappingURL=components.js.map
@@ -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
@@ -1,3 +0,0 @@
1
- import { FC } from 'react';
2
- import { UpdateDialogProps } from './types';
3
- export declare const DefaultUpdateDialog: FC<UpdateDialogProps>;
package/esm/default.js DELETED
@@ -1,3 +0,0 @@
1
- import { defaultRender } from 'piral-core';
2
- export const DefaultUpdateDialog = (props) => defaultRender(props.children);
3
- //# sourceMappingURL=default.js.map
@@ -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
@@ -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
@@ -1,5 +0,0 @@
1
- export * from './components';
2
- export * from './create';
3
- export * from './helpers';
4
- export * from './types';
5
- export * from './UpdateDialog';
package/esm/index.js DELETED
@@ -1,6 +0,0 @@
1
- export * from './components';
2
- export * from './create';
3
- export * from './helpers';
4
- export * from './types';
5
- export * from './UpdateDialog';
6
- //# sourceMappingURL=index.js.map
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
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
package/esm/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}