@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,61 @@
1
+ export type MessageBase = {
2
+ requestID: string;
3
+ };
4
+ export type RequestMessage<TType extends string = string, TData = void> = {
5
+ type: TType;
6
+ data: TData;
7
+ } & MessageBase;
8
+ export type ResponseMessageBase = {
9
+ status: number;
10
+ msg: string;
11
+ } & MessageBase;
12
+ export type SuccessResponseMessage<TData = void> = {
13
+ data: TData;
14
+ error?: never;
15
+ } & ResponseMessageBase;
16
+ export type ErrorResponseMessage<TError = unknown> = {
17
+ data?: never;
18
+ error: unknown | TError;
19
+ } & ResponseMessageBase;
20
+ export type ResponseMessage<TData = void, TError = unknown> = SuccessResponseMessage<TData> | ErrorResponseMessage<TError>;
21
+ export type ExtractSuccessResponseMessage<TResponse extends UnknownResponseMessage> = Extract<TResponse, {
22
+ error?: never;
23
+ }>;
24
+ export type ExtractErrorResponseMessage<TResponse extends UnknownResponseMessage> = Extract<TResponse, {
25
+ data?: never;
26
+ }>;
27
+ export type UnknownRequestMessage = RequestMessage<string, unknown>;
28
+ export type UnknownSuccessResponseMessage = SuccessResponseMessage<unknown>;
29
+ export type UnknownErrorResponseMessage = ErrorResponseMessage<unknown>;
30
+ export type UnknownResponseMessage = UnknownSuccessResponseMessage | UnknownErrorResponseMessage;
31
+ export type UnknownMessage = UnknownRequestMessage | UnknownResponseMessage;
32
+ export type Transaction<TRequest extends UnknownRequestMessage, TResponse extends UnknownResponseMessage = ResponseMessage<void>> = {
33
+ request: TRequest;
34
+ response: TResponse;
35
+ };
36
+ export type TransactionMethod<TTransaction extends Transaction<UnknownRequestMessage, UnknownResponseMessage>> = (data: TTransaction["request"]["data"]) => Promise<ExtractSuccessResponseMessage<TTransaction["response"]>>;
37
+ export type TransactionHandler<TTransaction extends Transaction<UnknownRequestMessage, UnknownResponseMessage>> = (request: TTransaction["request"], response: {
38
+ success: (data: ExtractSuccessResponseMessage<TTransaction["response"]>["data"], status?: number) => ExtractSuccessResponseMessage<TTransaction["response"]>;
39
+ error: (error: ExtractErrorResponseMessage<TTransaction["response"]>["error"], status?: number) => ExtractErrorResponseMessage<TTransaction["response"]>;
40
+ }) => Promise<TTransaction["response"]> | TTransaction["response"];
41
+ export type TransactionsMethods<TTransactions extends Record<string, UnknownTransaction>> = {
42
+ [Key in keyof TTransactions]: TransactionMethod<TTransactions[Key]>;
43
+ };
44
+ export type TransactionsHandlers<TTransactions extends Record<string, UnknownTransaction>> = {
45
+ [Key in keyof TTransactions]: TransactionHandler<TTransactions[Key]>;
46
+ };
47
+ export type UnknownTransaction = Transaction<UnknownRequestMessage, UnknownResponseMessage>;
48
+ export type UnknownTransactionMethod = TransactionMethod<UnknownTransaction>;
49
+ export type UnknownTransactionHandler = TransactionHandler<UnknownTransaction>;
50
+ export declare enum InternalEmitterRequestType {
51
+ Connect = "connect"
52
+ }
53
+ export type InternalEmitterTransactions<TReceiverOptions extends Record<string, unknown> = Record<string, unknown>> = {
54
+ [InternalEmitterRequestType.Connect]: Transaction<RequestMessage<InternalEmitterRequestType.Connect, Partial<Omit<TReceiverOptions, "debug" | "requestIDPrefix" | "readyTimeout">> | undefined>>;
55
+ };
56
+ export declare enum InternalReceiverRequestType {
57
+ Ready = "ready"
58
+ }
59
+ export type InternalReceiverTransactions = {
60
+ [InternalReceiverRequestType.Ready]: Transaction<RequestMessage<InternalReceiverRequestType.Ready>>;
61
+ };
@@ -0,0 +1,13 @@
1
+ var InternalEmitterRequestType;
2
+ (function(InternalEmitterRequestType2) {
3
+ InternalEmitterRequestType2["Connect"] = "connect";
4
+ })(InternalEmitterRequestType || (InternalEmitterRequestType = {}));
5
+ var InternalReceiverRequestType;
6
+ (function(InternalReceiverRequestType2) {
7
+ InternalReceiverRequestType2["Ready"] = "ready";
8
+ })(InternalReceiverRequestType || (InternalReceiverRequestType = {}));
9
+ export {
10
+ InternalEmitterRequestType,
11
+ InternalReceiverRequestType
12
+ };
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../../src/channel/types.ts"],"sourcesContent":["// Messages\nexport type MessageBase = {\n\trequestID: string;\n};\n\nexport type RequestMessage<TType extends string = string, TData = void> = {\n\ttype: TType;\n\tdata: TData;\n} & MessageBase;\n\nexport type ResponseMessageBase = {\n\tstatus: number;\n\tmsg: string;\n} & MessageBase;\n\nexport type SuccessResponseMessage<TData = void> = {\n\tdata: TData;\n\terror?: never;\n} & ResponseMessageBase;\n\nexport type ErrorResponseMessage<TError = unknown> = {\n\tdata?: never;\n\terror: unknown | TError;\n} & ResponseMessageBase;\n\nexport type ResponseMessage<TData = void, TError = unknown> =\n\t| SuccessResponseMessage<TData>\n\t| ErrorResponseMessage<TError>;\n\nexport type ExtractSuccessResponseMessage<\n\tTResponse extends UnknownResponseMessage,\n> = Extract<TResponse, { error?: never }>;\n\nexport type ExtractErrorResponseMessage<\n\tTResponse extends UnknownResponseMessage,\n> = Extract<TResponse, { data?: never }>;\n\n// Unknown messages\nexport type UnknownRequestMessage = RequestMessage<string, unknown>;\n\nexport type UnknownSuccessResponseMessage = SuccessResponseMessage<unknown>;\n\nexport type UnknownErrorResponseMessage = ErrorResponseMessage<unknown>;\n\nexport type UnknownResponseMessage =\n\t| UnknownSuccessResponseMessage\n\t| UnknownErrorResponseMessage;\n\nexport type UnknownMessage = UnknownRequestMessage | UnknownResponseMessage;\n\n// Transactions\nexport type Transaction<\n\tTRequest extends UnknownRequestMessage,\n\tTResponse extends UnknownResponseMessage = ResponseMessage<void>,\n> = {\n\trequest: TRequest;\n\tresponse: TResponse;\n};\n\nexport type TransactionMethod<\n\tTTransaction extends Transaction<\n\t\tUnknownRequestMessage,\n\t\tUnknownResponseMessage\n\t>,\n> = (\n\tdata: TTransaction[\"request\"][\"data\"],\n) => Promise<ExtractSuccessResponseMessage<TTransaction[\"response\"]>>;\n\nexport type TransactionHandler<\n\tTTransaction extends Transaction<\n\t\tUnknownRequestMessage,\n\t\tUnknownResponseMessage\n\t>,\n> = (\n\trequest: TTransaction[\"request\"],\n\tresponse: {\n\t\tsuccess: (\n\t\t\tdata: ExtractSuccessResponseMessage<TTransaction[\"response\"]>[\"data\"],\n\t\t\tstatus?: number,\n\t\t) => ExtractSuccessResponseMessage<TTransaction[\"response\"]>;\n\t\terror: (\n\t\t\terror: ExtractErrorResponseMessage<TTransaction[\"response\"]>[\"error\"],\n\t\t\tstatus?: number,\n\t\t) => ExtractErrorResponseMessage<TTransaction[\"response\"]>;\n\t},\n) => Promise<TTransaction[\"response\"]> | TTransaction[\"response\"];\n\nexport type TransactionsMethods<\n\tTTransactions extends Record<string, UnknownTransaction>,\n> = {\n\t[Key in keyof TTransactions]: TransactionMethod<TTransactions[Key]>;\n};\n\nexport type TransactionsHandlers<\n\tTTransactions extends Record<string, UnknownTransaction>,\n> = {\n\t[Key in keyof TTransactions]: TransactionHandler<TTransactions[Key]>;\n};\n\n// Unknown transactions\nexport type UnknownTransaction = Transaction<\n\tUnknownRequestMessage,\n\tUnknownResponseMessage\n>;\n\nexport type UnknownTransactionMethod = TransactionMethod<UnknownTransaction>;\n\nexport type UnknownTransactionHandler = TransactionHandler<UnknownTransaction>;\n\n// Emitter\nexport enum InternalEmitterRequestType {\n\tConnect = \"connect\",\n}\n\nexport type InternalEmitterTransactions<\n\tTReceiverOptions extends Record<string, unknown> = Record<string, unknown>,\n> = {\n\t[InternalEmitterRequestType.Connect]: Transaction<\n\t\tRequestMessage<\n\t\t\tInternalEmitterRequestType.Connect,\n\t\t\t| Partial<\n\t\t\t\t\tOmit<TReceiverOptions, \"debug\" | \"requestIDPrefix\" | \"readyTimeout\">\n\t\t\t >\n\t\t\t| undefined\n\t\t>\n\t>;\n};\n\n// Receiver\nexport enum InternalReceiverRequestType {\n\tReady = \"ready\",\n}\n\nexport type InternalReceiverTransactions = {\n\t[InternalReceiverRequestType.Ready]: Transaction<\n\t\tRequestMessage<InternalReceiverRequestType.Ready>\n\t>;\n};\n"],"names":["InternalEmitterRequestType","InternalReceiverRequestType"],"mappings":"AA8GY,IAAA;AAAA,CAAZ,SAAYA,6BAA0B;AACrCA,8BAAA,SAAA,IAAA;AACD,GAFY,+BAAA,6BAEX,CAAA,EAAA;AAiBW,IAAA;AAAA,CAAZ,SAAYC,8BAA2B;AACtCA,+BAAA,OAAA,IAAA;AACD,GAFY,gCAAA,8BAEX,CAAA,EAAA;"}
package/dist/index.cjs ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const SimulatorClient = require("./SimulatorClient.cjs");
4
+ const SimulatorAPI = require("./SimulatorAPI.cjs");
5
+ const errors = require("./channel/errors.cjs");
6
+ const messages = require("./channel/messages.cjs");
7
+ require("./channel/types.cjs");
8
+ const types = require("./types.cjs");
9
+ exports.SimulatorClient = SimulatorClient.SimulatorClient;
10
+ exports.simulatorClientDefaultOptions = SimulatorClient.simulatorClientDefaultOptions;
11
+ exports.SimulatorAPI = SimulatorAPI.SimulatorAPI;
12
+ exports.simulatorAPIDefaultOptions = SimulatorAPI.simulatorAPIDefaultOptions;
13
+ exports.ChannelNotSetError = errors.ChannelNotSetError;
14
+ exports.ConnectionTimeoutError = errors.ConnectionTimeoutError;
15
+ exports.NotReadyError = errors.NotReadyError;
16
+ exports.PortNotSetError = errors.PortNotSetError;
17
+ exports.RequestTimeoutError = errors.RequestTimeoutError;
18
+ exports.ResponseError = errors.ResponseError;
19
+ exports.TooManyConcurrentRequestsError = errors.TooManyConcurrentRequestsError;
20
+ exports.isErrorResponseMessage = messages.isErrorResponseMessage;
21
+ exports.isRequestMessage = messages.isRequestMessage;
22
+ exports.isResponseMessage = messages.isResponseMessage;
23
+ exports.isSuccessResponseMessage = messages.isSuccessResponseMessage;
24
+ exports.validateMessage = messages.validateMessage;
25
+ Object.defineProperty(exports, "APIRequestType", {
26
+ enumerable: true,
27
+ get: () => types.APIRequestType
28
+ });
29
+ Object.defineProperty(exports, "ClientRequestType", {
30
+ enumerable: true,
31
+ get: () => types.ClientRequestType
32
+ });
33
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,7 @@
1
+ export { SimulatorClient, simulatorClientDefaultOptions, } from "./SimulatorClient";
2
+ export { SimulatorAPI, simulatorAPIDefaultOptions } from "./SimulatorAPI";
3
+ export type { SimulatorAPIOptions } from "./SimulatorAPI";
4
+ export { validateMessage, isRequestMessage, isResponseMessage, isSuccessResponseMessage, isErrorResponseMessage, ResponseError, ConnectionTimeoutError, TooManyConcurrentRequestsError, RequestTimeoutError, NotReadyError, PortNotSetError, ChannelNotSetError, } from "./channel";
5
+ export type { RequestMessage, ResponseMessage, ErrorResponseMessage, SuccessResponseMessage, AllChannelEmitterOptions, AllChannelReceiverOptions, } from "./channel";
6
+ export { APIRequestType, ClientRequestType } from "./types";
7
+ export type { ActiveSlice, VariationSummary, SliceSummary, LibrarySummary, APITransactions, ClientTransactions, } from "./types";
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ import { SimulatorClient, simulatorClientDefaultOptions } from "./SimulatorClient.js";
2
+ import { SimulatorAPI, simulatorAPIDefaultOptions } from "./SimulatorAPI.js";
3
+ import { ChannelNotSetError, ConnectionTimeoutError, NotReadyError, PortNotSetError, RequestTimeoutError, ResponseError, TooManyConcurrentRequestsError } from "./channel/errors.js";
4
+ import { isErrorResponseMessage, isRequestMessage, isResponseMessage, isSuccessResponseMessage, validateMessage } from "./channel/messages.js";
5
+ import "./channel/types.js";
6
+ import { APIRequestType, ClientRequestType } from "./types.js";
7
+ export {
8
+ APIRequestType,
9
+ ChannelNotSetError,
10
+ ClientRequestType,
11
+ ConnectionTimeoutError,
12
+ NotReadyError,
13
+ PortNotSetError,
14
+ RequestTimeoutError,
15
+ ResponseError,
16
+ SimulatorAPI,
17
+ SimulatorClient,
18
+ TooManyConcurrentRequestsError,
19
+ isErrorResponseMessage,
20
+ isRequestMessage,
21
+ isResponseMessage,
22
+ isSuccessResponseMessage,
23
+ simulatorAPIDefaultOptions,
24
+ simulatorClientDefaultOptions,
25
+ validateMessage
26
+ };
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __publicField = (obj, key, value) => {
5
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
+ return value;
7
+ };
8
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
9
+ const throttle = require("../lib/throttle.cjs");
10
+ const types = require("../types.cjs");
11
+ const types$1 = require("./types.cjs");
12
+ const SimulatorAPI = require("../SimulatorAPI.cjs");
13
+ const errors = require("../channel/errors.cjs");
14
+ require("statuses");
15
+ require("../channel/types.cjs");
16
+ const State = require("./State.cjs");
17
+ const domHelpers = require("./domHelpers.cjs");
18
+ const messages = require("./messages.cjs");
19
+ class SimulatorManager {
20
+ constructor(args) {
21
+ __publicField(this, "state");
22
+ __publicField(this, "_api");
23
+ __publicField(this, "_initialized");
24
+ this.state = new State.State(args);
25
+ this._api = null;
26
+ this._initialized = false;
27
+ }
28
+ async init() {
29
+ if (this._initialized) {
30
+ return;
31
+ } else {
32
+ this._initialized = true;
33
+ }
34
+ await this.state.init();
35
+ try {
36
+ await this._initAPI();
37
+ } catch (error) {
38
+ if (error instanceof Error && error.message === "Receiver is currently not embedded as an iframe" && !this.state.slices.length) {
39
+ this.state.message = messages.sliceSimulatorAccessedDirectly;
40
+ }
41
+ console.error(error);
42
+ return;
43
+ }
44
+ this._initListeners();
45
+ }
46
+ async _initAPI() {
47
+ this._api = new SimulatorAPI.SimulatorAPI({
48
+ [types.ClientRequestType.SetSliceZone]: (req, res) => {
49
+ this.state.setSliceZone(req.data);
50
+ return res.success();
51
+ },
52
+ [types.ClientRequestType.ScrollToSlice]: (req, res) => {
53
+ var _a;
54
+ if (req.data.sliceIndex < 0) {
55
+ return res.error("`sliceIndex` must be > 0", 400);
56
+ } else if (req.data.sliceIndex >= this.state.slices.length) {
57
+ return res.error(`\`sliceIndex\` must be < ${this.state.slices.length} (\`<SliceZone />\` current length)`, 400);
58
+ }
59
+ const $sliceZone = domHelpers.getSliceZoneDOM(this.state.slices.length);
60
+ if (!$sliceZone) {
61
+ return res.error("Failed to find `<SliceZone />`", 500);
62
+ }
63
+ this.state.activeSlice = null;
64
+ const $slice = $sliceZone.children[req.data.sliceIndex];
65
+ if (!$slice) {
66
+ return res.error(`Failed fo find slice at index $\`{req.data.sliceIndex}\` in \`<SliceZone />\``, 500);
67
+ }
68
+ $slice.scrollIntoView({
69
+ behavior: req.data.behavior,
70
+ block: req.data.block,
71
+ inline: req.data.inline
72
+ });
73
+ ((_a = this._api) == null ? void 0 : _a.options.activeSliceAPI) && setTimeout(this.state.setActiveSlice, 750);
74
+ return res.success();
75
+ }
76
+ });
77
+ await this._api.ready();
78
+ }
79
+ _initListeners() {
80
+ var _a, _b;
81
+ if ((_a = this._api) == null ? void 0 : _a.options.activeSliceAPI) {
82
+ window.addEventListener("mousemove", () => {
83
+ this.state.setActiveSlice();
84
+ });
85
+ window.addEventListener("resize", () => {
86
+ this.state.setActiveSlice();
87
+ });
88
+ window.addEventListener("mousewheel", () => {
89
+ var _a2;
90
+ ((_a2 = this._api) == null ? void 0 : _a2.options.activeSliceAPI) && setTimeout(this.state.setActiveSlice, 200);
91
+ });
92
+ this.state.on(types$1.StateEventType.Slices, () => {
93
+ this.state.setActiveSlice();
94
+ });
95
+ this.state.on(types$1.StateEventType.ActiveSlice, async (activeSlice) => {
96
+ if (this._api) {
97
+ try {
98
+ await this._api.setActiveSlice(activeSlice);
99
+ } catch (error) {
100
+ if (error instanceof errors.ResponseError && error.response.status === 400) {
101
+ console.error(error.response);
102
+ } else {
103
+ throw error;
104
+ }
105
+ }
106
+ }
107
+ });
108
+ }
109
+ if ((_b = this._api) == null ? void 0 : _b.options.sliceZoneSizeAPI) {
110
+ const resizeObserver = new ResizeObserver(throttle.throttle(async (entries) => {
111
+ const [entry] = entries;
112
+ if (this._api && entry) {
113
+ try {
114
+ await this._api.setSliceZoneSize({ rect: entry.contentRect });
115
+ } catch (error) {
116
+ if (error instanceof errors.ResponseError && error.response.status === 400) {
117
+ console.error(error.response);
118
+ } else {
119
+ throw error;
120
+ }
121
+ }
122
+ }
123
+ }, 16));
124
+ const observeSimulatorRoot = () => {
125
+ const simulatorRootDOM = domHelpers.getSimulatorRootDOM();
126
+ if (simulatorRootDOM) {
127
+ resizeObserver.disconnect();
128
+ resizeObserver.observe(simulatorRootDOM);
129
+ }
130
+ };
131
+ const mutationObserver = new MutationObserver(observeSimulatorRoot);
132
+ mutationObserver.observe(domHelpers.getSimulatorDOM(), {
133
+ subtree: false,
134
+ childList: true
135
+ });
136
+ }
137
+ }
138
+ }
139
+ exports.SimulatorManager = SimulatorManager;
140
+ //# sourceMappingURL=SimulatorManager.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimulatorManager.cjs","sources":["../../../src/kit/SimulatorManager.ts"],"sourcesContent":["import type { SliceZone } from \"@prismicio/client\";\n\nimport { throttle } from \"../lib/throttle\";\n\nimport { ClientRequestType } from \"../types\";\nimport { StateEventType } from \"./types\";\n\nimport { SimulatorAPI } from \"../SimulatorAPI\";\nimport { ResponseError } from \"../channel\";\n\nimport { State } from \"./State\";\nimport {\n\tgetSimulatorDOM,\n\tgetSimulatorRootDOM,\n\tgetSliceZoneDOM,\n} from \"./domHelpers\";\nimport { sliceSimulatorAccessedDirectly } from \"./messages\";\n\ntype ManagerConstructorArgs = {\n\tslices?: SliceZone;\n};\n\nexport class SimulatorManager {\n\tpublic state: State;\n\tprivate _api: SimulatorAPI | null;\n\tprivate _initialized: boolean;\n\n\tconstructor(args?: ManagerConstructorArgs) {\n\t\tthis.state = new State(args);\n\t\tthis._api = null;\n\t\tthis._initialized = false;\n\t}\n\n\tasync init(): Promise<void> {\n\t\tif (this._initialized) {\n\t\t\treturn;\n\t\t} else {\n\t\t\tthis._initialized = true;\n\t\t}\n\n\t\t// Init state manager\n\t\tawait this.state.init();\n\n\t\t// Init API\n\t\ttry {\n\t\t\tawait this._initAPI();\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\terror instanceof Error &&\n\t\t\t\terror.message === \"Receiver is currently not embedded as an iframe\" &&\n\t\t\t\t!this.state.slices.length\n\t\t\t) {\n\t\t\t\t// Catch not embedded error and display message\n\t\t\t\tthis.state.message = sliceSimulatorAccessedDirectly;\n\t\t\t}\n\t\t\tconsole.error(error);\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Init listeners\n\t\tthis._initListeners();\n\t}\n\n\tprivate async _initAPI(): Promise<void> {\n\t\t// Register SimulatorAPI request handlers\n\t\tthis._api = new SimulatorAPI({\n\t\t\t[ClientRequestType.SetSliceZone]: (req, res) => {\n\t\t\t\tthis.state.setSliceZone(req.data);\n\n\t\t\t\treturn res.success();\n\t\t\t},\n\t\t\t[ClientRequestType.ScrollToSlice]: (req, res) => {\n\t\t\t\t// Error if `sliceIndex` is invalid\n\t\t\t\tif (req.data.sliceIndex < 0) {\n\t\t\t\t\treturn res.error(\"`sliceIndex` must be > 0\", 400);\n\t\t\t\t} else if (req.data.sliceIndex >= this.state.slices.length) {\n\t\t\t\t\treturn res.error(\n\t\t\t\t\t\t`\\`sliceIndex\\` must be < ${this.state.slices.length} (\\`<SliceZone />\\` current length)`,\n\t\t\t\t\t\t400,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst $sliceZone = getSliceZoneDOM(this.state.slices.length);\n\t\t\t\tif (!$sliceZone) {\n\t\t\t\t\treturn res.error(\"Failed to find `<SliceZone />`\", 500);\n\t\t\t\t}\n\n\t\t\t\t// Destroy existing active slice as we're about to scroll\n\t\t\t\tthis.state.activeSlice = null;\n\n\t\t\t\tconst $slice = $sliceZone.children[req.data.sliceIndex];\n\t\t\t\tif (!$slice) {\n\t\t\t\t\treturn res.error(\n\t\t\t\t\t\t`Failed fo find slice at index $\\`{req.data.sliceIndex}\\` in \\`<SliceZone />\\``,\n\t\t\t\t\t\t500,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Scroll to Slice\n\t\t\t\t$slice.scrollIntoView({\n\t\t\t\t\tbehavior: req.data.behavior,\n\t\t\t\t\tblock: req.data.block,\n\t\t\t\t\tinline: req.data.inline,\n\t\t\t\t});\n\n\t\t\t\t// Update active slice after scrolling\n\t\t\t\tthis._api?.options.activeSliceAPI &&\n\t\t\t\t\tsetTimeout(this.state.setActiveSlice, 750);\n\n\t\t\t\treturn res.success();\n\t\t\t},\n\t\t});\n\n\t\t// Mark API as ready\n\t\tawait this._api.ready();\n\t}\n\n\tprivate _initListeners(): void {\n\t\tif (this._api?.options.activeSliceAPI) {\n\t\t\t// Update active slice on mouse move\n\t\t\twindow.addEventListener(\"mousemove\", () => {\n\t\t\t\tthis.state.setActiveSlice();\n\t\t\t});\n\t\t\t// Update active slice on events impacting slices rendering\n\t\t\twindow.addEventListener(\"resize\", () => {\n\t\t\t\tthis.state.setActiveSlice();\n\t\t\t});\n\t\t\twindow.addEventListener(\"mousewheel\", () => {\n\t\t\t\tthis._api?.options.activeSliceAPI &&\n\t\t\t\t\tsetTimeout(this.state.setActiveSlice, 200);\n\t\t\t});\n\n\t\t\t// Update active slice when slices are set\n\t\t\tthis.state.on(StateEventType.Slices, () => {\n\t\t\t\tthis.state.setActiveSlice();\n\t\t\t});\n\t\t\t// Send active slices to renderer\n\t\t\tthis.state.on(StateEventType.ActiveSlice, async (activeSlice) => {\n\t\t\t\tif (this._api) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this._api.setActiveSlice(activeSlice);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t// Just log bad requests, throw everything else\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\terror instanceof ResponseError &&\n\t\t\t\t\t\t\terror.response.status === 400\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconsole.error(error.response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (this._api?.options.sliceZoneSizeAPI) {\n\t\t\t// Monitor Simulator root node size\n\t\t\tconst resizeObserver = new ResizeObserver(\n\t\t\t\tthrottle(async (entries) => {\n\t\t\t\t\tconst [entry] = entries;\n\n\t\t\t\t\tif (this._api && entry) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this._api.setSliceZoneSize({ rect: entry.contentRect });\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t// Just log bad requests, throw everything else\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\terror instanceof ResponseError &&\n\t\t\t\t\t\t\t\terror.response.status === 400\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconsole.error(error.response);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, 16),\n\t\t\t);\n\t\t\tconst observeSimulatorRoot = () => {\n\t\t\t\tconst simulatorRootDOM = getSimulatorRootDOM();\n\t\t\t\tif (simulatorRootDOM) {\n\t\t\t\t\tresizeObserver.disconnect();\n\t\t\t\t\tresizeObserver.observe(simulatorRootDOM);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Monitor Simulator root node in DOM\n\t\t\tconst mutationObserver = new MutationObserver(observeSimulatorRoot);\n\t\t\t// We want it to fail if not found\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tmutationObserver.observe(getSimulatorDOM()!, {\n\t\t\t\tsubtree: false,\n\t\t\t\tchildList: true,\n\t\t\t});\n\t\t}\n\t}\n}\n"],"names":["State","sliceSimulatorAccessedDirectly","SimulatorAPI","ClientRequestType","getSliceZoneDOM","_a","StateEventType","ResponseError","throttle","getSimulatorRootDOM","getSimulatorDOM"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { SliceZone } from "@prismicio/client";
2
+ import { State } from "./State";
3
+ type ManagerConstructorArgs = {
4
+ slices?: SliceZone;
5
+ };
6
+ export declare class SimulatorManager {
7
+ state: State;
8
+ private _api;
9
+ private _initialized;
10
+ constructor(args?: ManagerConstructorArgs);
11
+ init(): Promise<void>;
12
+ private _initAPI;
13
+ private _initListeners;
14
+ }
15
+ export {};
@@ -0,0 +1,140 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => {
4
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
+ return value;
6
+ };
7
+ import { throttle } from "../lib/throttle.js";
8
+ import { ClientRequestType } from "../types.js";
9
+ import { StateEventType } from "./types.js";
10
+ import { SimulatorAPI } from "../SimulatorAPI.js";
11
+ import { ResponseError } from "../channel/errors.js";
12
+ import "statuses";
13
+ import "../channel/types.js";
14
+ import { State } from "./State.js";
15
+ import { getSliceZoneDOM, getSimulatorDOM, getSimulatorRootDOM } from "./domHelpers.js";
16
+ import { sliceSimulatorAccessedDirectly } from "./messages.js";
17
+ class SimulatorManager {
18
+ constructor(args) {
19
+ __publicField(this, "state");
20
+ __publicField(this, "_api");
21
+ __publicField(this, "_initialized");
22
+ this.state = new State(args);
23
+ this._api = null;
24
+ this._initialized = false;
25
+ }
26
+ async init() {
27
+ if (this._initialized) {
28
+ return;
29
+ } else {
30
+ this._initialized = true;
31
+ }
32
+ await this.state.init();
33
+ try {
34
+ await this._initAPI();
35
+ } catch (error) {
36
+ if (error instanceof Error && error.message === "Receiver is currently not embedded as an iframe" && !this.state.slices.length) {
37
+ this.state.message = sliceSimulatorAccessedDirectly;
38
+ }
39
+ console.error(error);
40
+ return;
41
+ }
42
+ this._initListeners();
43
+ }
44
+ async _initAPI() {
45
+ this._api = new SimulatorAPI({
46
+ [ClientRequestType.SetSliceZone]: (req, res) => {
47
+ this.state.setSliceZone(req.data);
48
+ return res.success();
49
+ },
50
+ [ClientRequestType.ScrollToSlice]: (req, res) => {
51
+ var _a;
52
+ if (req.data.sliceIndex < 0) {
53
+ return res.error("`sliceIndex` must be > 0", 400);
54
+ } else if (req.data.sliceIndex >= this.state.slices.length) {
55
+ return res.error(`\`sliceIndex\` must be < ${this.state.slices.length} (\`<SliceZone />\` current length)`, 400);
56
+ }
57
+ const $sliceZone = getSliceZoneDOM(this.state.slices.length);
58
+ if (!$sliceZone) {
59
+ return res.error("Failed to find `<SliceZone />`", 500);
60
+ }
61
+ this.state.activeSlice = null;
62
+ const $slice = $sliceZone.children[req.data.sliceIndex];
63
+ if (!$slice) {
64
+ return res.error(`Failed fo find slice at index $\`{req.data.sliceIndex}\` in \`<SliceZone />\``, 500);
65
+ }
66
+ $slice.scrollIntoView({
67
+ behavior: req.data.behavior,
68
+ block: req.data.block,
69
+ inline: req.data.inline
70
+ });
71
+ ((_a = this._api) == null ? void 0 : _a.options.activeSliceAPI) && setTimeout(this.state.setActiveSlice, 750);
72
+ return res.success();
73
+ }
74
+ });
75
+ await this._api.ready();
76
+ }
77
+ _initListeners() {
78
+ var _a, _b;
79
+ if ((_a = this._api) == null ? void 0 : _a.options.activeSliceAPI) {
80
+ window.addEventListener("mousemove", () => {
81
+ this.state.setActiveSlice();
82
+ });
83
+ window.addEventListener("resize", () => {
84
+ this.state.setActiveSlice();
85
+ });
86
+ window.addEventListener("mousewheel", () => {
87
+ var _a2;
88
+ ((_a2 = this._api) == null ? void 0 : _a2.options.activeSliceAPI) && setTimeout(this.state.setActiveSlice, 200);
89
+ });
90
+ this.state.on(StateEventType.Slices, () => {
91
+ this.state.setActiveSlice();
92
+ });
93
+ this.state.on(StateEventType.ActiveSlice, async (activeSlice) => {
94
+ if (this._api) {
95
+ try {
96
+ await this._api.setActiveSlice(activeSlice);
97
+ } catch (error) {
98
+ if (error instanceof ResponseError && error.response.status === 400) {
99
+ console.error(error.response);
100
+ } else {
101
+ throw error;
102
+ }
103
+ }
104
+ }
105
+ });
106
+ }
107
+ if ((_b = this._api) == null ? void 0 : _b.options.sliceZoneSizeAPI) {
108
+ const resizeObserver = new ResizeObserver(throttle(async (entries) => {
109
+ const [entry] = entries;
110
+ if (this._api && entry) {
111
+ try {
112
+ await this._api.setSliceZoneSize({ rect: entry.contentRect });
113
+ } catch (error) {
114
+ if (error instanceof ResponseError && error.response.status === 400) {
115
+ console.error(error.response);
116
+ } else {
117
+ throw error;
118
+ }
119
+ }
120
+ }
121
+ }, 16));
122
+ const observeSimulatorRoot = () => {
123
+ const simulatorRootDOM = getSimulatorRootDOM();
124
+ if (simulatorRootDOM) {
125
+ resizeObserver.disconnect();
126
+ resizeObserver.observe(simulatorRootDOM);
127
+ }
128
+ };
129
+ const mutationObserver = new MutationObserver(observeSimulatorRoot);
130
+ mutationObserver.observe(getSimulatorDOM(), {
131
+ subtree: false,
132
+ childList: true
133
+ });
134
+ }
135
+ }
136
+ }
137
+ export {
138
+ SimulatorManager
139
+ };
140
+ //# sourceMappingURL=SimulatorManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimulatorManager.js","sources":["../../../src/kit/SimulatorManager.ts"],"sourcesContent":["import type { SliceZone } from \"@prismicio/client\";\n\nimport { throttle } from \"../lib/throttle\";\n\nimport { ClientRequestType } from \"../types\";\nimport { StateEventType } from \"./types\";\n\nimport { SimulatorAPI } from \"../SimulatorAPI\";\nimport { ResponseError } from \"../channel\";\n\nimport { State } from \"./State\";\nimport {\n\tgetSimulatorDOM,\n\tgetSimulatorRootDOM,\n\tgetSliceZoneDOM,\n} from \"./domHelpers\";\nimport { sliceSimulatorAccessedDirectly } from \"./messages\";\n\ntype ManagerConstructorArgs = {\n\tslices?: SliceZone;\n};\n\nexport class SimulatorManager {\n\tpublic state: State;\n\tprivate _api: SimulatorAPI | null;\n\tprivate _initialized: boolean;\n\n\tconstructor(args?: ManagerConstructorArgs) {\n\t\tthis.state = new State(args);\n\t\tthis._api = null;\n\t\tthis._initialized = false;\n\t}\n\n\tasync init(): Promise<void> {\n\t\tif (this._initialized) {\n\t\t\treturn;\n\t\t} else {\n\t\t\tthis._initialized = true;\n\t\t}\n\n\t\t// Init state manager\n\t\tawait this.state.init();\n\n\t\t// Init API\n\t\ttry {\n\t\t\tawait this._initAPI();\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\terror instanceof Error &&\n\t\t\t\terror.message === \"Receiver is currently not embedded as an iframe\" &&\n\t\t\t\t!this.state.slices.length\n\t\t\t) {\n\t\t\t\t// Catch not embedded error and display message\n\t\t\t\tthis.state.message = sliceSimulatorAccessedDirectly;\n\t\t\t}\n\t\t\tconsole.error(error);\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Init listeners\n\t\tthis._initListeners();\n\t}\n\n\tprivate async _initAPI(): Promise<void> {\n\t\t// Register SimulatorAPI request handlers\n\t\tthis._api = new SimulatorAPI({\n\t\t\t[ClientRequestType.SetSliceZone]: (req, res) => {\n\t\t\t\tthis.state.setSliceZone(req.data);\n\n\t\t\t\treturn res.success();\n\t\t\t},\n\t\t\t[ClientRequestType.ScrollToSlice]: (req, res) => {\n\t\t\t\t// Error if `sliceIndex` is invalid\n\t\t\t\tif (req.data.sliceIndex < 0) {\n\t\t\t\t\treturn res.error(\"`sliceIndex` must be > 0\", 400);\n\t\t\t\t} else if (req.data.sliceIndex >= this.state.slices.length) {\n\t\t\t\t\treturn res.error(\n\t\t\t\t\t\t`\\`sliceIndex\\` must be < ${this.state.slices.length} (\\`<SliceZone />\\` current length)`,\n\t\t\t\t\t\t400,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst $sliceZone = getSliceZoneDOM(this.state.slices.length);\n\t\t\t\tif (!$sliceZone) {\n\t\t\t\t\treturn res.error(\"Failed to find `<SliceZone />`\", 500);\n\t\t\t\t}\n\n\t\t\t\t// Destroy existing active slice as we're about to scroll\n\t\t\t\tthis.state.activeSlice = null;\n\n\t\t\t\tconst $slice = $sliceZone.children[req.data.sliceIndex];\n\t\t\t\tif (!$slice) {\n\t\t\t\t\treturn res.error(\n\t\t\t\t\t\t`Failed fo find slice at index $\\`{req.data.sliceIndex}\\` in \\`<SliceZone />\\``,\n\t\t\t\t\t\t500,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Scroll to Slice\n\t\t\t\t$slice.scrollIntoView({\n\t\t\t\t\tbehavior: req.data.behavior,\n\t\t\t\t\tblock: req.data.block,\n\t\t\t\t\tinline: req.data.inline,\n\t\t\t\t});\n\n\t\t\t\t// Update active slice after scrolling\n\t\t\t\tthis._api?.options.activeSliceAPI &&\n\t\t\t\t\tsetTimeout(this.state.setActiveSlice, 750);\n\n\t\t\t\treturn res.success();\n\t\t\t},\n\t\t});\n\n\t\t// Mark API as ready\n\t\tawait this._api.ready();\n\t}\n\n\tprivate _initListeners(): void {\n\t\tif (this._api?.options.activeSliceAPI) {\n\t\t\t// Update active slice on mouse move\n\t\t\twindow.addEventListener(\"mousemove\", () => {\n\t\t\t\tthis.state.setActiveSlice();\n\t\t\t});\n\t\t\t// Update active slice on events impacting slices rendering\n\t\t\twindow.addEventListener(\"resize\", () => {\n\t\t\t\tthis.state.setActiveSlice();\n\t\t\t});\n\t\t\twindow.addEventListener(\"mousewheel\", () => {\n\t\t\t\tthis._api?.options.activeSliceAPI &&\n\t\t\t\t\tsetTimeout(this.state.setActiveSlice, 200);\n\t\t\t});\n\n\t\t\t// Update active slice when slices are set\n\t\t\tthis.state.on(StateEventType.Slices, () => {\n\t\t\t\tthis.state.setActiveSlice();\n\t\t\t});\n\t\t\t// Send active slices to renderer\n\t\t\tthis.state.on(StateEventType.ActiveSlice, async (activeSlice) => {\n\t\t\t\tif (this._api) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this._api.setActiveSlice(activeSlice);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t// Just log bad requests, throw everything else\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\terror instanceof ResponseError &&\n\t\t\t\t\t\t\terror.response.status === 400\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconsole.error(error.response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (this._api?.options.sliceZoneSizeAPI) {\n\t\t\t// Monitor Simulator root node size\n\t\t\tconst resizeObserver = new ResizeObserver(\n\t\t\t\tthrottle(async (entries) => {\n\t\t\t\t\tconst [entry] = entries;\n\n\t\t\t\t\tif (this._api && entry) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this._api.setSliceZoneSize({ rect: entry.contentRect });\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t// Just log bad requests, throw everything else\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\terror instanceof ResponseError &&\n\t\t\t\t\t\t\t\terror.response.status === 400\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconsole.error(error.response);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, 16),\n\t\t\t);\n\t\t\tconst observeSimulatorRoot = () => {\n\t\t\t\tconst simulatorRootDOM = getSimulatorRootDOM();\n\t\t\t\tif (simulatorRootDOM) {\n\t\t\t\t\tresizeObserver.disconnect();\n\t\t\t\t\tresizeObserver.observe(simulatorRootDOM);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Monitor Simulator root node in DOM\n\t\t\tconst mutationObserver = new MutationObserver(observeSimulatorRoot);\n\t\t\t// We want it to fail if not found\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tmutationObserver.observe(getSimulatorDOM()!, {\n\t\t\t\tsubtree: false,\n\t\t\t\tchildList: true,\n\t\t\t});\n\t\t}\n\t}\n}\n"],"names":["_a"],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __publicField = (obj, key, value) => {
5
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
+ return value;
7
+ };
8
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
9
+ const EventEmitter = require("../lib/EventEmitter.cjs");
10
+ const throttle = require("../lib/throttle.cjs");
11
+ const types = require("./types.cjs");
12
+ const domHelpers = require("./domHelpers.cjs");
13
+ const getDefault = require("./getDefault.cjs");
14
+ class State extends EventEmitter.EventEmitter {
15
+ constructor(args) {
16
+ super();
17
+ __publicField(this, "_slices");
18
+ __publicField(this, "_activeSlice");
19
+ __publicField(this, "_message");
20
+ __publicField(this, "_mouse");
21
+ __publicField(this, "_setActiveSlice", () => {
22
+ if (this.slices.length === 0) {
23
+ this.activeSlice = null;
24
+ return;
25
+ }
26
+ const $sliceZone = domHelpers.getSliceZoneDOM(this.slices.length);
27
+ if (!$sliceZone) {
28
+ this.activeSlice = null;
29
+ return;
30
+ }
31
+ const $activeSlice = domHelpers.getActiveSliceDOM($sliceZone, this._mouse);
32
+ if (!$activeSlice) {
33
+ this.activeSlice = null;
34
+ return;
35
+ }
36
+ const activeSliceIndex = Array.prototype.indexOf.call($sliceZone.children, $activeSlice);
37
+ this.activeSlice = {
38
+ rect: $activeSlice.getBoundingClientRect(),
39
+ sliceID: this.slices[activeSliceIndex].slice_type,
40
+ variationID: this.slices[activeSliceIndex].variation,
41
+ index: activeSliceIndex
42
+ };
43
+ });
44
+ __publicField(this, "setActiveSlice", throttle.throttle(this._setActiveSlice, 16));
45
+ this._slices = (args == null ? void 0 : args.slices) || getDefault.getDefaultSlices();
46
+ this._activeSlice = null;
47
+ this._message = "";
48
+ this._mouse = { x: 0, y: 0 };
49
+ }
50
+ set slices(slices) {
51
+ this._slices = slices;
52
+ this.message = "";
53
+ this.emit(types.StateEventType.Slices, slices);
54
+ }
55
+ get slices() {
56
+ return this._slices;
57
+ }
58
+ set activeSlice(activeSlice) {
59
+ this._activeSlice = activeSlice;
60
+ this.emit(types.StateEventType.ActiveSlice, activeSlice);
61
+ }
62
+ get activeSlice() {
63
+ return this._activeSlice;
64
+ }
65
+ set message(message) {
66
+ this._message = message;
67
+ this.emit(types.StateEventType.Message, message);
68
+ }
69
+ get message() {
70
+ return this._message;
71
+ }
72
+ async init() {
73
+ window.addEventListener("mousemove", (event) => {
74
+ this._mouse = { x: event.clientX, y: event.clientY };
75
+ });
76
+ }
77
+ setSliceZone(slices) {
78
+ this.slices = slices;
79
+ }
80
+ }
81
+ exports.State = State;
82
+ //# sourceMappingURL=State.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"State.cjs","sources":["../../../src/kit/State.ts"],"sourcesContent":["import type { SharedSlice, SliceZone } from \"@prismicio/client\";\n\nimport { EventEmitter } from \"../lib/EventEmitter\";\nimport { __PRODUCTION__ } from \"../lib/__PRODUCTION__\";\nimport { throttle } from \"../lib/throttle\";\n\nimport type { ActiveSlice } from \"../types\";\nimport { StateEventType, StateEvents } from \"./types\";\n\nimport { getActiveSliceDOM, getSliceZoneDOM } from \"./domHelpers\";\nimport { getDefaultSlices } from \"./getDefault\";\n\ntype StateConstructorArgs = {\n\tslices?: SliceZone;\n};\n\nexport class State extends EventEmitter<StateEvents> {\n\tprivate _slices: SliceZone;\n\tpublic set slices(slices: SliceZone) {\n\t\tthis._slices = slices;\n\t\t// Clean up message\n\t\tthis.message = \"\";\n\t\t// Dispatch event\n\t\tthis.emit(StateEventType.Slices, slices);\n\t}\n\tpublic get slices(): SliceZone {\n\t\treturn this._slices;\n\t}\n\n\tprivate _activeSlice: ActiveSlice | null;\n\tpublic set activeSlice(activeSlice: ActiveSlice | null) {\n\t\tthis._activeSlice = activeSlice;\n\t\tthis.emit(StateEventType.ActiveSlice, activeSlice);\n\t}\n\tpublic get activeSlice(): ActiveSlice | null {\n\t\treturn this._activeSlice;\n\t}\n\n\tprivate _message: string;\n\tpublic set message(message: string) {\n\t\tthis._message = message;\n\t\tthis.emit(StateEventType.Message, message);\n\t}\n\tpublic get message(): string {\n\t\treturn this._message;\n\t}\n\n\tprivate _mouse: { x: number; y: number };\n\n\tconstructor(args?: StateConstructorArgs) {\n\t\tsuper();\n\n\t\tthis._slices = args?.slices || getDefaultSlices();\n\t\tthis._activeSlice = null;\n\t\tthis._message = \"\";\n\n\t\t// StateManager needs to keep track of mouse position for the active slice\n\t\tthis._mouse = { x: 0, y: 0 };\n\t}\n\n\tasync init(): Promise<void> {\n\t\t// Init listener\n\t\twindow.addEventListener(\"mousemove\", (event) => {\n\t\t\tthis._mouse = { x: event.clientX, y: event.clientY };\n\t\t});\n\t}\n\n\tprivate _setActiveSlice = (): void => {\n\t\t// There can't be an active slice if there's no slices displayed\n\t\tif (this.slices.length === 0) {\n\t\t\tthis.activeSlice = null;\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst $sliceZone = getSliceZoneDOM(this.slices.length);\n\n\t\t// SliceZone has not been found, therefore active slice cannot be found\n\t\tif (!$sliceZone) {\n\t\t\tthis.activeSlice = null;\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst $activeSlice = getActiveSliceDOM($sliceZone, this._mouse);\n\n\t\t// Active slice has not been found\n\t\tif (!$activeSlice) {\n\t\t\tthis.activeSlice = null;\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst activeSliceIndex = Array.prototype.indexOf.call(\n\t\t\t$sliceZone.children,\n\t\t\t$activeSlice,\n\t\t);\n\n\t\t// Active slice has been found\n\t\tthis.activeSlice = {\n\t\t\trect: $activeSlice.getBoundingClientRect(),\n\t\t\tsliceID: this.slices[activeSliceIndex].slice_type,\n\t\t\tvariationID: (this.slices[activeSliceIndex] as SharedSlice).variation,\n\t\t\tindex: activeSliceIndex,\n\t\t};\n\t};\n\tsetActiveSlice = throttle(this._setActiveSlice, 16);\n\n\tsetSliceZone(slices: SliceZone): void {\n\t\t// Set slices\n\t\tthis.slices = slices;\n\t}\n}\n"],"names":["EventEmitter","getSliceZoneDOM","getActiveSliceDOM","throttle","getDefaultSlices","StateEventType"],"mappings":";;;;;;;;;;;;;AAgBM,MAAO,cAAcA,aAAAA,aAAyB;AAAA,EAiCnD,YAAY,MAA2B;;AAhC/B;AAYA;AASA;AASA;AAoBA,2CAAkB,MAAW;AAEhC,UAAA,KAAK,OAAO,WAAW,GAAG;AAC7B,aAAK,cAAc;AAEnB;AAAA,MACA;AAED,YAAM,aAAaC,WAAA,gBAAgB,KAAK,OAAO,MAAM;AAGrD,UAAI,CAAC,YAAY;AAChB,aAAK,cAAc;AAEnB;AAAA,MACA;AAED,YAAM,eAAeC,WAAA,kBAAkB,YAAY,KAAK,MAAM;AAG9D,UAAI,CAAC,cAAc;AAClB,aAAK,cAAc;AAEnB;AAAA,MACA;AAED,YAAM,mBAAmB,MAAM,UAAU,QAAQ,KAChD,WAAW,UACX,YAAY;AAIb,WAAK,cAAc;AAAA,QAClB,MAAM,aAAa,sBAAuB;AAAA,QAC1C,SAAS,KAAK,OAAO,gBAAgB,EAAE;AAAA,QACvC,aAAc,KAAK,OAAO,gBAAgB,EAAkB;AAAA,QAC5D,OAAO;AAAA,MAAA;AAAA;AAGT,0CAAiBC,SAAAA,SAAS,KAAK,iBAAiB,EAAE;AAtD5C,SAAA,WAAU,6BAAM,WAAUC,WAAgB,iBAAA;AAC/C,SAAK,eAAe;AACpB,SAAK,WAAW;AAGhB,SAAK,SAAS,EAAE,GAAG,GAAG,GAAG;EAC1B;AAAA,EAxCA,IAAW,OAAO,QAAiB;AAClC,SAAK,UAAU;AAEf,SAAK,UAAU;AAEV,SAAA,KAAKC,MAAAA,eAAe,QAAQ,MAAM;AAAA,EACxC;AAAA,EACA,IAAW,SAAM;AAChB,WAAO,KAAK;AAAA,EACb;AAAA,EAGA,IAAW,YAAY,aAA+B;AACrD,SAAK,eAAe;AACf,SAAA,KAAKA,MAAAA,eAAe,aAAa,WAAW;AAAA,EAClD;AAAA,EACA,IAAW,cAAW;AACrB,WAAO,KAAK;AAAA,EACb;AAAA,EAGA,IAAW,QAAQ,SAAe;AACjC,SAAK,WAAW;AACX,SAAA,KAAKA,MAAAA,eAAe,SAAS,OAAO;AAAA,EAC1C;AAAA,EACA,IAAW,UAAO;AACjB,WAAO,KAAK;AAAA,EACb;AAAA,EAeA,MAAM,OAAI;AAEF,WAAA,iBAAiB,aAAa,CAAC,UAAS;AAC9C,WAAK,SAAS,EAAE,GAAG,MAAM,SAAS,GAAG,MAAM;KAC3C;AAAA,EACF;AAAA,EA2CA,aAAa,QAAiB;AAE7B,SAAK,SAAS;AAAA,EACf;AACA;;"}
@@ -0,0 +1,25 @@
1
+ import type { SliceZone } from "@prismicio/client";
2
+ import { EventEmitter } from "../lib/EventEmitter";
3
+ import type { ActiveSlice } from "../types";
4
+ import { StateEvents } from "./types";
5
+ type StateConstructorArgs = {
6
+ slices?: SliceZone;
7
+ };
8
+ export declare class State extends EventEmitter<StateEvents> {
9
+ private _slices;
10
+ set slices(slices: SliceZone);
11
+ get slices(): SliceZone;
12
+ private _activeSlice;
13
+ set activeSlice(activeSlice: ActiveSlice | null);
14
+ get activeSlice(): ActiveSlice | null;
15
+ private _message;
16
+ set message(message: string);
17
+ get message(): string;
18
+ private _mouse;
19
+ constructor(args?: StateConstructorArgs);
20
+ init(): Promise<void>;
21
+ private _setActiveSlice;
22
+ setActiveSlice: () => void;
23
+ setSliceZone(slices: SliceZone): void;
24
+ }
25
+ export {};