@antelopejs/dms 0.2.0 → 0.2.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.2.1
4
+
5
+ [compare changes](https://github.com/AntelopeJS/dms/compare/v0.2.0...v0.2.1)
6
+
7
+ ### 🩹 Fixes
8
+
9
+ - **dev-reload:** Always notify the client after a reload ([#10](https://github.com/AntelopeJS/dms/pull/10))
10
+
11
+ ### ❤️ Contributors
12
+
13
+ - Antony Rizzitelli <rizzitelli.antony@pm.me>
14
+
3
15
  ## v0.2.0
4
16
 
5
17
  [compare changes](https://github.com/AntelopeJS/dms/compare/v0.1.0...v0.2.0)
@@ -29,8 +29,8 @@ const isProduction = () => process.env.NODE_ENV === PRODUCTION_ENV;
29
29
  function setSlugProvider(provider) {
30
30
  slugProvider = provider;
31
31
  }
32
- function formatSseMessage() {
33
- return `event: reload\ndata: {"type":"resync"}\n\n`;
32
+ function formatSseMessage(type) {
33
+ return `event: reload\ndata: {"type":"${type}"}\n\n`;
34
34
  }
35
35
  function writeToClient(stream, payload) {
36
36
  try {
@@ -42,11 +42,9 @@ function writeToClient(stream, payload) {
42
42
  }
43
43
  function runBroadcast() {
44
44
  broadcastTimer = null;
45
- if (slugProvider().length === 0)
46
- return;
47
45
  if (clients.size === 0)
48
46
  return;
49
- const payload = formatSseMessage();
47
+ const payload = formatSseMessage(slugProvider().length === 0 ? "error" : "resync");
50
48
  for (const stream of clients) {
51
49
  writeToClient(stream, payload);
52
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dev-reload.js","sourceRoot":"","sources":["../../../src/implementations/dms/dev-reload.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAiBA,0CAEC;AA8BD,8CAIC;AAGD,4DAIC;AA3DD,6DAAyE;AAEzE,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAC7C,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,iBAAiB,GAAG,UAAU,qBAAqB,mBAAmB,CAAC;AAC7E,MAAM,cAAc,GAAG,YAAY,CAAC;AAIpC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAe,CAAC;AACvC,IAAI,cAAc,GAA0B,IAAI,CAAC;AACjD,IAAI,YAAY,GAAiB,GAAG,EAAE,CAAC,EAAE,CAAC;AAE1C,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,cAAc,CAAC;AAEnE,SAAgB,eAAe,CAAC,QAAsB;IACpD,YAAY,GAAG,QAAQ,CAAC;AAC1B,CAAC;AAMD,SAAS,gBAAgB;IACvB,OAAO,4CAA4C,CAAC;AACtD,CAAC;AAED,SAAS,aAAa,CAAC,MAAmB,EAAE,OAAe;IACzD,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,YAAY;IACnB,cAAc,GAAG,IAAI,CAAC;IAGtB,IAAI,YAAY,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACxC,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAC/B,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB;IAC/B,IAAI,YAAY,EAAE;QAAE,OAAO;IAC3B,IAAI,cAAc;QAAE,YAAY,CAAC,cAAc,CAAC,CAAC;IACjD,cAAc,GAAG,UAAU,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;AACnE,CAAC;AAGD,SAAgB,wBAAwB;IACtC,IAAI,CAAC,cAAc;QAAE,OAAO;IAC5B,YAAY,CAAC,cAAc,CAAC,CAAC;IAC7B,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC;AAED,SAAS,cAAc,CAAC,MAAmB;IACzC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,aAAa,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY,CAAC,MAAmB;IACvC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,MAAa,mBAAoB,SAAQ,IAAA,0BAAU,EAAC,UAAU,CAAC;IAE7D,MAAM,CAAgC,GAAgB;QACpD,IAAI,YAAY,EAAE,EAAE,CAAC;YACnB,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;CACF;AAXD,kDAWC;AATC;IADC,IAAA,mBAAG,GAAE;IACE,WAAA,IAAA,2BAAW,EAAC,gBAAgB,CAAC,CAAA;;;;iDAQpC"}
1
+ {"version":3,"file":"dev-reload.js","sourceRoot":"","sources":["../../../src/implementations/dms/dev-reload.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAiBA,0CAEC;AAyCD,8CAIC;AAGD,4DAIC;AAtED,6DAAyE;AAEzE,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAC7C,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,iBAAiB,GAAG,UAAU,qBAAqB,mBAAmB,CAAC;AAC7E,MAAM,cAAc,GAAG,YAAY,CAAC;AAIpC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAe,CAAC;AACvC,IAAI,cAAc,GAA0B,IAAI,CAAC;AACjD,IAAI,YAAY,GAAiB,GAAG,EAAE,CAAC,EAAE,CAAC;AAE1C,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,cAAc,CAAC;AAEnE,SAAgB,eAAe,CAAC,QAAsB;IACpD,YAAY,GAAG,QAAQ,CAAC;AAC1B,CAAC;AAYD,SAAS,gBAAgB,CAAC,IAAwB;IAChD,OAAO,iCAAiC,IAAI,QAAQ,CAAC;AACvD,CAAC;AAED,SAAS,aAAa,CAAC,MAAmB,EAAE,OAAe;IACzD,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,YAAY;IACnB,cAAc,GAAG,IAAI,CAAC;IACtB,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAO/B,MAAM,OAAO,GAAG,gBAAgB,CAC9B,YAAY,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CACjD,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB;IAC/B,IAAI,YAAY,EAAE;QAAE,OAAO;IAC3B,IAAI,cAAc;QAAE,YAAY,CAAC,cAAc,CAAC,CAAC;IACjD,cAAc,GAAG,UAAU,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;AACnE,CAAC;AAGD,SAAgB,wBAAwB;IACtC,IAAI,CAAC,cAAc;QAAE,OAAO;IAC5B,YAAY,CAAC,cAAc,CAAC,CAAC;IAC7B,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC;AAED,SAAS,cAAc,CAAC,MAAmB;IACzC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,aAAa,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY,CAAC,MAAmB;IACvC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,MAAa,mBAAoB,SAAQ,IAAA,0BAAU,EAAC,UAAU,CAAC;IAE7D,MAAM,CAAgC,GAAgB;QACpD,IAAI,YAAY,EAAE,EAAE,CAAC;YACnB,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;CACF;AAXD,kDAWC;AATC;IADC,IAAA,mBAAG,GAAE;IACE,WAAA,IAAA,2BAAW,EAAC,gBAAgB,CAAC,CAAA;;;;iDAQpC"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const node_stream_1 = require("node:stream");
4
+ const chai_1 = require("chai");
5
+ const dev_reload_1 = require("../../../../implementations/dms/dev-reload");
6
+ const SETTLE_MS = 400;
7
+ function connect() {
8
+ const stream = new node_stream_1.PassThrough();
9
+ new dev_reload_1.DevReloadController().reload(stream);
10
+ return stream;
11
+ }
12
+ function read(stream) {
13
+ return String(stream.read() ?? "");
14
+ }
15
+ function settle() {
16
+ return new Promise((resolve) => setTimeout(resolve, SETTLE_MS));
17
+ }
18
+ describe("[unit] implementations/dms/dev-reload", () => {
19
+ let stream;
20
+ beforeEach(() => {
21
+ stream = connect();
22
+ read(stream);
23
+ });
24
+ afterEach(() => {
25
+ (0, dev_reload_1.cancelScheduledBroadcast)();
26
+ (0, dev_reload_1.setSlugProvider)(() => []);
27
+ stream.end();
28
+ });
29
+ it("tells clients to resync when the registry holds pages", async () => {
30
+ (0, dev_reload_1.setSlugProvider)(() => ["/form/form-simple"]);
31
+ (0, dev_reload_1.scheduleBroadcast)();
32
+ await settle();
33
+ (0, chai_1.expect)(read(stream)).to.equal('event: reload\ndata: {"type":"resync"}\n\n');
34
+ });
35
+ it("still notifies when a reload left the registry empty", async () => {
36
+ (0, dev_reload_1.setSlugProvider)(() => []);
37
+ (0, dev_reload_1.scheduleBroadcast)();
38
+ await settle();
39
+ (0, chai_1.expect)(read(stream)).to.equal('event: reload\ndata: {"type":"error"}\n\n');
40
+ });
41
+ it("recovers on the next reload that fills the registry", async () => {
42
+ (0, dev_reload_1.setSlugProvider)(() => []);
43
+ (0, dev_reload_1.scheduleBroadcast)();
44
+ await settle();
45
+ (0, chai_1.expect)(read(stream)).to.equal('event: reload\ndata: {"type":"error"}\n\n');
46
+ (0, dev_reload_1.setSlugProvider)(() => ["/form/form-simple"]);
47
+ (0, dev_reload_1.scheduleBroadcast)();
48
+ await settle();
49
+ (0, chai_1.expect)(read(stream)).to.equal('event: reload\ndata: {"type":"resync"}\n\n');
50
+ });
51
+ it("drops a broadcast cancelled before it fires", async () => {
52
+ (0, dev_reload_1.setSlugProvider)(() => ["/form/form-simple"]);
53
+ (0, dev_reload_1.scheduleBroadcast)();
54
+ (0, dev_reload_1.cancelScheduledBroadcast)();
55
+ await settle();
56
+ (0, chai_1.expect)(read(stream)).to.equal("");
57
+ });
58
+ });
59
+ //# sourceMappingURL=dev-reload.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-reload.test.js","sourceRoot":"","sources":["../../../../../src/test/unit/implementations/dms/dev-reload.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antelopejs/dms",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/AntelopeJS/dms.git"
@@ -33,7 +33,7 @@
33
33
  "@antelopejs/core": "^1.4.11",
34
34
  "@antelopejs/interface-api": ">=0.0.13 <1.0.0",
35
35
  "@antelopejs/interface-api-util": ">=0.1.2 <1.0.0",
36
- "@antelopejs/interface-core": "^0.0.12",
36
+ "@antelopejs/interface-core": ">=0.0.13 <1.0.0",
37
37
  "@antelopejs/interface-data-api": ">=0.1.9 <1.0.0",
38
38
  "@antelopejs/interface-database": ">=0.1.7 <1.0.0",
39
39
  "@antelopejs/interface-database-decorators": ">=0.1.6 <1.0.0",
@@ -53,7 +53,7 @@
53
53
  "zod": "~3.24.2"
54
54
  },
55
55
  "devDependencies": {
56
- "@antelopejs/tooling-configs": "^0.0.4",
56
+ "@antelopejs/tooling-configs": ">=0.0.6 <1.0.0",
57
57
  "@types/archiver": "^6.0.4",
58
58
  "@types/chai": "^4.3.20",
59
59
  "@types/jsonwebtoken": "^9.0.10",