🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

@internetarchive/lazy-loader-service

Package Overview
Dependencies
Maintainers
13
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@internetarchive/lazy-loader-service - npm Package Compare versions

Comparing version

to
0.2.0-alpha.3

2

dist/src/lazy-loader-service-interface.d.ts
import { BundleType } from './bundle-type';
import { Unsubscribe } from 'nanoevents';
export interface LazyLoaderServiceEvents {
scriptLoadRetried: (src: string, retryCount: number) => void;
scriptLoadRetried: (src: string, retryNumber: number) => void;
scriptLoadFailed: (src: string, error: string | Event) => void;

@@ -6,0 +6,0 @@ }

@@ -53,4 +53,4 @@ import { __awaiter } from "tslib";

return __awaiter(this, void 0, void 0, function* () {
const retryCount = (_a = options.retryCount) !== null && _a !== void 0 ? _a : 0;
const scriptSelector = `script[src='${options.src}'][async][retryCount='${retryCount}']`;
const retryNumber = (_a = options.retryNumber) !== null && _a !== void 0 ? _a : 0;
const scriptSelector = `script[src='${options.src}'][async][retryCount='${retryNumber}']`;
let script = this.container.querySelector(scriptSelector);

@@ -81,8 +81,8 @@ if (!script) {

const hasBeenRetried = script.getAttribute('hasBeenRetried');
if (retryCount < this.retryCount && !hasBeenRetried) {
if (retryNumber < this.retryCount && !hasBeenRetried) {
script.setAttribute('hasBeenRetried', 'true');
yield promisedSleep(this.retryInterval * 1000);
const newRetryCount = retryCount + 1;
this.emitter.emit('scriptLoadRetried', options.src, newRetryCount);
this.doLoad(Object.assign(Object.assign({}, options), { retryCount: newRetryCount, scriptBeingRetried: script }));
const newRetryNumber = retryNumber + 1;
this.emitter.emit('scriptLoadRetried', options.src, newRetryNumber);
this.doLoad(Object.assign(Object.assign({}, options), { retryNumber: newRetryNumber, scriptBeingRetried: script }));
}

@@ -89,0 +89,0 @@ else {

@@ -226,5 +226,21 @@ import { __awaiter } from "tslib";

});
yield lazyLoader.loadScript({ src: serverUrl });
let testRetryCount = 0;
lazyLoader.on('scriptLoadRetried', () => {
testRetryCount += 1;
});
let testFailedCount = 0;
lazyLoader.on('scriptLoadFailed', () => {
testFailedCount += 1;
});
// make multiple simultaneous loads of the URL to verify we only end up
// with one retry event
const promises = [
lazyLoader.loadScript({ src: serverUrl }),
lazyLoader.loadScript({ src: serverUrl }),
lazyLoader.loadScript({ src: serverUrl }),
];
yield Promise.all(promises);
// verify we have two script tags with the expected url and a propery retryCount on each
const scriptTags = container.querySelectorAll('script');
expect(scriptTags.length).to.equal(2);
scriptTags.forEach((tag, index) => {

@@ -234,2 +250,4 @@ expect(tag.src).to.equal(serverUrl);

});
expect(testRetryCount).to.equal(1);
expect(testFailedCount).to.equal(0);
// verify the final load actually loaded the service

@@ -236,0 +254,0 @@ // eslint-disable-next-line @typescript-eslint/no-explicit-any

{
"name": "@internetarchive/lazy-loader-service",
"version": "0.2.0-alpha.2",
"version": "0.2.0-alpha.3",
"description": "A small library to lazy load javascript with a Promise",

@@ -5,0 +5,0 @@ "license": "AGPL-3.0-only",

@@ -5,3 +5,3 @@ import { BundleType } from './bundle-type';

export interface LazyLoaderServiceEvents {
scriptLoadRetried: (src: string, retryCount: number) => void;
scriptLoadRetried: (src: string, retryNumber: number) => void;
scriptLoadFailed: (src: string, error: string | Event) => void;

@@ -8,0 +8,0 @@ }

@@ -98,7 +98,7 @@ import { createNanoEvents, Unsubscribe } from 'nanoevents';

attributes?: Record<string, string>;
retryCount?: number;
retryNumber?: number;
scriptBeingRetried?: HTMLScriptElement;
}): Promise<void> {
const retryCount = options.retryCount ?? 0;
const scriptSelector = `script[src='${options.src}'][async][retryCount='${retryCount}']`;
const retryNumber = options.retryNumber ?? 0;
const scriptSelector = `script[src='${options.src}'][async][retryCount='${retryNumber}']`;
let script = this.container.querySelector(

@@ -140,10 +140,10 @@ scriptSelector

const hasBeenRetried = script.getAttribute('hasBeenRetried');
if (retryCount < this.retryCount && !hasBeenRetried) {
if (retryNumber < this.retryCount && !hasBeenRetried) {
script.setAttribute('hasBeenRetried', 'true');
await promisedSleep(this.retryInterval * 1000);
const newRetryCount = retryCount + 1;
this.emitter.emit('scriptLoadRetried', options.src, newRetryCount);
const newRetryNumber = retryNumber + 1;
this.emitter.emit('scriptLoadRetried', options.src, newRetryNumber);
this.doLoad({
...options,
retryCount: newRetryCount,
retryNumber: newRetryNumber,
scriptBeingRetried: script,

@@ -150,0 +150,0 @@ });

@@ -261,6 +261,26 @@ import { expect, fixture, html } from '@open-wc/testing';

});
await lazyLoader.loadScript({ src: serverUrl });
let testRetryCount = 0;
lazyLoader.on('scriptLoadRetried', () => {
testRetryCount += 1;
});
let testFailedCount = 0;
lazyLoader.on('scriptLoadFailed', () => {
testFailedCount += 1;
});
// make multiple simultaneous loads of the URL to verify we only end up
// with one retry event
const promises = [
lazyLoader.loadScript({ src: serverUrl }),
lazyLoader.loadScript({ src: serverUrl }),
lazyLoader.loadScript({ src: serverUrl }),
];
await Promise.all(promises);
// verify we have two script tags with the expected url and a propery retryCount on each
const scriptTags = container.querySelectorAll('script');
expect(scriptTags.length).to.equal(2);
scriptTags.forEach((tag, index) => {

@@ -271,2 +291,5 @@ expect(tag.src).to.equal(serverUrl);

expect(testRetryCount).to.equal(1);
expect(testFailedCount).to.equal(0);
// verify the final load actually loaded the service

@@ -273,0 +296,0 @@ // eslint-disable-next-line @typescript-eslint/no-explicit-any

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet