@adhese/sdk 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @adhese/sdk
2
2
 
3
+ ## 1.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - d4cedb4: Fix ad data getting set when the data is passed via the render function
8
+
3
9
  ## 1.0.0
4
10
 
5
11
  ### Major Changes
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const name = "@adhese/sdk";
4
- const version = "1.0.0";
4
+ const version = "1.0.1";
5
5
  exports.name = name;
6
6
  exports.version = version;
7
7
  //# sourceMappingURL=package.json.cjs.map
@@ -162,7 +162,6 @@ function createSlot(slotOptions) {
162
162
  format,
163
163
  containingElement
164
164
  });
165
- data.value = renderAd;
166
165
  status.value = "rendered";
167
166
  runOnRender(renderAd);
168
167
  return element.value;
@@ -1 +1 @@
1
- {"version":3,"file":"slot.cjs","sources":["../../../src/slot/slot.ts"],"sourcesContent":["import {\n type Ref,\n type RenderOptions,\n type UnwrapRef,\n addTrackingPixel,\n computed,\n doNothing,\n effectScope,\n generateName,\n isDeepEqual,\n omit,\n reactive,\n ref,\n renderIframe,\n renderInline,\n uniqueId,\n waitForDomLoad,\n watch,\n} from '@adhese/sdk-shared';\nimport type { AdheseAd } from '@adhese/sdk';\nimport { requestAd as extRequestAd } from '../requestAds/requestAds';\nimport { logger } from '../logger/logger';\nimport { useQueryDetector } from '../queryDetector/queryDetector';\nimport type { AdheseSlot, AdheseSlotContext, AdheseSlotOptions, RenderMode } from './slot.types';\nimport {\n useDomLoaded,\n useRenderIntersectionObserver,\n useSlotHooks,\n useViewabilityObserver,\n} from './slot.composables';\n\nconst renderFunctions: Record<RenderMode, (ad: RenderOptions, element: HTMLElement) => void> = {\n iframe: renderIframe,\n inline: renderInline,\n none: doNothing,\n};\n\nconst defaultOptions = {\n renderMode: 'iframe',\n type: 'normal',\n} satisfies Partial<AdheseSlotOptions>;\n\n/**\n * Create a new slot instance. This slot instance can be used to request and render ads.\n *\n * @param slotOptions {AdheseSlotOptions} The options to create the slot with.\n *\n * @return AdheseSlot The created slot instance.\n */\nexport function createSlot(slotOptions: AdheseSlotOptions): AdheseSlot {\n const scope = effectScope();\n\n return scope.run(() => {\n const slotContext = ref<AdheseSlotContext | null>(null);\n const options = slotOptions.context.hooks.runOnSlotCreate({\n ...defaultOptions,\n ...slotOptions,\n });\n\n const {\n containingElement,\n slot,\n context,\n pluginOptions,\n renderMode = 'iframe',\n type = 'normal',\n } = options;\n\n const id = uniqueId();\n const {\n runOnBeforeRender,\n runOnRender,\n runOnBeforeRequest,\n runOnRequest,\n runOnInit,\n runOnDispose,\n ...hooks\n } = useSlotHooks(options, slotContext);\n\n const isDisposed = ref(false);\n const parameters = reactive(new Map(Object.entries(options.parameters ?? {})));\n\n const [device, disposeQueryDetector] = useQueryDetector(context, typeof options.format === 'string'\n ? {\n [options.format]: '(min-width: 0px)',\n }\n : Object.fromEntries(options.format.map(item => [item.format, item.query])));\n\n const format = computed(() => typeof options.format === 'string' ? options.format : device.value);\n\n const data = ref<AdheseAd | null>(null) as Ref<AdheseAd | null>;\n const originalData = ref(data.value) as Ref<AdheseAd | null>;\n const name = computed(() => generateName(options.context.location, format.value, options.slot));\n\n watch(name, async (newName, oldName) => {\n if (newName === oldName)\n return;\n\n const newAd = await slotContext.value?.request();\n\n if (!newAd)\n return;\n\n slotContext.value?.cleanElement();\n\n data.value = newAd;\n originalData.value = newAd;\n });\n\n const isDomLoaded = useDomLoaded(context);\n\n const element = computed(() => {\n if (!(typeof options.containingElement === 'string' || !options.containingElement))\n return options.containingElement;\n\n if (!isDomLoaded.value || slotContext.value?.isDisposed)\n return null;\n\n return document.querySelector<HTMLElement>(`.adunit[data-format=\"${format.value}\"]#${options.containingElement}${options.slot ? `[data-slot=\"${options.slot}\"]` : ''}`);\n },\n );\n\n const isInViewport = useRenderIntersectionObserver({\n options,\n element,\n hooks,\n });\n\n const status = ref<UnwrapRef<AdheseSlot>['status']>('initializing');\n\n watch([data, isInViewport], async ([newData, newIsInViewport], [oldData]) => {\n if ((!newData || (oldData && isDeepEqual(newData, oldData))) && status.value === 'rendered')\n return;\n\n if (newIsInViewport)\n await slotContext.value?.render(newData ?? undefined);\n });\n\n hooks.onDispose(() => {\n disposeQueryDetector();\n });\n\n const isViewabilityTracked = useViewabilityObserver({\n context,\n slotContext,\n hooks,\n onTracked(trackingPixel) {\n if (slotContext.value?.data?.viewableImpressionCounter) {\n trackingPixel.value = addTrackingPixel(slotContext.value?.data?.viewableImpressionCounter);\n\n context.logger.debug(`Viewability tracking pixel fired for ${slotContext.value?.name}`);\n }\n },\n });\n\n const impressionTrackingPixelElement = ref<HTMLImageElement | null>(null);\n const isImpressionTracked = ref(false);\n hooks.onDispose(() => {\n if (impressionTrackingPixelElement.value)\n impressionTrackingPixelElement.value.remove();\n });\n\n async function request(): Promise<AdheseAd | null> {\n if (options.lazyLoading && !isInViewport.value)\n return null;\n\n status.value = 'loading';\n\n let response = await runOnBeforeRequest(null);\n\n if (!response) {\n response = await extRequestAd({\n slot: {\n name: name.value,\n parameters,\n },\n context,\n });\n }\n\n if (response)\n response = await runOnRequest(response);\n\n data.value = response;\n\n if (!originalData.value)\n originalData.value = response;\n\n status.value = response ? 'loaded' : 'empty';\n\n if (!response)\n cleanElement();\n\n return response;\n }\n\n async function render(adToRender?: AdheseAd): Promise<HTMLElement | null> {\n status.value = 'rendering';\n\n await waitForDomLoad();\n\n let renderAd = adToRender ?? data.value ?? originalData.value ?? await request();\n\n renderAd = renderAd && await runOnBeforeRender(renderAd);\n\n if (!renderAd) {\n status.value = 'empty';\n logger.debug(`No ad to render for slot ${name.value}`);\n\n return null;\n }\n\n if (!element.value) {\n const error = `Could not create slot for format ${format.value}. No element found.`;\n logger.error(error, options);\n throw new Error(error);\n }\n\n if (context.debug)\n element.value.style.position = 'relative';\n\n if (typeof renderAd?.tag !== 'string') {\n const error = `Could not render slot for slot ${name.value}. A valid tag doesn't exist or is not HTML string.`;\n logger.error(error, options);\n\n status.value = 'error';\n throw new Error(error);\n }\n\n renderFunctions[renderMode](renderAd as RenderOptions, element.value);\n\n if (renderAd.impressionCounter && !impressionTrackingPixelElement.value)\n impressionTrackingPixelElement.value = addTrackingPixel(renderAd.impressionCounter);\n\n isImpressionTracked.value = true;\n\n logger.debug(`Slot rendered ${name.value}`, {\n renderedElement: element,\n location: context.location,\n format,\n containingElement,\n });\n\n // eslint-disable-next-line require-atomic-updates\n data.value = renderAd;\n\n status.value = 'rendered';\n\n runOnRender(renderAd);\n\n return element.value;\n }\n\n function cleanElement(): void {\n if (!element.value)\n return;\n\n element.value.innerHTML = '';\n element.value.style.position = '';\n element.value.style.width = '';\n element.value.style.height = '';\n\n data.value = null;\n originalData.value = null;\n }\n\n function dispose(): void {\n cleanElement();\n\n data.value = null;\n\n runOnDispose();\n\n isDisposed.value = true;\n\n scope.stop();\n }\n\n const state = reactive({\n location: context.location ?? '',\n lazyLoading: options.lazyLoading ?? false,\n type,\n slot,\n parameters,\n format,\n name,\n data,\n isViewabilityTracked,\n isImpressionTracked,\n status,\n element,\n isDisposed,\n id,\n pluginOptions,\n isVisible: isInViewport,\n render,\n request,\n dispose,\n cleanElement,\n options: omit(options, ['context']),\n ...hooks,\n });\n\n watch(state, (newState) => {\n slotContext.value = newState;\n }, {\n deep: true,\n immediate: true,\n });\n\n context.hooks.onInit(async () => {\n status.value = 'initialized';\n\n runOnInit();\n\n if (options.lazyLoading)\n return;\n\n data.value = await slotContext.value?.request() ?? null;\n });\n\n return state;\n })!;\n}\n"],"names":["renderIframe","renderInline","doNothing","effectScope","ref","uniqueId","useSlotHooks","reactive","useQueryDetector","computed","generateName","watch","useDomLoaded","useRenderIntersectionObserver","isDeepEqual","useViewabilityObserver","addTrackingPixel","extRequestAd","waitForDomLoad","logger","omit"],"mappings":"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"}
1
+ {"version":3,"file":"slot.cjs","sources":["../../../src/slot/slot.ts"],"sourcesContent":["import {\n type Ref,\n type RenderOptions,\n type UnwrapRef,\n addTrackingPixel,\n computed,\n doNothing,\n effectScope,\n generateName,\n isDeepEqual,\n omit,\n reactive,\n ref,\n renderIframe,\n renderInline,\n uniqueId,\n waitForDomLoad,\n watch,\n} from '@adhese/sdk-shared';\nimport type { AdheseAd } from '@adhese/sdk';\nimport { requestAd as extRequestAd } from '../requestAds/requestAds';\nimport { logger } from '../logger/logger';\nimport { useQueryDetector } from '../queryDetector/queryDetector';\nimport type { AdheseSlot, AdheseSlotContext, AdheseSlotOptions, RenderMode } from './slot.types';\nimport {\n useDomLoaded,\n useRenderIntersectionObserver,\n useSlotHooks,\n useViewabilityObserver,\n} from './slot.composables';\n\nconst renderFunctions: Record<RenderMode, (ad: RenderOptions, element: HTMLElement) => void> = {\n iframe: renderIframe,\n inline: renderInline,\n none: doNothing,\n};\n\nconst defaultOptions = {\n renderMode: 'iframe',\n type: 'normal',\n} satisfies Partial<AdheseSlotOptions>;\n\n/**\n * Create a new slot instance. This slot instance can be used to request and render ads.\n *\n * @param slotOptions {AdheseSlotOptions} The options to create the slot with.\n *\n * @return AdheseSlot The created slot instance.\n */\nexport function createSlot(slotOptions: AdheseSlotOptions): AdheseSlot {\n const scope = effectScope();\n\n return scope.run(() => {\n const slotContext = ref<AdheseSlotContext | null>(null);\n const options = slotOptions.context.hooks.runOnSlotCreate({\n ...defaultOptions,\n ...slotOptions,\n });\n\n const {\n containingElement,\n slot,\n context,\n pluginOptions,\n renderMode = 'iframe',\n type = 'normal',\n } = options;\n\n const id = uniqueId();\n const {\n runOnBeforeRender,\n runOnRender,\n runOnBeforeRequest,\n runOnRequest,\n runOnInit,\n runOnDispose,\n ...hooks\n } = useSlotHooks(options, slotContext);\n\n const isDisposed = ref(false);\n const parameters = reactive(new Map(Object.entries(options.parameters ?? {})));\n\n const [device, disposeQueryDetector] = useQueryDetector(context, typeof options.format === 'string'\n ? {\n [options.format]: '(min-width: 0px)',\n }\n : Object.fromEntries(options.format.map(item => [item.format, item.query])));\n\n const format = computed(() => typeof options.format === 'string' ? options.format : device.value);\n\n const data = ref<AdheseAd | null>(null) as Ref<AdheseAd | null>;\n const originalData = ref(data.value) as Ref<AdheseAd | null>;\n const name = computed(() => generateName(options.context.location, format.value, options.slot));\n\n watch(name, async (newName, oldName) => {\n if (newName === oldName)\n return;\n\n const newAd = await slotContext.value?.request();\n\n if (!newAd)\n return;\n\n slotContext.value?.cleanElement();\n\n data.value = newAd;\n originalData.value = newAd;\n });\n\n const isDomLoaded = useDomLoaded(context);\n\n const element = computed(() => {\n if (!(typeof options.containingElement === 'string' || !options.containingElement))\n return options.containingElement;\n\n if (!isDomLoaded.value || slotContext.value?.isDisposed)\n return null;\n\n return document.querySelector<HTMLElement>(`.adunit[data-format=\"${format.value}\"]#${options.containingElement}${options.slot ? `[data-slot=\"${options.slot}\"]` : ''}`);\n },\n );\n\n const isInViewport = useRenderIntersectionObserver({\n options,\n element,\n hooks,\n });\n\n const status = ref<UnwrapRef<AdheseSlot>['status']>('initializing');\n\n watch([data, isInViewport], async ([newData, newIsInViewport], [oldData]) => {\n if ((!newData || (oldData && isDeepEqual(newData, oldData))) && status.value === 'rendered')\n return;\n\n if (newIsInViewport)\n await slotContext.value?.render(newData ?? undefined);\n });\n\n hooks.onDispose(() => {\n disposeQueryDetector();\n });\n\n const isViewabilityTracked = useViewabilityObserver({\n context,\n slotContext,\n hooks,\n onTracked(trackingPixel) {\n if (slotContext.value?.data?.viewableImpressionCounter) {\n trackingPixel.value = addTrackingPixel(slotContext.value?.data?.viewableImpressionCounter);\n\n context.logger.debug(`Viewability tracking pixel fired for ${slotContext.value?.name}`);\n }\n },\n });\n\n const impressionTrackingPixelElement = ref<HTMLImageElement | null>(null);\n const isImpressionTracked = ref(false);\n hooks.onDispose(() => {\n if (impressionTrackingPixelElement.value)\n impressionTrackingPixelElement.value.remove();\n });\n\n async function request(): Promise<AdheseAd | null> {\n if (options.lazyLoading && !isInViewport.value)\n return null;\n\n status.value = 'loading';\n\n let response = await runOnBeforeRequest(null);\n\n if (!response) {\n response = await extRequestAd({\n slot: {\n name: name.value,\n parameters,\n },\n context,\n });\n }\n\n if (response)\n response = await runOnRequest(response);\n\n data.value = response;\n\n if (!originalData.value)\n originalData.value = response;\n\n status.value = response ? 'loaded' : 'empty';\n\n if (!response)\n cleanElement();\n\n return response;\n }\n\n async function render(adToRender?: AdheseAd): Promise<HTMLElement | null> {\n status.value = 'rendering';\n\n await waitForDomLoad();\n\n let renderAd = adToRender ?? data.value ?? originalData.value ?? await request();\n\n renderAd = renderAd && await runOnBeforeRender(renderAd);\n\n if (!renderAd) {\n status.value = 'empty';\n logger.debug(`No ad to render for slot ${name.value}`);\n\n return null;\n }\n\n if (!element.value) {\n const error = `Could not create slot for format ${format.value}. No element found.`;\n logger.error(error, options);\n throw new Error(error);\n }\n\n if (context.debug)\n element.value.style.position = 'relative';\n\n if (typeof renderAd?.tag !== 'string') {\n const error = `Could not render slot for slot ${name.value}. A valid tag doesn't exist or is not HTML string.`;\n logger.error(error, options);\n\n status.value = 'error';\n throw new Error(error);\n }\n\n renderFunctions[renderMode](renderAd as RenderOptions, element.value);\n\n if (renderAd.impressionCounter && !impressionTrackingPixelElement.value)\n impressionTrackingPixelElement.value = addTrackingPixel(renderAd.impressionCounter);\n\n isImpressionTracked.value = true;\n\n logger.debug(`Slot rendered ${name.value}`, {\n renderedElement: element,\n location: context.location,\n format,\n containingElement,\n });\n\n status.value = 'rendered';\n\n runOnRender(renderAd);\n\n return element.value;\n }\n\n function cleanElement(): void {\n if (!element.value)\n return;\n\n element.value.innerHTML = '';\n element.value.style.position = '';\n element.value.style.width = '';\n element.value.style.height = '';\n\n data.value = null;\n originalData.value = null;\n }\n\n function dispose(): void {\n cleanElement();\n\n data.value = null;\n\n runOnDispose();\n\n isDisposed.value = true;\n\n scope.stop();\n }\n\n const state = reactive({\n location: context.location ?? '',\n lazyLoading: options.lazyLoading ?? false,\n type,\n slot,\n parameters,\n format,\n name,\n data,\n isViewabilityTracked,\n isImpressionTracked,\n status,\n element,\n isDisposed,\n id,\n pluginOptions,\n isVisible: isInViewport,\n render,\n request,\n dispose,\n cleanElement,\n options: omit(options, ['context']),\n ...hooks,\n });\n\n watch(state, (newState) => {\n slotContext.value = newState;\n }, {\n deep: true,\n immediate: true,\n });\n\n context.hooks.onInit(async () => {\n status.value = 'initialized';\n\n runOnInit();\n\n if (options.lazyLoading)\n return;\n\n data.value = await slotContext.value?.request() ?? null;\n });\n\n return state;\n })!;\n}\n"],"names":["renderIframe","renderInline","doNothing","effectScope","ref","uniqueId","useSlotHooks","reactive","useQueryDetector","computed","generateName","watch","useDomLoaded","useRenderIntersectionObserver","isDeepEqual","useViewabilityObserver","addTrackingPixel","extRequestAd","waitForDomLoad","logger","omit"],"mappings":";;;;;;;AA+BA,MAAM,kBAAyF;AAAA,EAC7F,QAAQA,UAAA;AAAA,EACR,QAAQC,UAAA;AAAA,EACR,MAAMC,UAAA;AACR;AAEA,MAAM,iBAAiB;AAAA,EACrB,YAAY;AAAA,EACZ,MAAM;AACR;AASO,SAAS,WAAW,aAA4C;AACrE,QAAM,QAAQC,UAAAA;AAEP,SAAA,MAAM,IAAI,MAAM;AACf,UAAA,cAAcC,cAA8B,IAAI;AACtD,UAAM,UAAU,YAAY,QAAQ,MAAM,gBAAgB;AAAA,MACxD,GAAG;AAAA,MACH,GAAG;AAAA,IAAA,CACJ;AAEK,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb,OAAO;AAAA,IACL,IAAA;AAEJ,UAAM,KAAKC,UAAAA;AACL,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IAAA,IACDC,iBAAa,aAAA,SAAS,WAAW;AAE/B,UAAA,aAAaF,cAAI,KAAK;AACtB,UAAA,aAAaG,UAAAA,SAAS,IAAI,IAAI,OAAO,QAAQ,QAAQ,cAAc,EAAE,CAAC,CAAC;AAEvE,UAAA,CAAC,QAAQ,oBAAoB,IAAIC,cAAAA,iBAAiB,SAAS,OAAO,QAAQ,WAAW,WACvF;AAAA,MACE,CAAC,QAAQ,MAAM,GAAG;AAAA,IAEpB,IAAA,OAAO,YAAY,QAAQ,OAAO,IAAI,CAAA,SAAQ,CAAC,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC;AAEvE,UAAA,SAASC,UAAAA,SAAS,MAAM,OAAO,QAAQ,WAAW,WAAW,QAAQ,SAAS,OAAO,KAAK;AAE1F,UAAA,OAAOL,cAAqB,IAAI;AAChC,UAAA,eAAeA,UAAAA,IAAI,KAAK,KAAK;AAC7B,UAAA,OAAOK,UAAAA,SAAS,MAAMC,UAAAA,aAAa,QAAQ,QAAQ,UAAU,OAAO,OAAO,QAAQ,IAAI,CAAC;AAExFC,cAAAA,MAAA,MAAM,OAAO,SAAS,YAAY;;AACtC,UAAI,YAAY;AACd;AAEF,YAAM,QAAQ,QAAM,iBAAY,UAAZ,mBAAmB;AAEvC,UAAI,CAAC;AACH;AAEF,wBAAY,UAAZ,mBAAmB;AAEnB,WAAK,QAAQ;AACb,mBAAa,QAAQ;AAAA,IAAA,CACtB;AAEK,UAAA,cAAcC,8BAAa,OAAO;AAExC,UAAM,UAAUH,UAAA;AAAA,MAAS,MAAM;;AAC7B,YAAI,EAAE,OAAO,QAAQ,sBAAsB,YAAY,CAAC,QAAQ;AAC9D,iBAAO,QAAQ;AAEjB,YAAI,CAAC,YAAY,WAAS,iBAAY,UAAZ,mBAAmB;AACpC,iBAAA;AAET,eAAO,SAAS,cAA2B,wBAAwB,OAAO,KAAK,MAAM,QAAQ,iBAAiB,GAAG,QAAQ,OAAO,eAAe,QAAQ,IAAI,OAAO,EAAE,EAAE;AAAA,MACxK;AAAA,IAAA;AAGA,UAAM,eAAeI,iBAAAA,8BAA8B;AAAA,MACjD;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAEK,UAAA,SAAST,cAAqC,cAAc;AAE5DO,oBAAA,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,eAAe,GAAG,CAAC,OAAO,MAAM;;AACtE,WAAA,CAAC,WAAY,WAAWG,UAAA,YAAY,SAAS,OAAO,MAAO,OAAO,UAAU;AAC/E;AAEE,UAAA;AACF,gBAAM,iBAAY,UAAZ,mBAAmB,OAAO,WAAW;AAAA,IAAS,CACvD;AAED,UAAM,UAAU,MAAM;AACC;IAAA,CACtB;AAED,UAAM,uBAAuBC,iBAAAA,uBAAuB;AAAA,MAClD;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,eAAe;;AACnB,aAAA,uBAAY,UAAZ,mBAAmB,SAAnB,mBAAyB,2BAA2B;AACtD,wBAAc,QAAQC,4BAAiB,uBAAY,UAAZ,mBAAmB,SAAnB,mBAAyB,yBAAyB;AAEzF,kBAAQ,OAAO,MAAM,yCAAwC,iBAAY,UAAZ,mBAAmB,IAAI,EAAE;AAAA,QACxF;AAAA,MACF;AAAA,IAAA,CACD;AAEK,UAAA,iCAAiCZ,cAA6B,IAAI;AAClE,UAAA,sBAAsBA,cAAI,KAAK;AACrC,UAAM,UAAU,MAAM;AACpB,UAAI,+BAA+B;AACjC,uCAA+B,MAAM;IAAO,CAC/C;AAED,mBAAe,UAAoC;AAC7C,UAAA,QAAQ,eAAe,CAAC,aAAa;AAChC,eAAA;AAET,aAAO,QAAQ;AAEX,UAAA,WAAW,MAAM,mBAAmB,IAAI;AAE5C,UAAI,CAAC,UAAU;AACb,mBAAW,MAAMa,WAAAA,UAAa;AAAA,UAC5B,MAAM;AAAA,YACJ,MAAM,KAAK;AAAA,YACX;AAAA,UACF;AAAA,UACA;AAAA,QAAA,CACD;AAAA,MACH;AAEI,UAAA;AACS,mBAAA,MAAM,aAAa,QAAQ;AAExC,WAAK,QAAQ;AAEb,UAAI,CAAC,aAAa;AAChB,qBAAa,QAAQ;AAEhB,aAAA,QAAQ,WAAW,WAAW;AAErC,UAAI,CAAC;AACU;AAER,aAAA;AAAA,IACT;AAEA,mBAAe,OAAO,YAAoD;AACxE,aAAO,QAAQ;AAEf,YAAMC,UAAe,eAAA;AAErB,UAAI,WAAW,cAAc,KAAK,SAAS,aAAa,SAAS,MAAM;AAE5D,iBAAA,YAAY,MAAM,kBAAkB,QAAQ;AAEvD,UAAI,CAAC,UAAU;AACb,eAAO,QAAQ;AACfC,eAAA,OAAO,MAAM,4BAA4B,KAAK,KAAK,EAAE;AAE9C,eAAA;AAAA,MACT;AAEI,UAAA,CAAC,QAAQ,OAAO;AACZ,cAAA,QAAQ,oCAAoC,OAAO,KAAK;AACvDA,eAAAA,OAAA,MAAM,OAAO,OAAO;AACrB,cAAA,IAAI,MAAM,KAAK;AAAA,MACvB;AAEA,UAAI,QAAQ;AACF,gBAAA,MAAM,MAAM,WAAW;AAE7B,UAAA,QAAO,qCAAU,SAAQ,UAAU;AAC/B,cAAA,QAAQ,kCAAkC,KAAK,KAAK;AACnDA,eAAAA,OAAA,MAAM,OAAO,OAAO;AAE3B,eAAO,QAAQ;AACT,cAAA,IAAI,MAAM,KAAK;AAAA,MACvB;AAEA,sBAAgB,UAAU,EAAE,UAA2B,QAAQ,KAAK;AAEhE,UAAA,SAAS,qBAAqB,CAAC,+BAA+B;AACjC,uCAAA,QAAQH,UAAAA,iBAAiB,SAAS,iBAAiB;AAEpF,0BAAoB,QAAQ;AAE5BG,aAAA,OAAO,MAAM,iBAAiB,KAAK,KAAK,IAAI;AAAA,QAC1C,iBAAiB;AAAA,QACjB,UAAU,QAAQ;AAAA,QAClB;AAAA,QACA;AAAA,MAAA,CACD;AAED,aAAO,QAAQ;AAEf,kBAAY,QAAQ;AAEpB,aAAO,QAAQ;AAAA,IACjB;AAEA,aAAS,eAAqB;AAC5B,UAAI,CAAC,QAAQ;AACX;AAEF,cAAQ,MAAM,YAAY;AAClB,cAAA,MAAM,MAAM,WAAW;AACvB,cAAA,MAAM,MAAM,QAAQ;AACpB,cAAA,MAAM,MAAM,SAAS;AAE7B,WAAK,QAAQ;AACb,mBAAa,QAAQ;AAAA,IACvB;AAEA,aAAS,UAAgB;AACV;AAEb,WAAK,QAAQ;AAEA;AAEb,iBAAW,QAAQ;AAEnB,YAAM,KAAK;AAAA,IACb;AAEA,UAAM,QAAQZ,UAAAA,SAAS;AAAA,MACrB,UAAU,QAAQ,YAAY;AAAA,MAC9B,aAAa,QAAQ,eAAe;AAAA,MACpC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAASa,UAAA,KAAK,SAAS,CAAC,SAAS,CAAC;AAAA,MAClC,GAAG;AAAA,IAAA,CACJ;AAEKT,oBAAA,OAAO,CAAC,aAAa;AACzB,kBAAY,QAAQ;AAAA,IAAA,GACnB;AAAA,MACD,MAAM;AAAA,MACN,WAAW;AAAA,IAAA,CACZ;AAEO,YAAA,MAAM,OAAO,YAAY;;AAC/B,aAAO,QAAQ;AAEL;AAEV,UAAI,QAAQ;AACV;AAEF,WAAK,QAAQ,QAAM,iBAAY,UAAZ,mBAAmB,cAAa;AAAA,IAAA,CACpD;AAEM,WAAA;AAAA,EAAA,CACR;AACH;;"}
@@ -1,5 +1,5 @@
1
1
  const name = "@adhese/sdk";
2
- const version = "1.0.0";
2
+ const version = "1.0.1";
3
3
  export {
4
4
  name,
5
5
  version
package/dist/slot/slot.js CHANGED
@@ -160,7 +160,6 @@ function createSlot(slotOptions) {
160
160
  format,
161
161
  containingElement
162
162
  });
163
- data.value = renderAd;
164
163
  status.value = "rendered";
165
164
  runOnRender(renderAd);
166
165
  return element.value;
@@ -1 +1 @@
1
- {"version":3,"file":"slot.js","sources":["../../src/slot/slot.ts"],"sourcesContent":["import {\n type Ref,\n type RenderOptions,\n type UnwrapRef,\n addTrackingPixel,\n computed,\n doNothing,\n effectScope,\n generateName,\n isDeepEqual,\n omit,\n reactive,\n ref,\n renderIframe,\n renderInline,\n uniqueId,\n waitForDomLoad,\n watch,\n} from '@adhese/sdk-shared';\nimport type { AdheseAd } from '@adhese/sdk';\nimport { requestAd as extRequestAd } from '../requestAds/requestAds';\nimport { logger } from '../logger/logger';\nimport { useQueryDetector } from '../queryDetector/queryDetector';\nimport type { AdheseSlot, AdheseSlotContext, AdheseSlotOptions, RenderMode } from './slot.types';\nimport {\n useDomLoaded,\n useRenderIntersectionObserver,\n useSlotHooks,\n useViewabilityObserver,\n} from './slot.composables';\n\nconst renderFunctions: Record<RenderMode, (ad: RenderOptions, element: HTMLElement) => void> = {\n iframe: renderIframe,\n inline: renderInline,\n none: doNothing,\n};\n\nconst defaultOptions = {\n renderMode: 'iframe',\n type: 'normal',\n} satisfies Partial<AdheseSlotOptions>;\n\n/**\n * Create a new slot instance. This slot instance can be used to request and render ads.\n *\n * @param slotOptions {AdheseSlotOptions} The options to create the slot with.\n *\n * @return AdheseSlot The created slot instance.\n */\nexport function createSlot(slotOptions: AdheseSlotOptions): AdheseSlot {\n const scope = effectScope();\n\n return scope.run(() => {\n const slotContext = ref<AdheseSlotContext | null>(null);\n const options = slotOptions.context.hooks.runOnSlotCreate({\n ...defaultOptions,\n ...slotOptions,\n });\n\n const {\n containingElement,\n slot,\n context,\n pluginOptions,\n renderMode = 'iframe',\n type = 'normal',\n } = options;\n\n const id = uniqueId();\n const {\n runOnBeforeRender,\n runOnRender,\n runOnBeforeRequest,\n runOnRequest,\n runOnInit,\n runOnDispose,\n ...hooks\n } = useSlotHooks(options, slotContext);\n\n const isDisposed = ref(false);\n const parameters = reactive(new Map(Object.entries(options.parameters ?? {})));\n\n const [device, disposeQueryDetector] = useQueryDetector(context, typeof options.format === 'string'\n ? {\n [options.format]: '(min-width: 0px)',\n }\n : Object.fromEntries(options.format.map(item => [item.format, item.query])));\n\n const format = computed(() => typeof options.format === 'string' ? options.format : device.value);\n\n const data = ref<AdheseAd | null>(null) as Ref<AdheseAd | null>;\n const originalData = ref(data.value) as Ref<AdheseAd | null>;\n const name = computed(() => generateName(options.context.location, format.value, options.slot));\n\n watch(name, async (newName, oldName) => {\n if (newName === oldName)\n return;\n\n const newAd = await slotContext.value?.request();\n\n if (!newAd)\n return;\n\n slotContext.value?.cleanElement();\n\n data.value = newAd;\n originalData.value = newAd;\n });\n\n const isDomLoaded = useDomLoaded(context);\n\n const element = computed(() => {\n if (!(typeof options.containingElement === 'string' || !options.containingElement))\n return options.containingElement;\n\n if (!isDomLoaded.value || slotContext.value?.isDisposed)\n return null;\n\n return document.querySelector<HTMLElement>(`.adunit[data-format=\"${format.value}\"]#${options.containingElement}${options.slot ? `[data-slot=\"${options.slot}\"]` : ''}`);\n },\n );\n\n const isInViewport = useRenderIntersectionObserver({\n options,\n element,\n hooks,\n });\n\n const status = ref<UnwrapRef<AdheseSlot>['status']>('initializing');\n\n watch([data, isInViewport], async ([newData, newIsInViewport], [oldData]) => {\n if ((!newData || (oldData && isDeepEqual(newData, oldData))) && status.value === 'rendered')\n return;\n\n if (newIsInViewport)\n await slotContext.value?.render(newData ?? undefined);\n });\n\n hooks.onDispose(() => {\n disposeQueryDetector();\n });\n\n const isViewabilityTracked = useViewabilityObserver({\n context,\n slotContext,\n hooks,\n onTracked(trackingPixel) {\n if (slotContext.value?.data?.viewableImpressionCounter) {\n trackingPixel.value = addTrackingPixel(slotContext.value?.data?.viewableImpressionCounter);\n\n context.logger.debug(`Viewability tracking pixel fired for ${slotContext.value?.name}`);\n }\n },\n });\n\n const impressionTrackingPixelElement = ref<HTMLImageElement | null>(null);\n const isImpressionTracked = ref(false);\n hooks.onDispose(() => {\n if (impressionTrackingPixelElement.value)\n impressionTrackingPixelElement.value.remove();\n });\n\n async function request(): Promise<AdheseAd | null> {\n if (options.lazyLoading && !isInViewport.value)\n return null;\n\n status.value = 'loading';\n\n let response = await runOnBeforeRequest(null);\n\n if (!response) {\n response = await extRequestAd({\n slot: {\n name: name.value,\n parameters,\n },\n context,\n });\n }\n\n if (response)\n response = await runOnRequest(response);\n\n data.value = response;\n\n if (!originalData.value)\n originalData.value = response;\n\n status.value = response ? 'loaded' : 'empty';\n\n if (!response)\n cleanElement();\n\n return response;\n }\n\n async function render(adToRender?: AdheseAd): Promise<HTMLElement | null> {\n status.value = 'rendering';\n\n await waitForDomLoad();\n\n let renderAd = adToRender ?? data.value ?? originalData.value ?? await request();\n\n renderAd = renderAd && await runOnBeforeRender(renderAd);\n\n if (!renderAd) {\n status.value = 'empty';\n logger.debug(`No ad to render for slot ${name.value}`);\n\n return null;\n }\n\n if (!element.value) {\n const error = `Could not create slot for format ${format.value}. No element found.`;\n logger.error(error, options);\n throw new Error(error);\n }\n\n if (context.debug)\n element.value.style.position = 'relative';\n\n if (typeof renderAd?.tag !== 'string') {\n const error = `Could not render slot for slot ${name.value}. A valid tag doesn't exist or is not HTML string.`;\n logger.error(error, options);\n\n status.value = 'error';\n throw new Error(error);\n }\n\n renderFunctions[renderMode](renderAd as RenderOptions, element.value);\n\n if (renderAd.impressionCounter && !impressionTrackingPixelElement.value)\n impressionTrackingPixelElement.value = addTrackingPixel(renderAd.impressionCounter);\n\n isImpressionTracked.value = true;\n\n logger.debug(`Slot rendered ${name.value}`, {\n renderedElement: element,\n location: context.location,\n format,\n containingElement,\n });\n\n // eslint-disable-next-line require-atomic-updates\n data.value = renderAd;\n\n status.value = 'rendered';\n\n runOnRender(renderAd);\n\n return element.value;\n }\n\n function cleanElement(): void {\n if (!element.value)\n return;\n\n element.value.innerHTML = '';\n element.value.style.position = '';\n element.value.style.width = '';\n element.value.style.height = '';\n\n data.value = null;\n originalData.value = null;\n }\n\n function dispose(): void {\n cleanElement();\n\n data.value = null;\n\n runOnDispose();\n\n isDisposed.value = true;\n\n scope.stop();\n }\n\n const state = reactive({\n location: context.location ?? '',\n lazyLoading: options.lazyLoading ?? false,\n type,\n slot,\n parameters,\n format,\n name,\n data,\n isViewabilityTracked,\n isImpressionTracked,\n status,\n element,\n isDisposed,\n id,\n pluginOptions,\n isVisible: isInViewport,\n render,\n request,\n dispose,\n cleanElement,\n options: omit(options, ['context']),\n ...hooks,\n });\n\n watch(state, (newState) => {\n slotContext.value = newState;\n }, {\n deep: true,\n immediate: true,\n });\n\n context.hooks.onInit(async () => {\n status.value = 'initialized';\n\n runOnInit();\n\n if (options.lazyLoading)\n return;\n\n data.value = await slotContext.value?.request() ?? null;\n });\n\n return state;\n })!;\n}\n"],"names":["extRequestAd"],"mappings":"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"}
1
+ {"version":3,"file":"slot.js","sources":["../../src/slot/slot.ts"],"sourcesContent":["import {\n type Ref,\n type RenderOptions,\n type UnwrapRef,\n addTrackingPixel,\n computed,\n doNothing,\n effectScope,\n generateName,\n isDeepEqual,\n omit,\n reactive,\n ref,\n renderIframe,\n renderInline,\n uniqueId,\n waitForDomLoad,\n watch,\n} from '@adhese/sdk-shared';\nimport type { AdheseAd } from '@adhese/sdk';\nimport { requestAd as extRequestAd } from '../requestAds/requestAds';\nimport { logger } from '../logger/logger';\nimport { useQueryDetector } from '../queryDetector/queryDetector';\nimport type { AdheseSlot, AdheseSlotContext, AdheseSlotOptions, RenderMode } from './slot.types';\nimport {\n useDomLoaded,\n useRenderIntersectionObserver,\n useSlotHooks,\n useViewabilityObserver,\n} from './slot.composables';\n\nconst renderFunctions: Record<RenderMode, (ad: RenderOptions, element: HTMLElement) => void> = {\n iframe: renderIframe,\n inline: renderInline,\n none: doNothing,\n};\n\nconst defaultOptions = {\n renderMode: 'iframe',\n type: 'normal',\n} satisfies Partial<AdheseSlotOptions>;\n\n/**\n * Create a new slot instance. This slot instance can be used to request and render ads.\n *\n * @param slotOptions {AdheseSlotOptions} The options to create the slot with.\n *\n * @return AdheseSlot The created slot instance.\n */\nexport function createSlot(slotOptions: AdheseSlotOptions): AdheseSlot {\n const scope = effectScope();\n\n return scope.run(() => {\n const slotContext = ref<AdheseSlotContext | null>(null);\n const options = slotOptions.context.hooks.runOnSlotCreate({\n ...defaultOptions,\n ...slotOptions,\n });\n\n const {\n containingElement,\n slot,\n context,\n pluginOptions,\n renderMode = 'iframe',\n type = 'normal',\n } = options;\n\n const id = uniqueId();\n const {\n runOnBeforeRender,\n runOnRender,\n runOnBeforeRequest,\n runOnRequest,\n runOnInit,\n runOnDispose,\n ...hooks\n } = useSlotHooks(options, slotContext);\n\n const isDisposed = ref(false);\n const parameters = reactive(new Map(Object.entries(options.parameters ?? {})));\n\n const [device, disposeQueryDetector] = useQueryDetector(context, typeof options.format === 'string'\n ? {\n [options.format]: '(min-width: 0px)',\n }\n : Object.fromEntries(options.format.map(item => [item.format, item.query])));\n\n const format = computed(() => typeof options.format === 'string' ? options.format : device.value);\n\n const data = ref<AdheseAd | null>(null) as Ref<AdheseAd | null>;\n const originalData = ref(data.value) as Ref<AdheseAd | null>;\n const name = computed(() => generateName(options.context.location, format.value, options.slot));\n\n watch(name, async (newName, oldName) => {\n if (newName === oldName)\n return;\n\n const newAd = await slotContext.value?.request();\n\n if (!newAd)\n return;\n\n slotContext.value?.cleanElement();\n\n data.value = newAd;\n originalData.value = newAd;\n });\n\n const isDomLoaded = useDomLoaded(context);\n\n const element = computed(() => {\n if (!(typeof options.containingElement === 'string' || !options.containingElement))\n return options.containingElement;\n\n if (!isDomLoaded.value || slotContext.value?.isDisposed)\n return null;\n\n return document.querySelector<HTMLElement>(`.adunit[data-format=\"${format.value}\"]#${options.containingElement}${options.slot ? `[data-slot=\"${options.slot}\"]` : ''}`);\n },\n );\n\n const isInViewport = useRenderIntersectionObserver({\n options,\n element,\n hooks,\n });\n\n const status = ref<UnwrapRef<AdheseSlot>['status']>('initializing');\n\n watch([data, isInViewport], async ([newData, newIsInViewport], [oldData]) => {\n if ((!newData || (oldData && isDeepEqual(newData, oldData))) && status.value === 'rendered')\n return;\n\n if (newIsInViewport)\n await slotContext.value?.render(newData ?? undefined);\n });\n\n hooks.onDispose(() => {\n disposeQueryDetector();\n });\n\n const isViewabilityTracked = useViewabilityObserver({\n context,\n slotContext,\n hooks,\n onTracked(trackingPixel) {\n if (slotContext.value?.data?.viewableImpressionCounter) {\n trackingPixel.value = addTrackingPixel(slotContext.value?.data?.viewableImpressionCounter);\n\n context.logger.debug(`Viewability tracking pixel fired for ${slotContext.value?.name}`);\n }\n },\n });\n\n const impressionTrackingPixelElement = ref<HTMLImageElement | null>(null);\n const isImpressionTracked = ref(false);\n hooks.onDispose(() => {\n if (impressionTrackingPixelElement.value)\n impressionTrackingPixelElement.value.remove();\n });\n\n async function request(): Promise<AdheseAd | null> {\n if (options.lazyLoading && !isInViewport.value)\n return null;\n\n status.value = 'loading';\n\n let response = await runOnBeforeRequest(null);\n\n if (!response) {\n response = await extRequestAd({\n slot: {\n name: name.value,\n parameters,\n },\n context,\n });\n }\n\n if (response)\n response = await runOnRequest(response);\n\n data.value = response;\n\n if (!originalData.value)\n originalData.value = response;\n\n status.value = response ? 'loaded' : 'empty';\n\n if (!response)\n cleanElement();\n\n return response;\n }\n\n async function render(adToRender?: AdheseAd): Promise<HTMLElement | null> {\n status.value = 'rendering';\n\n await waitForDomLoad();\n\n let renderAd = adToRender ?? data.value ?? originalData.value ?? await request();\n\n renderAd = renderAd && await runOnBeforeRender(renderAd);\n\n if (!renderAd) {\n status.value = 'empty';\n logger.debug(`No ad to render for slot ${name.value}`);\n\n return null;\n }\n\n if (!element.value) {\n const error = `Could not create slot for format ${format.value}. No element found.`;\n logger.error(error, options);\n throw new Error(error);\n }\n\n if (context.debug)\n element.value.style.position = 'relative';\n\n if (typeof renderAd?.tag !== 'string') {\n const error = `Could not render slot for slot ${name.value}. A valid tag doesn't exist or is not HTML string.`;\n logger.error(error, options);\n\n status.value = 'error';\n throw new Error(error);\n }\n\n renderFunctions[renderMode](renderAd as RenderOptions, element.value);\n\n if (renderAd.impressionCounter && !impressionTrackingPixelElement.value)\n impressionTrackingPixelElement.value = addTrackingPixel(renderAd.impressionCounter);\n\n isImpressionTracked.value = true;\n\n logger.debug(`Slot rendered ${name.value}`, {\n renderedElement: element,\n location: context.location,\n format,\n containingElement,\n });\n\n status.value = 'rendered';\n\n runOnRender(renderAd);\n\n return element.value;\n }\n\n function cleanElement(): void {\n if (!element.value)\n return;\n\n element.value.innerHTML = '';\n element.value.style.position = '';\n element.value.style.width = '';\n element.value.style.height = '';\n\n data.value = null;\n originalData.value = null;\n }\n\n function dispose(): void {\n cleanElement();\n\n data.value = null;\n\n runOnDispose();\n\n isDisposed.value = true;\n\n scope.stop();\n }\n\n const state = reactive({\n location: context.location ?? '',\n lazyLoading: options.lazyLoading ?? false,\n type,\n slot,\n parameters,\n format,\n name,\n data,\n isViewabilityTracked,\n isImpressionTracked,\n status,\n element,\n isDisposed,\n id,\n pluginOptions,\n isVisible: isInViewport,\n render,\n request,\n dispose,\n cleanElement,\n options: omit(options, ['context']),\n ...hooks,\n });\n\n watch(state, (newState) => {\n slotContext.value = newState;\n }, {\n deep: true,\n immediate: true,\n });\n\n context.hooks.onInit(async () => {\n status.value = 'initialized';\n\n runOnInit();\n\n if (options.lazyLoading)\n return;\n\n data.value = await slotContext.value?.request() ?? null;\n });\n\n return state;\n })!;\n}\n"],"names":["extRequestAd"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@adhese/sdk",
3
3
  "type": "module",
4
- "version": "1.0.0",
4
+ "version": "1.0.1",
5
5
  "description": "Adhese SDK",
6
6
  "license": "GPL-3.0",
7
7
  "repository": {