@bigcommerce/script-loader
Advanced tools
+10
-0
@@ -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) |
@@ -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":"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","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"]} |
+2
-2
| { | ||
| "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", |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
29339
19.63%226
18.95%0
-100%