@prismicio/simulator 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +98 -0
  3. package/dist/SimulatorAPI.cjs +50 -0
  4. package/dist/SimulatorAPI.cjs.map +1 -0
  5. package/dist/SimulatorAPI.d.ts +12 -0
  6. package/dist/SimulatorAPI.js +50 -0
  7. package/dist/SimulatorAPI.js.map +1 -0
  8. package/dist/SimulatorClient.cjs +54 -0
  9. package/dist/SimulatorClient.cjs.map +1 -0
  10. package/dist/SimulatorClient.d.ts +10 -0
  11. package/dist/SimulatorClient.js +54 -0
  12. package/dist/SimulatorClient.js.map +1 -0
  13. package/dist/channel/ChannelEmitter.cjs +146 -0
  14. package/dist/channel/ChannelEmitter.cjs.map +1 -0
  15. package/dist/channel/ChannelEmitter.d.ts +38 -0
  16. package/dist/channel/ChannelEmitter.js +146 -0
  17. package/dist/channel/ChannelEmitter.js.map +1 -0
  18. package/dist/channel/ChannelNetwork.cjs +112 -0
  19. package/dist/channel/ChannelNetwork.cjs.map +1 -0
  20. package/dist/channel/ChannelNetwork.d.ts +24 -0
  21. package/dist/channel/ChannelNetwork.js +112 -0
  22. package/dist/channel/ChannelNetwork.js.map +1 -0
  23. package/dist/channel/ChannelReceiver.cjs +95 -0
  24. package/dist/channel/ChannelReceiver.cjs.map +1 -0
  25. package/dist/channel/ChannelReceiver.d.ts +20 -0
  26. package/dist/channel/ChannelReceiver.js +95 -0
  27. package/dist/channel/ChannelReceiver.js.map +1 -0
  28. package/dist/channel/errors.cjs +54 -0
  29. package/dist/channel/errors.cjs.map +1 -0
  30. package/dist/channel/errors.d.ts +25 -0
  31. package/dist/channel/errors.js +54 -0
  32. package/dist/channel/errors.js.map +1 -0
  33. package/dist/channel/index.d.ts +10 -0
  34. package/dist/channel/messages.cjs +66 -0
  35. package/dist/channel/messages.cjs.map +1 -0
  36. package/dist/channel/messages.d.ts +10 -0
  37. package/dist/channel/messages.js +66 -0
  38. package/dist/channel/messages.js.map +1 -0
  39. package/dist/channel/types.cjs +11 -0
  40. package/dist/channel/types.cjs.map +1 -0
  41. package/dist/channel/types.d.ts +61 -0
  42. package/dist/channel/types.js +13 -0
  43. package/dist/channel/types.js.map +1 -0
  44. package/dist/index.cjs +33 -0
  45. package/dist/index.cjs.map +1 -0
  46. package/dist/index.d.ts +7 -0
  47. package/dist/index.js +27 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/kit/SimulatorManager.cjs +140 -0
  50. package/dist/kit/SimulatorManager.cjs.map +1 -0
  51. package/dist/kit/SimulatorManager.d.ts +15 -0
  52. package/dist/kit/SimulatorManager.js +140 -0
  53. package/dist/kit/SimulatorManager.js.map +1 -0
  54. package/dist/kit/State.cjs +82 -0
  55. package/dist/kit/State.cjs.map +1 -0
  56. package/dist/kit/State.d.ts +25 -0
  57. package/dist/kit/State.js +82 -0
  58. package/dist/kit/State.js.map +1 -0
  59. package/dist/kit/domHelpers.cjs +53 -0
  60. package/dist/kit/domHelpers.cjs.map +1 -0
  61. package/dist/kit/domHelpers.d.ts +9 -0
  62. package/dist/kit/domHelpers.js +53 -0
  63. package/dist/kit/domHelpers.js.map +1 -0
  64. package/dist/kit/eventHandlers.cjs +15 -0
  65. package/dist/kit/eventHandlers.cjs.map +1 -0
  66. package/dist/kit/eventHandlers.d.ts +4 -0
  67. package/dist/kit/eventHandlers.js +15 -0
  68. package/dist/kit/eventHandlers.js.map +1 -0
  69. package/dist/kit/getDefault.cjs +16 -0
  70. package/dist/kit/getDefault.cjs.map +1 -0
  71. package/dist/kit/getDefault.d.ts +8 -0
  72. package/dist/kit/getDefault.js +16 -0
  73. package/dist/kit/getDefault.js.map +1 -0
  74. package/dist/kit/index.cjs +26 -0
  75. package/dist/kit/index.cjs.map +1 -0
  76. package/dist/kit/index.d.ts +8 -0
  77. package/dist/kit/index.js +23 -0
  78. package/dist/kit/index.js.map +1 -0
  79. package/dist/kit/messages.cjs +29 -0
  80. package/dist/kit/messages.cjs.map +1 -0
  81. package/dist/kit/messages.d.ts +1 -0
  82. package/dist/kit/messages.js +29 -0
  83. package/dist/kit/messages.js.map +1 -0
  84. package/dist/kit/types.cjs +9 -0
  85. package/dist/kit/types.cjs.map +1 -0
  86. package/dist/kit/types.d.ts +23 -0
  87. package/dist/kit/types.js +10 -0
  88. package/dist/kit/types.js.map +1 -0
  89. package/dist/lib/EventEmitter.cjs +27 -0
  90. package/dist/lib/EventEmitter.cjs.map +1 -0
  91. package/dist/lib/EventEmitter.d.ts +10 -0
  92. package/dist/lib/EventEmitter.js +27 -0
  93. package/dist/lib/EventEmitter.js.map +1 -0
  94. package/dist/lib/__PRODUCTION__.d.ts +7 -0
  95. package/dist/lib/throttle.cjs +24 -0
  96. package/dist/lib/throttle.cjs.map +1 -0
  97. package/dist/lib/throttle.d.ts +1 -0
  98. package/dist/lib/throttle.js +24 -0
  99. package/dist/lib/throttle.js.map +1 -0
  100. package/dist/types.cjs +14 -0
  101. package/dist/types.cjs.map +1 -0
  102. package/dist/types.d.ts +34 -0
  103. package/dist/types.js +16 -0
  104. package/dist/types.js.map +1 -0
  105. package/package.json +99 -0
  106. package/src/SimulatorAPI.ts +90 -0
  107. package/src/SimulatorClient.ts +96 -0
  108. package/src/channel/ChannelEmitter.ts +278 -0
  109. package/src/channel/ChannelNetwork.ts +216 -0
  110. package/src/channel/ChannelReceiver.ts +184 -0
  111. package/src/channel/errors.ts +53 -0
  112. package/src/channel/index.ts +75 -0
  113. package/src/channel/messages.ts +115 -0
  114. package/src/channel/types.ts +138 -0
  115. package/src/index.ts +42 -0
  116. package/src/kit/SimulatorManager.ts +199 -0
  117. package/src/kit/State.ts +113 -0
  118. package/src/kit/domHelpers.ts +75 -0
  119. package/src/kit/eventHandlers.ts +16 -0
  120. package/src/kit/getDefault.ts +18 -0
  121. package/src/kit/index.ts +33 -0
  122. package/src/kit/messages.ts +25 -0
  123. package/src/kit/types.ts +30 -0
  124. package/src/lib/EventEmitter.ts +41 -0
  125. package/src/lib/__PRODUCTION__.ts +12 -0
  126. package/src/lib/throttle.ts +26 -0
  127. package/src/types.ts +57 -0
@@ -0,0 +1,7 @@
1
+ /**
2
+ * `true` if in the production environment, `false` otherwise.
3
+ *
4
+ * This boolean can be used to perform actions only in development environments,
5
+ * such as logging.
6
+ */
7
+ export declare const __PRODUCTION__: boolean;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const throttle = (fn, delay = 16) => {
4
+ let lastExec = 0;
5
+ let timer = null;
6
+ return function(...args) {
7
+ const now = Date.now();
8
+ const delta = now - lastExec;
9
+ if (delta >= delay) {
10
+ fn.apply(this, args);
11
+ lastExec = now;
12
+ } else {
13
+ if (timer) {
14
+ clearTimeout(timer);
15
+ }
16
+ timer = setTimeout(() => {
17
+ fn.apply(this, args);
18
+ lastExec = Date.now();
19
+ }, delay - delta);
20
+ }
21
+ };
22
+ };
23
+ exports.throttle = throttle;
24
+ //# sourceMappingURL=throttle.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.cjs","sources":["../../../src/lib/throttle.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const throttle = <TFn extends (...args: any[]) => any>(\n\tfn: TFn,\n\tdelay = 16,\n): ((...args: Parameters<TFn>) => void) => {\n\tlet lastExec = 0;\n\tlet timer: NodeJS.Timeout | null = null;\n\n\treturn function (this: unknown, ...args: Parameters<TFn>) {\n\t\tconst now = Date.now();\n\t\tconst delta = now - lastExec;\n\n\t\tif (delta >= delay) {\n\t\t\tfn.apply(this, args);\n\t\t\tlastExec = now;\n\t\t} else {\n\t\t\tif (timer) {\n\t\t\t\tclearTimeout(timer);\n\t\t\t}\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tfn.apply(this, args);\n\t\t\t\tlastExec = Date.now();\n\t\t\t}, delay - delta);\n\t\t}\n\t};\n};\n"],"names":[],"mappings":";;AACO,MAAM,WAAW,CACvB,IACA,QAAQ,OACiC;AACzC,MAAI,WAAW;AACf,MAAI,QAA+B;AAEnC,SAAO,YAA4B,MAAqB;AACjD,UAAA,MAAM,KAAK;AACjB,UAAM,QAAQ,MAAM;AAEpB,QAAI,SAAS,OAAO;AAChB,SAAA,MAAM,MAAM,IAAI;AACR,iBAAA;AAAA,IAAA,OACL;AACN,UAAI,OAAO;AACV,qBAAa,KAAK;AAAA,MAClB;AACD,cAAQ,WAAW,MAAK;AACpB,WAAA,MAAM,MAAM,IAAI;AACnB,mBAAW,KAAK;SACd,QAAQ,KAAK;AAAA,IAChB;AAAA,EAAA;AAEH;;"}
@@ -0,0 +1 @@
1
+ export declare const throttle: <TFn extends (...args: any[]) => any>(fn: TFn, delay?: number) => (...args: Parameters<TFn>) => void;
@@ -0,0 +1,24 @@
1
+ const throttle = (fn, delay = 16) => {
2
+ let lastExec = 0;
3
+ let timer = null;
4
+ return function(...args) {
5
+ const now = Date.now();
6
+ const delta = now - lastExec;
7
+ if (delta >= delay) {
8
+ fn.apply(this, args);
9
+ lastExec = now;
10
+ } else {
11
+ if (timer) {
12
+ clearTimeout(timer);
13
+ }
14
+ timer = setTimeout(() => {
15
+ fn.apply(this, args);
16
+ lastExec = Date.now();
17
+ }, delay - delta);
18
+ }
19
+ };
20
+ };
21
+ export {
22
+ throttle
23
+ };
24
+ //# sourceMappingURL=throttle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.js","sources":["../../../src/lib/throttle.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const throttle = <TFn extends (...args: any[]) => any>(\n\tfn: TFn,\n\tdelay = 16,\n): ((...args: Parameters<TFn>) => void) => {\n\tlet lastExec = 0;\n\tlet timer: NodeJS.Timeout | null = null;\n\n\treturn function (this: unknown, ...args: Parameters<TFn>) {\n\t\tconst now = Date.now();\n\t\tconst delta = now - lastExec;\n\n\t\tif (delta >= delay) {\n\t\t\tfn.apply(this, args);\n\t\t\tlastExec = now;\n\t\t} else {\n\t\t\tif (timer) {\n\t\t\t\tclearTimeout(timer);\n\t\t\t}\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tfn.apply(this, args);\n\t\t\t\tlastExec = Date.now();\n\t\t\t}, delay - delta);\n\t\t}\n\t};\n};\n"],"names":[],"mappings":"AACO,MAAM,WAAW,CACvB,IACA,QAAQ,OACiC;AACzC,MAAI,WAAW;AACf,MAAI,QAA+B;AAEnC,SAAO,YAA4B,MAAqB;AACjD,UAAA,MAAM,KAAK;AACjB,UAAM,QAAQ,MAAM;AAEpB,QAAI,SAAS,OAAO;AAChB,SAAA,MAAM,MAAM,IAAI;AACR,iBAAA;AAAA,IAAA,OACL;AACN,UAAI,OAAO;AACV,qBAAa,KAAK;AAAA,MAClB;AACD,cAAQ,WAAW,MAAK;AACpB,WAAA,MAAM,MAAM,IAAI;AACnB,mBAAW,KAAK;SACd,QAAQ,KAAK;AAAA,IAChB;AAAA,EAAA;AAEH;"}
package/dist/types.cjs ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ exports.APIRequestType = void 0;
4
+ (function(APIRequestType2) {
5
+ APIRequestType2["SetActiveSlice"] = "setActiveSlice";
6
+ APIRequestType2["SetSliceZoneSize"] = "setSliceZoneSize";
7
+ })(exports.APIRequestType || (exports.APIRequestType = {}));
8
+ exports.ClientRequestType = void 0;
9
+ (function(ClientRequestType2) {
10
+ ClientRequestType2["Ping"] = "ping";
11
+ ClientRequestType2["SetSliceZone"] = "setSliceZone";
12
+ ClientRequestType2["ScrollToSlice"] = "scrollToSlice";
13
+ })(exports.ClientRequestType || (exports.ClientRequestType = {}));
14
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.cjs","sources":["../../src/types.ts"],"sourcesContent":["import { SliceZone } from \"@prismicio/types\";\n\nimport { RequestMessage, ResponseMessage, Transaction } from \"./channel\";\n\nexport type ActiveSlice = {\n\trect: DOMRect;\n\tsliceID: string;\n\tvariationID: string;\n\tindex: number;\n};\n\nexport type SliceZoneSize = {\n\trect: DOMRect;\n};\n\nexport enum APIRequestType {\n\tSetActiveSlice = \"setActiveSlice\",\n\tSetSliceZoneSize = \"setSliceZoneSize\",\n}\n\nexport type APITransactions = {\n\t[APIRequestType.SetActiveSlice]: Transaction<\n\t\tRequestMessage<APIRequestType.SetActiveSlice, ActiveSlice | null>\n\t>;\n\t[APIRequestType.SetSliceZoneSize]: Transaction<\n\t\tRequestMessage<APIRequestType.SetSliceZoneSize, SliceZoneSize | null>\n\t>;\n};\n\nexport enum ClientRequestType {\n\tPing = \"ping\",\n\tSetSliceZone = \"setSliceZone\",\n\tScrollToSlice = \"scrollToSlice\",\n}\n\nexport type ClientTransactions = {\n\t[ClientRequestType.Ping]: Transaction<\n\t\tRequestMessage<ClientRequestType.Ping>,\n\t\tResponseMessage<\"pong\">\n\t>;\n\n\t[ClientRequestType.SetSliceZone]: Transaction<\n\t\tRequestMessage<ClientRequestType.SetSliceZone, SliceZone>\n\t>;\n\n\t[ClientRequestType.ScrollToSlice]: Transaction<\n\t\tRequestMessage<\n\t\t\tClientRequestType.ScrollToSlice,\n\t\t\t{\n\t\t\t\tsliceIndex: number;\n\t\t\t\tbehavior?: \"auto\" | \"smooth\";\n\t\t\t\tblock?: \"start\" | \"center\" | \"end\" | \"nearest\";\n\t\t\t\tinline?: \"start\" | \"center\" | \"end\" | \"nearest\";\n\t\t\t}\n\t\t>\n\t>;\n};\n"],"names":["APIRequestType","ClientRequestType"],"mappings":";;AAeYA,QAAA,iBAAA;AAAA,CAAZ,SAAYA,iBAAc;AACzBA,kBAAA,gBAAA,IAAA;AACAA,kBAAA,kBAAA,IAAA;AACD,GAHYA,2BAAAA,QAAAA,iBAGX,CAAA,EAAA;AAWWC,QAAA,oBAAA;AAAA,CAAZ,SAAYA,oBAAiB;AAC5BA,qBAAA,MAAA,IAAA;AACAA,qBAAA,cAAA,IAAA;AACAA,qBAAA,eAAA,IAAA;AACD,GAJYA,QAAA,sBAAAA,4BAIX,CAAA,EAAA;"}
@@ -0,0 +1,34 @@
1
+ import { SliceZone } from "@prismicio/types";
2
+ import { RequestMessage, ResponseMessage, Transaction } from "./channel";
3
+ export type ActiveSlice = {
4
+ rect: DOMRect;
5
+ sliceID: string;
6
+ variationID: string;
7
+ index: number;
8
+ };
9
+ export type SliceZoneSize = {
10
+ rect: DOMRect;
11
+ };
12
+ export declare enum APIRequestType {
13
+ SetActiveSlice = "setActiveSlice",
14
+ SetSliceZoneSize = "setSliceZoneSize"
15
+ }
16
+ export type APITransactions = {
17
+ [APIRequestType.SetActiveSlice]: Transaction<RequestMessage<APIRequestType.SetActiveSlice, ActiveSlice | null>>;
18
+ [APIRequestType.SetSliceZoneSize]: Transaction<RequestMessage<APIRequestType.SetSliceZoneSize, SliceZoneSize | null>>;
19
+ };
20
+ export declare enum ClientRequestType {
21
+ Ping = "ping",
22
+ SetSliceZone = "setSliceZone",
23
+ ScrollToSlice = "scrollToSlice"
24
+ }
25
+ export type ClientTransactions = {
26
+ [ClientRequestType.Ping]: Transaction<RequestMessage<ClientRequestType.Ping>, ResponseMessage<"pong">>;
27
+ [ClientRequestType.SetSliceZone]: Transaction<RequestMessage<ClientRequestType.SetSliceZone, SliceZone>>;
28
+ [ClientRequestType.ScrollToSlice]: Transaction<RequestMessage<ClientRequestType.ScrollToSlice, {
29
+ sliceIndex: number;
30
+ behavior?: "auto" | "smooth";
31
+ block?: "start" | "center" | "end" | "nearest";
32
+ inline?: "start" | "center" | "end" | "nearest";
33
+ }>>;
34
+ };
package/dist/types.js ADDED
@@ -0,0 +1,16 @@
1
+ var APIRequestType;
2
+ (function(APIRequestType2) {
3
+ APIRequestType2["SetActiveSlice"] = "setActiveSlice";
4
+ APIRequestType2["SetSliceZoneSize"] = "setSliceZoneSize";
5
+ })(APIRequestType || (APIRequestType = {}));
6
+ var ClientRequestType;
7
+ (function(ClientRequestType2) {
8
+ ClientRequestType2["Ping"] = "ping";
9
+ ClientRequestType2["SetSliceZone"] = "setSliceZone";
10
+ ClientRequestType2["ScrollToSlice"] = "scrollToSlice";
11
+ })(ClientRequestType || (ClientRequestType = {}));
12
+ export {
13
+ APIRequestType,
14
+ ClientRequestType
15
+ };
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../src/types.ts"],"sourcesContent":["import { SliceZone } from \"@prismicio/types\";\n\nimport { RequestMessage, ResponseMessage, Transaction } from \"./channel\";\n\nexport type ActiveSlice = {\n\trect: DOMRect;\n\tsliceID: string;\n\tvariationID: string;\n\tindex: number;\n};\n\nexport type SliceZoneSize = {\n\trect: DOMRect;\n};\n\nexport enum APIRequestType {\n\tSetActiveSlice = \"setActiveSlice\",\n\tSetSliceZoneSize = \"setSliceZoneSize\",\n}\n\nexport type APITransactions = {\n\t[APIRequestType.SetActiveSlice]: Transaction<\n\t\tRequestMessage<APIRequestType.SetActiveSlice, ActiveSlice | null>\n\t>;\n\t[APIRequestType.SetSliceZoneSize]: Transaction<\n\t\tRequestMessage<APIRequestType.SetSliceZoneSize, SliceZoneSize | null>\n\t>;\n};\n\nexport enum ClientRequestType {\n\tPing = \"ping\",\n\tSetSliceZone = \"setSliceZone\",\n\tScrollToSlice = \"scrollToSlice\",\n}\n\nexport type ClientTransactions = {\n\t[ClientRequestType.Ping]: Transaction<\n\t\tRequestMessage<ClientRequestType.Ping>,\n\t\tResponseMessage<\"pong\">\n\t>;\n\n\t[ClientRequestType.SetSliceZone]: Transaction<\n\t\tRequestMessage<ClientRequestType.SetSliceZone, SliceZone>\n\t>;\n\n\t[ClientRequestType.ScrollToSlice]: Transaction<\n\t\tRequestMessage<\n\t\t\tClientRequestType.ScrollToSlice,\n\t\t\t{\n\t\t\t\tsliceIndex: number;\n\t\t\t\tbehavior?: \"auto\" | \"smooth\";\n\t\t\t\tblock?: \"start\" | \"center\" | \"end\" | \"nearest\";\n\t\t\t\tinline?: \"start\" | \"center\" | \"end\" | \"nearest\";\n\t\t\t}\n\t\t>\n\t>;\n};\n"],"names":["APIRequestType","ClientRequestType"],"mappings":"AAeY,IAAA;AAAA,CAAZ,SAAYA,iBAAc;AACzBA,kBAAA,gBAAA,IAAA;AACAA,kBAAA,kBAAA,IAAA;AACD,GAHY,mBAAA,iBAGX,CAAA,EAAA;AAWW,IAAA;AAAA,CAAZ,SAAYC,oBAAiB;AAC5BA,qBAAA,MAAA,IAAA;AACAA,qBAAA,cAAA,IAAA;AACAA,qBAAA,eAAA,IAAA;AACD,GAJY,sBAAA,oBAIX,CAAA,EAAA;"}
package/package.json ADDED
@@ -0,0 +1,99 @@
1
+ {
2
+ "name": "@prismicio/simulator",
3
+ "version": "0.1.0",
4
+ "description": "Preview and develop Prismic slices fast with minimal configuration",
5
+ "keywords": [
6
+ "typescript",
7
+ "prismic"
8
+ ],
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "ssh://git@github.com/github_org_slash_github_repo.git"
12
+ },
13
+ "license": "Apache-2.0",
14
+ "author": "Prismic <contact@prismic.io> (https://prismic.io)",
15
+ "type": "module",
16
+ "exports": {
17
+ ".": {
18
+ "require": {
19
+ "types": "./dist/index.d.ts",
20
+ "default": "./dist/index.cjs"
21
+ },
22
+ "import": {
23
+ "types": "./dist/index.d.ts",
24
+ "default": "./dist/index.js"
25
+ }
26
+ },
27
+ "./kit": {
28
+ "require": {
29
+ "types": "./dist/kit/index.d.ts",
30
+ "default": "./dist/kit/index.cjs"
31
+ },
32
+ "import": {
33
+ "types": "./dist/kit/index.d.ts",
34
+ "default": "./dist/kit/index.js"
35
+ }
36
+ },
37
+ "./package.json": "./package.json"
38
+ },
39
+ "main": "./dist/index.cjs",
40
+ "module": "./dist/index.js",
41
+ "types": "./dist/index.d.ts",
42
+ "files": [
43
+ "./dist",
44
+ "./src"
45
+ ],
46
+ "scripts": {
47
+ "build": "vite build",
48
+ "dev": "nuxi dev playground",
49
+ "format": "prettier --write .",
50
+ "prepare": "npm run build && nuxi prepare playground",
51
+ "release": "npm run test && standard-version && git push --follow-tags && npm run build && npm publish",
52
+ "release:dry": "standard-version --dry-run",
53
+ "release:alpha": "npm run test && standard-version --release-as major --prerelease alpha && git push --follow-tags && npm run build && npm publish --tag alpha",
54
+ "release:alpha:dry": "standard-version --release-as major --prerelease alpha --dry-run",
55
+ "lint": "eslint --ext .js,.ts .",
56
+ "types": "vitest typecheck --run && tsc --noEmit",
57
+ "types:watch": "vitest typecheck",
58
+ "unit": "vitest run --coverage",
59
+ "unit:watch": "vitest watch",
60
+ "size": "size-limit",
61
+ "test": "npm run lint && npm run types && npm run unit && npm run build && npm run size"
62
+ },
63
+ "dependencies": {
64
+ "@prismicio/client": "^7.0.1",
65
+ "statuses": "^2.0.1"
66
+ },
67
+ "devDependencies": {
68
+ "@nuxt/eslint-config": "^0.1.1",
69
+ "@nuxtjs/prismic": "^3.0.0",
70
+ "@nuxtjs/tailwindcss": "^6.7.0",
71
+ "@size-limit/preset-small-lib": "^8.2.4",
72
+ "@slicemachine/adapter-nuxt": "^0.3.0",
73
+ "@trivago/prettier-plugin-sort-imports": "^4.1.1",
74
+ "@types/node": "^18",
75
+ "@types/statuses": "^2.0.1",
76
+ "@typescript-eslint/eslint-plugin": "^5.59.9",
77
+ "@typescript-eslint/parser": "^5.59.9",
78
+ "@vitest/coverage-c8": "^0.32.0",
79
+ "eslint": "^8.42.0",
80
+ "eslint-config-prettier": "^8.8.0",
81
+ "eslint-plugin-prettier": "^4.2.1",
82
+ "eslint-plugin-tsdoc": "^0.2.17",
83
+ "nuxt": "^3.5.3",
84
+ "prettier": "^2.8.8",
85
+ "prettier-plugin-jsdoc": "^0.4.2",
86
+ "size-limit": "^8.2.4",
87
+ "standard-version": "^9.5.0",
88
+ "typescript": "^5.1.3",
89
+ "vite": "^4.3.9",
90
+ "vite-plugin-sdk": "^0.1.1",
91
+ "vitest": "^0.32.0"
92
+ },
93
+ "engines": {
94
+ "node": ">=14.15.0"
95
+ },
96
+ "publishConfig": {
97
+ "access": "public"
98
+ }
99
+ }
@@ -0,0 +1,90 @@
1
+ import {
2
+ APIRequestType,
3
+ APITransactions,
4
+ ClientRequestType,
5
+ ClientTransactions,
6
+ } from "./types";
7
+
8
+ import {
9
+ AllChannelReceiverOptions,
10
+ ChannelReceiver,
11
+ TransactionMethod,
12
+ TransactionsHandlers,
13
+ TransactionsMethods,
14
+ } from "./channel";
15
+
16
+ export type SimulatorAPIOptions = {
17
+ activeSliceAPI: boolean;
18
+ sliceZoneSizeAPI: boolean;
19
+ };
20
+
21
+ export const simulatorAPIDefaultOptions: Partial<AllChannelReceiverOptions> &
22
+ SimulatorAPIOptions = {
23
+ requestIDPrefix: "api-",
24
+ activeSliceAPI: false,
25
+ sliceZoneSizeAPI: false,
26
+ };
27
+
28
+ export class SimulatorAPI
29
+ extends ChannelReceiver<ClientTransactions, SimulatorAPIOptions>
30
+ implements TransactionsMethods<APITransactions>
31
+ {
32
+ constructor(
33
+ requestHandlers: Omit<
34
+ TransactionsHandlers<ClientTransactions>,
35
+ ClientRequestType.Ping
36
+ > &
37
+ Partial<
38
+ Pick<TransactionsHandlers<ClientTransactions>, ClientRequestType.Ping>
39
+ >,
40
+ options?: Partial<AllChannelReceiverOptions & SimulatorAPIOptions>,
41
+ ) {
42
+ // True if `options.debug` is true or `debug=true` is among query parameters
43
+ const debug =
44
+ options?.debug ||
45
+ /[?&]debug=true/i.test(decodeURIComponent(window.location.search));
46
+
47
+ super(
48
+ {
49
+ [ClientRequestType.Ping]: (_req, res) => {
50
+ return res.success("pong");
51
+ },
52
+ ...requestHandlers,
53
+ },
54
+ {
55
+ ...simulatorAPIDefaultOptions,
56
+ ...options,
57
+ debug,
58
+ },
59
+ );
60
+
61
+ // Append API to window object
62
+ if (debug) {
63
+ type APIWindow = typeof window & {
64
+ prismic: { sliceSimulator?: { api?: SimulatorAPI[] } };
65
+ };
66
+
67
+ (window as APIWindow).prismic ||= {};
68
+ (window as APIWindow).prismic.sliceSimulator ||= {};
69
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
70
+ (window as APIWindow).prismic.sliceSimulator!.api ||= [];
71
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
72
+ (window as APIWindow).prismic.sliceSimulator!.api!.push(this);
73
+ }
74
+ }
75
+
76
+ [APIRequestType.SetActiveSlice]: TransactionMethod<
77
+ APITransactions[APIRequestType.SetActiveSlice]
78
+ > = async (data) => {
79
+ return await this.postFormattedRequest(APIRequestType.SetActiveSlice, data);
80
+ };
81
+
82
+ [APIRequestType.SetSliceZoneSize]: TransactionMethod<
83
+ APITransactions[APIRequestType.SetSliceZoneSize]
84
+ > = async (data) => {
85
+ return await this.postFormattedRequest(
86
+ APIRequestType.SetSliceZoneSize,
87
+ data,
88
+ );
89
+ };
90
+ }
@@ -0,0 +1,96 @@
1
+ import {
2
+ APIRequestType,
3
+ APITransactions,
4
+ ClientRequestType,
5
+ ClientTransactions,
6
+ } from "./types";
7
+
8
+ import { SimulatorAPIOptions } from "./SimulatorAPI";
9
+ import {
10
+ AllChannelEmitterOptions,
11
+ ChannelEmitter,
12
+ TransactionMethod,
13
+ TransactionsHandlers,
14
+ TransactionsMethods,
15
+ } from "./channel";
16
+
17
+ export const simulatorClientDefaultOptions: Partial<AllChannelEmitterOptions> =
18
+ {
19
+ requestIDPrefix: "client-",
20
+ };
21
+
22
+ export class SimulatorClient
23
+ extends ChannelEmitter<
24
+ APITransactions,
25
+ Partial<AllChannelEmitterOptions>,
26
+ SimulatorAPIOptions
27
+ >
28
+ implements TransactionsMethods<ClientTransactions>
29
+ {
30
+ constructor(
31
+ target: HTMLIFrameElement,
32
+ requestHandlers?: Partial<TransactionsHandlers<APITransactions>>,
33
+ options?: Partial<AllChannelEmitterOptions>,
34
+ ) {
35
+ // True if `options.debug` is true or `debug=true` is among query parameters
36
+ const debug =
37
+ options?.debug ||
38
+ /[?&]debug=true/i.test(decodeURIComponent(window.location.search));
39
+
40
+ super(
41
+ target,
42
+ {
43
+ [APIRequestType.SetActiveSlice]: (_req, res) => {
44
+ return res.success();
45
+ },
46
+ [APIRequestType.SetSliceZoneSize]: (_req, res) => {
47
+ return res.success();
48
+ },
49
+ ...requestHandlers,
50
+ },
51
+ {
52
+ ...simulatorClientDefaultOptions,
53
+ ...options,
54
+ debug,
55
+ },
56
+ );
57
+
58
+ // Append client to window object
59
+ if (debug) {
60
+ type ClientWindow = typeof window & {
61
+ prismic: { sliceSimulator?: { client?: SimulatorClient[] } };
62
+ };
63
+
64
+ (window as ClientWindow).prismic ||= {};
65
+ (window as ClientWindow).prismic.sliceSimulator ||= {};
66
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
67
+ (window as ClientWindow).prismic.sliceSimulator!.client ||= [];
68
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
69
+ (window as ClientWindow).prismic.sliceSimulator!.client!.push(this);
70
+ }
71
+ }
72
+
73
+ [ClientRequestType.Ping]: TransactionMethod<
74
+ ClientTransactions[ClientRequestType.Ping]
75
+ > = async () => {
76
+ return await this.postFormattedRequest(ClientRequestType.Ping);
77
+ };
78
+
79
+ [ClientRequestType.SetSliceZone]: TransactionMethod<
80
+ ClientTransactions[ClientRequestType.SetSliceZone]
81
+ > = async (data) => {
82
+ return await this.postFormattedRequest(
83
+ ClientRequestType.SetSliceZone,
84
+ data,
85
+ );
86
+ };
87
+
88
+ [ClientRequestType.ScrollToSlice]: TransactionMethod<
89
+ ClientTransactions[ClientRequestType.ScrollToSlice]
90
+ > = async (data) => {
91
+ return await this.postFormattedRequest(
92
+ ClientRequestType.ScrollToSlice,
93
+ data,
94
+ );
95
+ };
96
+ }