Launch Week Day 5: Introducing Reachability for PHP.Learn More
Socket
Book a DemoSign in
Socket

@bigcommerce/script-loader

Package Overview
Dependencies
Maintainers
15
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@bigcommerce/script-loader - npm Package Compare versions

Comparing version
0.2.0
to
1.0.0
+10
-0
CHANGELOG.md

@@ -5,2 +5,12 @@ # Change Log

<a name="1.0.0"></a>
# [1.0.0](https://github.com/bigcommerce/script-loader-js/compare/v0.2.0...v1.0.0) (2019-09-23)
### Features
* **core:** CHECKOUT-4400 Add ability to prefetch scripts and stylesheets ([072d567](https://github.com/bigcommerce/script-loader-js/commit/072d567))
<a name="0.2.0"></a>

@@ -7,0 +17,0 @@ # [0.2.0](https://github.com/bigcommerce/script-loader-js/compare/v0.1.6...v0.2.0) (2019-09-20)

+5
-2

@@ -0,1 +1,4 @@

export interface PreloadScriptOptions {
prefetch: boolean;
}
export default class ScriptLoader {

@@ -6,4 +9,4 @@ private _scripts;

loadScripts(urls: string[]): Promise<Event[]>;
preloadScript(url: string): Promise<Event>;
preloadScripts(urls: string[]): Promise<Event[]>;
preloadScript(url: string, options?: PreloadScriptOptions): Promise<Event>;
preloadScripts(urls: string[], options?: PreloadScriptOptions): Promise<Event[]>;
}

@@ -48,3 +48,3 @@ "use strict";

};
ScriptLoader.prototype.preloadScript = function (url) {
ScriptLoader.prototype.preloadScript = function (url, options) {
var _this = this;

@@ -54,4 +54,5 @@ if (!this._preloadedScripts[url]) {

var preloadedScript = document.createElement('link');
var _a = (options || {}).prefetch, prefetch = _a === void 0 ? false : _a;
preloadedScript.as = 'script';
preloadedScript.rel = 'preload';
preloadedScript.rel = prefetch ? 'prefetch' : 'preload';
preloadedScript.href = url;

@@ -70,5 +71,5 @@ preloadedScript.onload = function (event) {

};
ScriptLoader.prototype.preloadScripts = function (urls) {
ScriptLoader.prototype.preloadScripts = function (urls, options) {
var _this = this;
return Promise.all(urls.map(function (url) { return _this.preloadScript(url); }));
return Promise.all(urls.map(function (url) { return _this.preloadScript(url, options); }));
};

@@ -75,0 +76,0 @@ return ScriptLoader;

@@ -1,1 +0,1 @@

{"version":3,"file":"script-loader.js","sourceRoot":"","sources":["../src/script-loader.ts"],"names":[],"mappings":"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","sourcesContent":["export default class ScriptLoader {\n private _scripts: { [key: string]: Promise<Event> } = {};\n private _preloadedScripts: { [key: string]: Promise<Event> } = {};\n\n loadScript(src: string): Promise<Event> {\n if (!this._scripts[src]) {\n this._scripts[src] = new Promise((resolve, reject) => {\n const script = document.createElement('script') as LegacyHTMLScriptElement;\n\n script.onload = event => resolve(event);\n script.onreadystatechange = event => resolve(event);\n script.onerror = event => {\n delete this._scripts[src];\n reject(event);\n };\n script.async = true;\n script.src = src;\n\n document.body.appendChild(script);\n });\n }\n\n return this._scripts[src];\n }\n\n loadScripts(urls: string[]): Promise<Event[]> {\n const events: Event[] = [];\n let promise: Promise<Event> | undefined;\n\n return this.preloadScripts(urls)\n .then(() => {\n urls.forEach(url => {\n if (promise) {\n promise = promise.then(() => this.loadScript(url));\n } else {\n promise = this.loadScript(url);\n }\n\n promise = promise.then(event => {\n events.push(event);\n\n return event;\n });\n });\n\n return promise;\n })\n .then(() => events);\n }\n\n preloadScript(url: string): Promise<Event> {\n if (!this._preloadedScripts[url]) {\n this._preloadedScripts[url] = new Promise((resolve, reject) => {\n const preloadedScript = document.createElement('link');\n\n preloadedScript.as = 'script';\n preloadedScript.rel = 'preload';\n preloadedScript.href = url;\n\n preloadedScript.onload = event => {\n resolve(event);\n };\n\n preloadedScript.onerror = event => {\n delete this._preloadedScripts[url];\n reject(event);\n };\n\n document.head.appendChild(preloadedScript);\n });\n }\n\n return this._preloadedScripts[url];\n }\n\n preloadScripts(urls: string[]): Promise<Event[]> {\n return Promise.all(urls.map(url => this.preloadScript(url)));\n }\n}\n\ninterface LegacyHTMLScriptElement extends HTMLScriptElement {\n // `onreadystatechange` is needed to support legacy IE\n onreadystatechange(this: HTMLElement, event: Event): any;\n}\n"]}
{"version":3,"file":"script-loader.js","sourceRoot":"","sources":["../src/script-loader.ts"],"names":[],"mappings":"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","sourcesContent":["export interface PreloadScriptOptions {\n prefetch: boolean;\n}\n\nexport default class ScriptLoader {\n private _scripts: { [key: string]: Promise<Event> } = {};\n private _preloadedScripts: { [key: string]: Promise<Event> } = {};\n\n loadScript(src: string): Promise<Event> {\n if (!this._scripts[src]) {\n this._scripts[src] = new Promise((resolve, reject) => {\n const script = document.createElement('script') as LegacyHTMLScriptElement;\n\n script.onload = event => resolve(event);\n script.onreadystatechange = event => resolve(event);\n script.onerror = event => {\n delete this._scripts[src];\n reject(event);\n };\n script.async = true;\n script.src = src;\n\n document.body.appendChild(script);\n });\n }\n\n return this._scripts[src];\n }\n\n loadScripts(urls: string[]): Promise<Event[]> {\n const events: Event[] = [];\n let promise: Promise<Event> | undefined;\n\n return this.preloadScripts(urls)\n .then(() => {\n urls.forEach(url => {\n if (promise) {\n promise = promise.then(() => this.loadScript(url));\n } else {\n promise = this.loadScript(url);\n }\n\n promise = promise.then(event => {\n events.push(event);\n\n return event;\n });\n });\n\n return promise;\n })\n .then(() => events);\n }\n\n preloadScript(url: string, options?: PreloadScriptOptions): Promise<Event> {\n if (!this._preloadedScripts[url]) {\n this._preloadedScripts[url] = new Promise((resolve, reject) => {\n const preloadedScript = document.createElement('link');\n const { prefetch = false } = options || {};\n\n preloadedScript.as = 'script';\n preloadedScript.rel = prefetch ? 'prefetch' : 'preload';\n preloadedScript.href = url;\n\n preloadedScript.onload = event => {\n resolve(event);\n };\n\n preloadedScript.onerror = event => {\n delete this._preloadedScripts[url];\n reject(event);\n };\n\n document.head.appendChild(preloadedScript);\n });\n }\n\n return this._preloadedScripts[url];\n }\n\n preloadScripts(urls: string[], options?: PreloadScriptOptions): Promise<Event[]> {\n return Promise.all(urls.map(url => this.preloadScript(url, options)));\n }\n}\n\ninterface LegacyHTMLScriptElement extends HTMLScriptElement {\n // `onreadystatechange` is needed to support legacy IE\n onreadystatechange(this: HTMLElement, event: Event): any;\n}\n"]}
export interface LoadStylesheetOptions {
prepend: boolean;
}
export interface PreloadStylesheetOptions {
prefetch: boolean;
}
export default class StylesheetLoader {
private _stylesheets;
private _preloadedStylesheets;
loadStylesheet(src: string, options?: LoadStylesheetOptions): Promise<Event>;
loadStylesheets(urls: string[], options?: LoadStylesheetOptions): Promise<Event[]>;
preloadStylesheet(url: string, options?: PreloadStylesheetOptions): Promise<Event>;
preloadStylesheets(urls: string[], options?: PreloadStylesheetOptions): Promise<Event[]>;
}

@@ -6,2 +6,3 @@ "use strict";

this._stylesheets = {};
this._preloadedStylesheets = {};
}

@@ -35,2 +36,27 @@ StylesheetLoader.prototype.loadStylesheet = function (src, options) {

};
StylesheetLoader.prototype.preloadStylesheet = function (url, options) {
var _this = this;
if (!this._preloadedStylesheets[url]) {
this._preloadedStylesheets[url] = new Promise(function (resolve, reject) {
var preloadedStylesheet = document.createElement('link');
var _a = (options || {}).prefetch, prefetch = _a === void 0 ? false : _a;
preloadedStylesheet.as = 'style';
preloadedStylesheet.rel = prefetch ? 'prefetch' : 'preload';
preloadedStylesheet.href = url;
preloadedStylesheet.onload = function (event) {
resolve(event);
};
preloadedStylesheet.onerror = function (event) {
delete _this._preloadedStylesheets[url];
reject(event);
};
document.head.appendChild(preloadedStylesheet);
});
}
return this._preloadedStylesheets[url];
};
StylesheetLoader.prototype.preloadStylesheets = function (urls, options) {
var _this = this;
return Promise.all(urls.map(function (url) { return _this.preloadStylesheet(url, options); }));
};
return StylesheetLoader;

@@ -37,0 +63,0 @@ }());

@@ -1,1 +0,1 @@

{"version":3,"file":"stylesheet-loader.js","sourceRoot":"","sources":["../src/stylesheet-loader.ts"],"names":[],"mappings":";;AAIA;IAAA;QACY,iBAAY,GAAsC,EAAE,CAAC;IA8BjE,CAAC;IA5BG,yCAAc,GAAd,UAAe,GAAW,EAAE,OAA+B;QAA3D,iBAuBC;QAtBG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;YACzB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;gBACjD,IAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAA,4BAAe,EAAf,oCAAe,CAAmB;gBAE1C,UAAU,CAAC,MAAM,GAAG,UAAA,KAAK,IAAI,OAAA,OAAO,CAAC,KAAK,CAAC,EAAd,CAAc,CAAC;gBAC5C,UAAU,CAAC,OAAO,GAAG,UAAA,KAAK;oBACtB,OAAO,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;oBAC9B,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC,CAAC;gBACF,UAAU,CAAC,GAAG,GAAG,YAAY,CAAC;gBAC9B,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;gBAEtB,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;oBACtC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;iBACrE;qBAAM;oBACH,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;iBACzC;YACL,CAAC,CAAC,CAAC;SACN;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,0CAAe,GAAf,UAAgB,IAAc,EAAE,OAA+B;QAA/D,iBAEC;QADG,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,KAAI,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,EAAjC,CAAiC,CAAC,CAAC,CAAC;IAC3E,CAAC;IACL,uBAAC;AAAD,CAAC,AA/BD,IA+BC","sourcesContent":["export interface LoadStylesheetOptions {\n prepend: boolean;\n}\n\nexport default class StylesheetLoader {\n private _stylesheets: { [key: string]: Promise<Event> } = {};\n\n loadStylesheet(src: string, options?: LoadStylesheetOptions): Promise<Event> {\n if (!this._stylesheets[src]) {\n this._stylesheets[src] = new Promise((resolve, reject) => {\n const stylesheet = document.createElement('link');\n const { prepend = false } = options || {};\n\n stylesheet.onload = event => resolve(event);\n stylesheet.onerror = event => {\n delete this._stylesheets[src];\n reject(event);\n };\n stylesheet.rel = 'stylesheet';\n stylesheet.href = src;\n\n if (prepend && document.head.children[0]) {\n document.head.insertBefore(stylesheet, document.head.children[0]);\n } else {\n document.head.appendChild(stylesheet);\n }\n });\n }\n\n return this._stylesheets[src];\n }\n\n loadStylesheets(urls: string[], options?: LoadStylesheetOptions): Promise<Event[]> {\n return Promise.all(urls.map(url => this.loadStylesheet(url, options)));\n }\n}\n"]}
{"version":3,"file":"stylesheet-loader.js","sourceRoot":"","sources":["../src/stylesheet-loader.ts"],"names":[],"mappings":";;AAQA;IAAA;QACY,iBAAY,GAAsC,EAAE,CAAC;QACrD,0BAAqB,GAAsC,EAAE,CAAC;IA4D1E,CAAC;IA1DG,yCAAc,GAAd,UAAe,GAAW,EAAE,OAA+B;QAA3D,iBAuBC;QAtBG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;YACzB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;gBACjD,IAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAA,4BAAe,EAAf,oCAAe,CAAmB;gBAE1C,UAAU,CAAC,MAAM,GAAG,UAAA,KAAK,IAAI,OAAA,OAAO,CAAC,KAAK,CAAC,EAAd,CAAc,CAAC;gBAC5C,UAAU,CAAC,OAAO,GAAG,UAAA,KAAK;oBACtB,OAAO,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;oBAC9B,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC,CAAC;gBACF,UAAU,CAAC,GAAG,GAAG,YAAY,CAAC;gBAC9B,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;gBAEtB,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;oBACtC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;iBACrE;qBAAM;oBACH,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;iBACzC;YACL,CAAC,CAAC,CAAC;SACN;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,0CAAe,GAAf,UAAgB,IAAc,EAAE,OAA+B;QAA/D,iBAEC;QADG,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,KAAI,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,EAAjC,CAAiC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,4CAAiB,GAAjB,UAAkB,GAAW,EAAE,OAAkC;QAAjE,iBAwBC;QAvBG,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE;YAClC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;gBAC1D,IAAM,mBAAmB,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBACnD,IAAA,6BAAgB,EAAhB,qCAAgB,CAAmB;gBAE3C,mBAAmB,CAAC,EAAE,GAAG,OAAO,CAAC;gBACjC,mBAAmB,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC5D,mBAAmB,CAAC,IAAI,GAAG,GAAG,CAAC;gBAE/B,mBAAmB,CAAC,MAAM,GAAG,UAAA,KAAK;oBAC9B,OAAO,CAAC,KAAK,CAAC,CAAC;gBACnB,CAAC,CAAC;gBAEF,mBAAmB,CAAC,OAAO,GAAG,UAAA,KAAK;oBAC/B,OAAO,KAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;oBACvC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC,CAAC;gBAEF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;SACN;QAED,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED,6CAAkB,GAAlB,UAAmB,IAAc,EAAE,OAAkC;QAArE,iBAEC;QADG,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,KAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,EAApC,CAAoC,CAAC,CAAC,CAAC;IAC9E,CAAC;IACL,uBAAC;AAAD,CAAC,AA9DD,IA8DC","sourcesContent":["export interface LoadStylesheetOptions {\n prepend: boolean;\n}\n\nexport interface PreloadStylesheetOptions {\n prefetch: boolean;\n}\n\nexport default class StylesheetLoader {\n private _stylesheets: { [key: string]: Promise<Event> } = {};\n private _preloadedStylesheets: { [key: string]: Promise<Event> } = {};\n\n loadStylesheet(src: string, options?: LoadStylesheetOptions): Promise<Event> {\n if (!this._stylesheets[src]) {\n this._stylesheets[src] = new Promise((resolve, reject) => {\n const stylesheet = document.createElement('link');\n const { prepend = false } = options || {};\n\n stylesheet.onload = event => resolve(event);\n stylesheet.onerror = event => {\n delete this._stylesheets[src];\n reject(event);\n };\n stylesheet.rel = 'stylesheet';\n stylesheet.href = src;\n\n if (prepend && document.head.children[0]) {\n document.head.insertBefore(stylesheet, document.head.children[0]);\n } else {\n document.head.appendChild(stylesheet);\n }\n });\n }\n\n return this._stylesheets[src];\n }\n\n loadStylesheets(urls: string[], options?: LoadStylesheetOptions): Promise<Event[]> {\n return Promise.all(urls.map(url => this.loadStylesheet(url, options)));\n }\n\n preloadStylesheet(url: string, options?: PreloadStylesheetOptions): Promise<Event> {\n if (!this._preloadedStylesheets[url]) {\n this._preloadedStylesheets[url] = new Promise((resolve, reject) => {\n const preloadedStylesheet = document.createElement('link');\n const { prefetch = false } = options || {};\n\n preloadedStylesheet.as = 'style';\n preloadedStylesheet.rel = prefetch ? 'prefetch' : 'preload';\n preloadedStylesheet.href = url;\n\n preloadedStylesheet.onload = event => {\n resolve(event);\n };\n\n preloadedStylesheet.onerror = event => {\n delete this._preloadedStylesheets[url];\n reject(event);\n };\n\n document.head.appendChild(preloadedStylesheet);\n });\n }\n\n return this._preloadedStylesheets[url];\n }\n\n preloadStylesheets(urls: string[], options?: PreloadStylesheetOptions): Promise<Event[]> {\n return Promise.all(urls.map(url => this.preloadStylesheet(url, options)));\n }\n}\n"]}
{
"name": "@bigcommerce/script-loader",
"version": "0.2.0",
"version": "1.0.0",
"description": "A library for loading JavaScript files asynchronously",

@@ -39,3 +39,3 @@ "license": "MIT",

"@bigcommerce/tslint-config": "^2.0.1",
"@bigcommerce/validate-commits": "^2.0.3",
"@bigcommerce/validate-commits": "^2.2.0",
"@types/jest": "^21.1.10",

@@ -42,0 +42,0 @@ "check-node-version": "^3.2.0",