@adobe/alloy 2.9.0-beta.0 → 2.10.0-beta.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.
@@ -2,8 +2,6 @@
2
2
 
3
3
  exports.default = void 0;
4
4
 
5
- var _utils = require("../../utils");
6
-
7
5
  var _injectProcessDestinations = require("./injectProcessDestinations");
8
6
 
9
7
  var _injectProcessResponse = require("./injectProcessResponse");
@@ -20,9 +18,10 @@ OF ANY KIND, either express or implied. See the License for the specific languag
20
18
  governing permissions and limitations under the License.
21
19
  */
22
20
  var createAudiences = function createAudiences(_ref) {
23
- var logger = _ref.logger;
21
+ var logger = _ref.logger,
22
+ fireReferrerHideableImage = _ref.fireReferrerHideableImage;
24
23
  var processDestinations = (0, _injectProcessDestinations.default)({
25
- fireReferrerHideableImage: _utils.fireReferrerHideableImage,
24
+ fireReferrerHideableImage: fireReferrerHideableImage,
26
25
  logger: logger
27
26
  });
28
27
  var processResponse = (0, _injectProcessResponse.default)({
@@ -53,6 +53,7 @@ var createIdentity = function createIdentity(_ref) {
53
53
  var config = _ref.config,
54
54
  logger = _ref.logger,
55
55
  consent = _ref.consent,
56
+ fireReferrerHideableImage = _ref.fireReferrerHideableImage,
56
57
  sendEdgeNetworkRequest = _ref.sendEdgeNetworkRequest;
57
58
  var orgId = config.orgId,
58
59
  thirdPartyCookiesEnabled = config.thirdPartyCookiesEnabled;
@@ -82,8 +83,8 @@ var createIdentity = function createIdentity(_ref) {
82
83
  addEcidToPayload: _addEcidToPayload.default
83
84
  });
84
85
  var awaitIdentityCookie = (0, _injectAwaitIdentityCookie.default)({
85
- orgId: orgId,
86
- doesIdentityCookieExist: doesIdentityCookieExist
86
+ doesIdentityCookieExist: doesIdentityCookieExist,
87
+ orgId: orgId
87
88
  });
88
89
  var ensureSingleIdentity = (0, _injectEnsureSingleIdentity.default)({
89
90
  doesIdentityCookieExist: doesIdentityCookieExist,
@@ -93,7 +94,7 @@ var createIdentity = function createIdentity(_ref) {
93
94
  logger: logger
94
95
  });
95
96
  var processIdSyncs = (0, _injectProcessIdSyncs.default)({
96
- fireReferrerHideableImage: _utils.fireReferrerHideableImage,
97
+ fireReferrerHideableImage: fireReferrerHideableImage,
97
98
  logger: logger
98
99
  });
99
100
  var handleResponseForIdSyncs = (0, _injectHandleResponseForIdSyncs.default)({
@@ -14,8 +14,8 @@ OF ANY KIND, either express or implied. See the License for the specific languag
14
14
  governing permissions and limitations under the License.
15
15
  */
16
16
  var _default = function _default(_ref) {
17
- var orgId = _ref.orgId,
18
- doesIdentityCookieExist = _ref.doesIdentityCookieExist;
17
+ var doesIdentityCookieExist = _ref.doesIdentityCookieExist,
18
+ orgId = _ref.orgId;
19
19
 
20
20
  /**
21
21
  * Returns a promise that will be resolved once an identity cookie exists.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- exports.REDIRECT_ITEM = exports.JSON_CONTENT_ITEM = exports.HTML_CONTENT_ITEM = exports.DOM_ACTION = exports.DEFAULT_CONTENT_ITEM = void 0;
3
+ exports.REDIRECT_ITEM = exports.MEASUREMENT_SCHEMA = exports.JSON_CONTENT_ITEM = exports.HTML_CONTENT_ITEM = exports.DOM_ACTION = exports.DEFAULT_CONTENT_ITEM = void 0;
4
4
 
5
5
  /*
6
6
  Copyright 2019 Adobe. All rights reserved.
@@ -22,4 +22,6 @@ exports.HTML_CONTENT_ITEM = HTML_CONTENT_ITEM;
22
22
  var JSON_CONTENT_ITEM = "https://ns.adobe.com/personalization/json-content-item";
23
23
  exports.JSON_CONTENT_ITEM = JSON_CONTENT_ITEM;
24
24
  var REDIRECT_ITEM = "https://ns.adobe.com/personalization/redirect-item";
25
- exports.REDIRECT_ITEM = REDIRECT_ITEM;
25
+ exports.REDIRECT_ITEM = REDIRECT_ITEM;
26
+ var MEASUREMENT_SCHEMA = "https://ns.adobe.com/personalization/measurement";
27
+ exports.MEASUREMENT_SCHEMA = MEASUREMENT_SCHEMA;
@@ -10,6 +10,14 @@ var _scopeType = require("./constants/scopeType");
10
10
 
11
11
  var _scope = require("./constants/scope");
12
12
 
13
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
14
+
15
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
16
+
17
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
18
+
19
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
20
+
13
21
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
14
22
 
15
23
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -44,6 +52,23 @@ var createDecision = function createDecision(decision, items) {
44
52
  };
45
53
  };
46
54
 
55
+ var splitMergedMetricDecisions = function splitMergedMetricDecisions(decisions) {
56
+ var matchedDecisions = decisions.filter(function (decision) {
57
+ var _decision$items = decision.items,
58
+ items = _decision$items === void 0 ? [] : _decision$items;
59
+ return items.some(function (item) {
60
+ return item.schema === _schema.MEASUREMENT_SCHEMA;
61
+ });
62
+ });
63
+ var unmatchedDecisions = decisions.filter(function (decision) {
64
+ return !(0, _utils.includes)(matchedDecisions, decision);
65
+ });
66
+ return {
67
+ matchedDecisions: matchedDecisions,
68
+ unmatchedDecisions: unmatchedDecisions
69
+ };
70
+ };
71
+
47
72
  var splitDecisions = function splitDecisions(decisions) {
48
73
  for (var _len = arguments.length, schemas = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
49
74
  schemas[_key - 1] = arguments[_key];
@@ -52,8 +77,8 @@ var splitDecisions = function splitDecisions(decisions) {
52
77
  var matchedDecisions = [];
53
78
  var unmatchedDecisions = [];
54
79
  decisions.forEach(function (decision) {
55
- var _decision$items = decision.items,
56
- items = _decision$items === void 0 ? [] : _decision$items;
80
+ var _decision$items2 = decision.items,
81
+ items = _decision$items2 === void 0 ? [] : _decision$items2;
57
82
 
58
83
  var _splitItems = splitItems(items, schemas),
59
84
  _splitItems2 = _slicedToArray(_splitItems, 2),
@@ -111,8 +136,12 @@ var extractDecisionsByScope = function extractDecisionsByScope(decisions) {
111
136
  };
112
137
 
113
138
  var groupDecisions = function groupDecisions(unprocessedDecisions) {
114
- var decisionsGroupedByRedirectItemSchema = splitDecisions(unprocessedDecisions, _schema.REDIRECT_ITEM);
115
- var decisionsGroupedByRenderableSchemas = splitDecisions(decisionsGroupedByRedirectItemSchema.unmatchedDecisions, _schema.DOM_ACTION, _schema.DEFAULT_CONTENT_ITEM);
139
+ // split redirect decisions
140
+ var decisionsGroupedByRedirectItemSchema = splitDecisions(unprocessedDecisions, _schema.REDIRECT_ITEM); // split merged measurement decisions
141
+
142
+ var mergedMetricDecisions = splitMergedMetricDecisions(decisionsGroupedByRedirectItemSchema.unmatchedDecisions); // split renderable decisions
143
+
144
+ var decisionsGroupedByRenderableSchemas = splitDecisions(mergedMetricDecisions.unmatchedDecisions, _schema.DOM_ACTION, _schema.DEFAULT_CONTENT_ITEM); // group renderable decisions by scope
116
145
 
117
146
  var _extractDecisionsBySc = extractDecisionsByScope(decisionsGroupedByRenderableSchemas.matchedDecisions),
118
147
  pageWideScopeDecisions = _extractDecisionsBySc.pageWideScopeDecisions,
@@ -123,7 +152,7 @@ var groupDecisions = function groupDecisions(unprocessedDecisions) {
123
152
  redirectDecisions: decisionsGroupedByRedirectItemSchema.matchedDecisions,
124
153
  pageWideScopeDecisions: pageWideScopeDecisions,
125
154
  viewDecisions: viewScopeDecisions,
126
- nonAutoRenderableDecisions: decisionsGroupedByRenderableSchemas.unmatchedDecisions.concat(nonPageWideScopeDecisions)
155
+ nonAutoRenderableDecisions: [].concat(_toConsumableArray(mergedMetricDecisions.matchedDecisions), _toConsumableArray(decisionsGroupedByRenderableSchemas.unmatchedDecisions), _toConsumableArray(nonPageWideScopeDecisions))
127
156
  };
128
157
  };
129
158
 
@@ -15,5 +15,5 @@ governing permissions and limitations under the License.
15
15
  */
16
16
  // The __VERSION__ keyword will be replace at alloy build time with the package.json version.
17
17
  // see babel-plugin-version
18
- var _default = "2.9.0-beta.0";
18
+ var _default = "2.10.0-beta.1";
19
19
  exports.default = _default;
@@ -92,6 +92,7 @@ var sendFetchRequest = (0, _utils.isFunction)(fetch) ? (0, _injectSendFetchReque
92
92
  }) : (0, _injectSendXhrRequest.default)({
93
93
  XMLHttpRequest: XMLHttpRequest
94
94
  });
95
+ var fireReferrerHideableImage = (0, _utils.injectFireReferrerHideableImage)();
95
96
 
96
97
  var createExecuteCommand = function createExecuteCommand(_ref) {
97
98
  var instanceName = _ref.instanceName,
@@ -180,6 +181,7 @@ var createExecuteCommand = function createExecuteCommand(_ref) {
180
181
  config: config,
181
182
  consent: consent,
182
183
  eventManager: eventManager,
184
+ fireReferrerHideableImage: fireReferrerHideableImage,
183
185
  logger: componentLogger,
184
186
  lifecycle: lifecycle,
185
187
  sendEdgeNetworkRequest: sendEdgeNetworkRequest,
@@ -90,12 +90,6 @@ Object.defineProperty(exports, "fireImage", {
90
90
  return _fireImage.default;
91
91
  }
92
92
  });
93
- Object.defineProperty(exports, "fireReferrerHideableImage", {
94
- enumerable: true,
95
- get: function get() {
96
- return _fireReferrerHideableImage.default;
97
- }
98
- });
99
93
  Object.defineProperty(exports, "flatMap", {
100
94
  enumerable: true,
101
95
  get: function get() {
@@ -138,6 +132,12 @@ Object.defineProperty(exports, "injectDoesIdentityCookieExist", {
138
132
  return _injectDoesIdentityCookieExist.default;
139
133
  }
140
134
  });
135
+ Object.defineProperty(exports, "injectFireReferrerHideableImage", {
136
+ enumerable: true,
137
+ get: function get() {
138
+ return _injectFireReferrerHideableImage.default;
139
+ }
140
+ });
141
141
  Object.defineProperty(exports, "injectStorage", {
142
142
  enumerable: true,
143
143
  get: function get() {
@@ -337,7 +337,7 @@ var _find = require("./find");
337
337
 
338
338
  var _fireImage = require("./fireImage");
339
339
 
340
- var _fireReferrerHideableImage = require("./fireReferrerHideableImage");
340
+ var _injectFireReferrerHideableImage = require("./injectFireReferrerHideableImage");
341
341
 
342
342
  var _flatMap = require("./flatMap");
343
343
 
@@ -20,7 +20,6 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
20
20
 
21
21
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
22
22
 
23
- var fireOnPage = _fireImage.default;
24
23
  var IFRAME_ATTRS = {
25
24
  name: "Adobe Alloy"
26
25
  };
@@ -32,37 +31,54 @@ var IFRAME_PROPS = {
32
31
  }
33
32
  };
34
33
 
35
- var _default = function _default(request) {
34
+ var _default = function _default() {
35
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
36
+ _ref$appendNode = _ref.appendNode,
37
+ appendNode = _ref$appendNode === void 0 ? _dom.appendNode : _ref$appendNode,
38
+ _ref$awaitSelector = _ref.awaitSelector,
39
+ awaitSelector = _ref$awaitSelector === void 0 ? _dom.awaitSelector : _ref$awaitSelector,
40
+ _ref$createNode = _ref.createNode,
41
+ createNode = _ref$createNode === void 0 ? _dom.createNode : _ref$createNode,
42
+ _ref$fireImage = _ref.fireImage,
43
+ fireImage = _ref$fireImage === void 0 ? _fireImage.default : _ref$fireImage;
44
+
45
+ var fireOnPage = fireImage;
46
+ var hiddenIframe;
47
+
36
48
  var createIframe = function createIframe() {
37
- return (0, _dom.awaitSelector)(_tagName.BODY).then(function (_ref) {
38
- var _ref2 = _slicedToArray(_ref, 1),
39
- body = _ref2[0];
49
+ if (hiddenIframe) {
50
+ return Promise.resolve(hiddenIframe);
51
+ }
52
+
53
+ return awaitSelector(_tagName.BODY).then(function (_ref2) {
54
+ var _ref3 = _slicedToArray(_ref2, 1),
55
+ body = _ref3[0];
40
56
 
41
- var iframe = (0, _dom.createNode)(_tagName.IFRAME, IFRAME_ATTRS, IFRAME_PROPS);
42
- return (0, _dom.appendNode)(body, iframe);
57
+ hiddenIframe = createNode(_tagName.IFRAME, IFRAME_ATTRS, IFRAME_PROPS);
58
+ return appendNode(body, hiddenIframe);
43
59
  });
44
60
  };
45
61
 
46
- var fireInIframe = function fireInIframe(_ref3) {
47
- var src = _ref3.src;
62
+ var fireInIframe = function fireInIframe(_ref4) {
63
+ var src = _ref4.src;
48
64
  return createIframe().then(function (iframe) {
49
65
  var currentDocument = iframe.contentWindow.document;
50
- return (0, _fireImage.default)({
66
+ return fireImage({
51
67
  src: src,
52
68
  currentDocument: currentDocument
53
- }).then(function () {
54
- (0, _dom.removeNode)(iframe);
55
69
  });
56
70
  });
57
71
  };
58
72
 
59
- var hideReferrer = request.hideReferrer,
60
- url = request.url;
61
- return hideReferrer ? fireInIframe({
62
- src: url
63
- }) : fireOnPage({
64
- src: url
65
- });
73
+ return function (request) {
74
+ var hideReferrer = request.hideReferrer,
75
+ url = request.url;
76
+ return hideReferrer ? fireInIframe({
77
+ src: url
78
+ }) : fireOnPage({
79
+ src: url
80
+ });
81
+ };
66
82
  };
67
83
 
68
84
  exports.default = _default;
@@ -9,12 +9,12 @@ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTA
9
9
  OF ANY KIND, either express or implied. See the License for the specific language
10
10
  governing permissions and limitations under the License.
11
11
  */
12
- import { fireReferrerHideableImage } from "../../utils";
13
12
  import injectProcessDestinations from "./injectProcessDestinations";
14
13
  import injectProcessResponse from "./injectProcessResponse";
15
14
 
16
15
  const createAudiences = ({
17
- logger
16
+ logger,
17
+ fireReferrerHideableImage
18
18
  }) => {
19
19
  const processDestinations = injectProcessDestinations({
20
20
  fireReferrerHideableImage,
@@ -9,7 +9,7 @@ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTA
9
9
  OF ANY KIND, either express or implied. See the License for the specific language
10
10
  governing permissions and limitations under the License.
11
11
  */
12
- import { fireReferrerHideableImage, areThirdPartyCookiesSupportedByDefault, injectDoesIdentityCookieExist } from "../../utils";
12
+ import { areThirdPartyCookiesSupportedByDefault, injectDoesIdentityCookieExist } from "../../utils";
13
13
  import injectProcessIdSyncs from "./injectProcessIdSyncs";
14
14
  import configValidators from "./configValidators";
15
15
  import createComponent from "./createComponent";
@@ -32,6 +32,7 @@ const createIdentity = ({
32
32
  config,
33
33
  logger,
34
34
  consent,
35
+ fireReferrerHideableImage,
35
36
  sendEdgeNetworkRequest
36
37
  }) => {
37
38
  const {
@@ -64,8 +65,8 @@ const createIdentity = ({
64
65
  addEcidToPayload
65
66
  });
66
67
  const awaitIdentityCookie = injectAwaitIdentityCookie({
67
- orgId,
68
- doesIdentityCookieExist
68
+ doesIdentityCookieExist,
69
+ orgId
69
70
  });
70
71
  const ensureSingleIdentity = injectEnsureSingleIdentity({
71
72
  doesIdentityCookieExist,
@@ -10,8 +10,8 @@ OF ANY KIND, either express or implied. See the License for the specific languag
10
10
  governing permissions and limitations under the License.
11
11
  */
12
12
  export default (({
13
- orgId,
14
- doesIdentityCookieExist
13
+ doesIdentityCookieExist,
14
+ orgId
15
15
  }) => {
16
16
  /**
17
17
  * Returns a promise that will be resolved once an identity cookie exists.
@@ -13,4 +13,5 @@ export const DEFAULT_CONTENT_ITEM = "https://ns.adobe.com/personalization/defaul
13
13
  export const DOM_ACTION = "https://ns.adobe.com/personalization/dom-action";
14
14
  export const HTML_CONTENT_ITEM = "https://ns.adobe.com/personalization/html-content-item";
15
15
  export const JSON_CONTENT_ITEM = "https://ns.adobe.com/personalization/json-content-item";
16
- export const REDIRECT_ITEM = "https://ns.adobe.com/personalization/redirect-item";
16
+ export const REDIRECT_ITEM = "https://ns.adobe.com/personalization/redirect-item";
17
+ export const MEASUREMENT_SCHEMA = "https://ns.adobe.com/personalization/measurement";
@@ -10,7 +10,7 @@ OF ANY KIND, either express or implied. See the License for the specific languag
10
10
  governing permissions and limitations under the License.
11
11
  */
12
12
  import { isNonEmptyArray, includes } from "../../utils";
13
- import { DOM_ACTION, REDIRECT_ITEM, DEFAULT_CONTENT_ITEM } from "./constants/schema";
13
+ import { DOM_ACTION, REDIRECT_ITEM, DEFAULT_CONTENT_ITEM, MEASUREMENT_SCHEMA } from "./constants/schema";
14
14
  import { VIEW_SCOPE_TYPE } from "./constants/scopeType";
15
15
  import PAGE_WIDE_SCOPE from "./constants/scope";
16
16
 
@@ -36,6 +36,20 @@ const createDecision = (decision, items) => {
36
36
  };
37
37
  };
38
38
 
39
+ const splitMergedMetricDecisions = decisions => {
40
+ const matchedDecisions = decisions.filter(decision => {
41
+ const {
42
+ items = []
43
+ } = decision;
44
+ return items.some(item => item.schema === MEASUREMENT_SCHEMA);
45
+ });
46
+ const unmatchedDecisions = decisions.filter(decision => !includes(matchedDecisions, decision));
47
+ return {
48
+ matchedDecisions,
49
+ unmatchedDecisions
50
+ };
51
+ };
52
+
39
53
  const splitDecisions = (decisions, ...schemas) => {
40
54
  const matchedDecisions = [];
41
55
  const unmatchedDecisions = [];
@@ -94,8 +108,13 @@ const extractDecisionsByScope = decisions => {
94
108
  };
95
109
 
96
110
  const groupDecisions = unprocessedDecisions => {
97
- const decisionsGroupedByRedirectItemSchema = splitDecisions(unprocessedDecisions, REDIRECT_ITEM);
98
- const decisionsGroupedByRenderableSchemas = splitDecisions(decisionsGroupedByRedirectItemSchema.unmatchedDecisions, DOM_ACTION, DEFAULT_CONTENT_ITEM);
111
+ // split redirect decisions
112
+ const decisionsGroupedByRedirectItemSchema = splitDecisions(unprocessedDecisions, REDIRECT_ITEM); // split merged measurement decisions
113
+
114
+ const mergedMetricDecisions = splitMergedMetricDecisions(decisionsGroupedByRedirectItemSchema.unmatchedDecisions); // split renderable decisions
115
+
116
+ const decisionsGroupedByRenderableSchemas = splitDecisions(mergedMetricDecisions.unmatchedDecisions, DOM_ACTION, DEFAULT_CONTENT_ITEM); // group renderable decisions by scope
117
+
99
118
  const {
100
119
  pageWideScopeDecisions,
101
120
  nonPageWideScopeDecisions,
@@ -105,7 +124,7 @@ const groupDecisions = unprocessedDecisions => {
105
124
  redirectDecisions: decisionsGroupedByRedirectItemSchema.matchedDecisions,
106
125
  pageWideScopeDecisions,
107
126
  viewDecisions: viewScopeDecisions,
108
- nonAutoRenderableDecisions: decisionsGroupedByRenderableSchemas.unmatchedDecisions.concat(nonPageWideScopeDecisions)
127
+ nonAutoRenderableDecisions: [...mergedMetricDecisions.matchedDecisions, ...decisionsGroupedByRenderableSchemas.unmatchedDecisions, ...nonPageWideScopeDecisions]
109
128
  };
110
129
  };
111
130
 
@@ -11,4 +11,4 @@ governing permissions and limitations under the License.
11
11
  */
12
12
  // The __VERSION__ keyword will be replace at alloy build time with the package.json version.
13
13
  // see babel-plugin-version
14
- export default "2.9.0-beta.0";
14
+ export default "2.10.0-beta.1";
@@ -10,7 +10,7 @@ OF ANY KIND, either express or implied. See the License for the specific languag
10
10
  governing permissions and limitations under the License.
11
11
  */
12
12
  import createInstanceFunction from "./createInstanceFunction";
13
- import { getApexDomain, injectStorage, cookieJar, isFunction } from "../utils";
13
+ import { getApexDomain, injectStorage, cookieJar, isFunction, injectFireReferrerHideableImage } from "../utils";
14
14
  import createLogController from "./createLogController";
15
15
  import createLifecycle from "./createLifecycle";
16
16
  import createComponentRegistry from "./createComponentRegistry";
@@ -57,6 +57,7 @@ const sendFetchRequest = isFunction(fetch) ? injectSendFetchRequest({
57
57
  }) : injectSendXhrRequest({
58
58
  XMLHttpRequest
59
59
  });
60
+ const fireReferrerHideableImage = injectFireReferrerHideableImage();
60
61
  export const createExecuteCommand = ({
61
62
  instanceName,
62
63
  logController: {
@@ -147,6 +148,7 @@ export const createExecuteCommand = ({
147
148
  config,
148
149
  consent,
149
150
  eventManager,
151
+ fireReferrerHideableImage,
150
152
  logger: componentLogger,
151
153
  lifecycle,
152
154
  sendEdgeNetworkRequest,
@@ -25,7 +25,7 @@ export { default as deepAssign } from "./deepAssign";
25
25
  export { default as endsWith } from "./endsWith";
26
26
  export { default as find } from "./find";
27
27
  export { default as fireImage } from "./fireImage";
28
- export { default as fireReferrerHideableImage } from "./fireReferrerHideableImage";
28
+ export { default as injectFireReferrerHideableImage } from "./injectFireReferrerHideableImage";
29
29
  export { default as flatMap } from "./flatMap";
30
30
  export { default as getApexDomain } from "./getApexDomain";
31
31
  export { default as getLastArrayItems } from "./getLastArrayItems";
@@ -9,10 +9,9 @@ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTA
9
9
  OF ANY KIND, either express or implied. See the License for the specific language
10
10
  governing permissions and limitations under the License.
11
11
  */
12
- import fireImage from "./fireImage";
13
- import { appendNode, awaitSelector, createNode, removeNode } from "./dom";
12
+ import fireImageInDocument from "./fireImage";
13
+ import { appendNode as appendNodeToDocument, awaitSelector as awaitSelectorInDocument, createNode as createNodeInDocument } from "./dom";
14
14
  import { BODY, IFRAME } from "../constants/tagName";
15
- const fireOnPage = fireImage;
16
15
  const IFRAME_ATTRS = {
17
16
  name: "Adobe Alloy"
18
17
  };
@@ -23,11 +22,23 @@ const IFRAME_PROPS = {
23
22
  height: 0
24
23
  }
25
24
  };
26
- export default (request => {
25
+ export default (({
26
+ appendNode = appendNodeToDocument,
27
+ awaitSelector = awaitSelectorInDocument,
28
+ createNode = createNodeInDocument,
29
+ fireImage = fireImageInDocument
30
+ } = {}) => {
31
+ const fireOnPage = fireImage;
32
+ let hiddenIframe;
33
+
27
34
  const createIframe = () => {
35
+ if (hiddenIframe) {
36
+ return Promise.resolve(hiddenIframe);
37
+ }
38
+
28
39
  return awaitSelector(BODY).then(([body]) => {
29
- const iframe = createNode(IFRAME, IFRAME_ATTRS, IFRAME_PROPS);
30
- return appendNode(body, iframe);
40
+ hiddenIframe = createNode(IFRAME, IFRAME_ATTRS, IFRAME_PROPS);
41
+ return appendNode(body, hiddenIframe);
31
42
  });
32
43
  };
33
44
 
@@ -39,19 +50,19 @@ export default (request => {
39
50
  return fireImage({
40
51
  src,
41
52
  currentDocument
42
- }).then(() => {
43
- removeNode(iframe);
44
53
  });
45
54
  });
46
55
  };
47
56
 
48
- const {
49
- hideReferrer,
50
- url
51
- } = request;
52
- return hideReferrer ? fireInIframe({
53
- src: url
54
- }) : fireOnPage({
55
- src: url
56
- });
57
+ return request => {
58
+ const {
59
+ hideReferrer,
60
+ url
61
+ } = request;
62
+ return hideReferrer ? fireInIframe({
63
+ src: url
64
+ }) : fireOnPage({
65
+ src: url
66
+ });
67
+ };
57
68
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adobe/alloy",
3
- "version": "2.9.0-beta.0",
3
+ "version": "2.10.0-beta.1",
4
4
  "description": "Adobe Experience Platform Web SDK",
5
5
  "main": "libEs5/index.js",
6
6
  "module": "libEs6/index.js",
@@ -64,7 +64,7 @@
64
64
  "uuid": "^3.3.2"
65
65
  },
66
66
  "devDependencies": {
67
- "@adobe/alloy": "^2.9.0-alpha.6",
67
+ "@adobe/alloy": "^2.10.0-beta.0",
68
68
  "@babel/cli": "^7.12.8",
69
69
  "@babel/core": "^7.2.2",
70
70
  "@babel/plugin-proposal-object-rest-spread": "^7.3.2",