piral-base
Advanced tools
Comparing version 0.11.0-pre.937 to 0.11.0-pre.942
@@ -20,1 +20,15 @@ import { PiletApp, AvailableDependencies } from './types'; | ||
export declare function compileDependency(name: string, content: string, link?: string, dependencies?: AvailableDependencies): Promise<PiletApp>; | ||
declare global { | ||
interface HTMLScriptElement { | ||
app?: PiletApp; | ||
} | ||
} | ||
/** | ||
* Includes the given script via its URL with a dependency resolution. | ||
* @param name The name of the dependency to include. | ||
* @param link The link to the dependency. | ||
* @param requireRef The name of the global require to inject. | ||
* @param dependencies The globally available dependencies. | ||
* @returns The evaluated module. | ||
*/ | ||
export declare function includeDependency(name: string, link: string, requireRef: string, dependencies?: AvailableDependencies): Promise<PiletApp>; |
@@ -12,3 +12,3 @@ "use strict"; | ||
} | ||
function checkPiletApp(app) { | ||
function checkPiletApp(name, app) { | ||
if (!app) { | ||
@@ -27,2 +27,5 @@ console.error('Invalid module found.', name); | ||
} | ||
function getLocalRequire(dependencies = {}) { | ||
return (moduleName) => requireModule(moduleName, dependencies); | ||
} | ||
/** | ||
@@ -36,7 +39,7 @@ * Compiles the given content from a generic dependency. | ||
*/ | ||
function evalDependency(name, content, link = '', dependencies = {}) { | ||
function evalDependency(name, content, link = '', dependencies) { | ||
const mod = { | ||
exports: {}, | ||
}; | ||
const require = (moduleName) => requireModule(moduleName, dependencies); | ||
const require = getLocalRequire(dependencies); | ||
try { | ||
@@ -61,7 +64,27 @@ const sourceUrl = link && `\n//# sourceURL=${link}`; | ||
*/ | ||
function compileDependency(name, content, link = '', dependencies = {}) { | ||
function compileDependency(name, content, link = '', dependencies) { | ||
const app = evalDependency(name, content, link, dependencies); | ||
return Promise.resolve(app).then(checkPiletApp); | ||
return Promise.resolve(app).then(app => checkPiletApp(name, app)); | ||
} | ||
exports.compileDependency = compileDependency; | ||
/** | ||
* Includes the given script via its URL with a dependency resolution. | ||
* @param name The name of the dependency to include. | ||
* @param link The link to the dependency. | ||
* @param requireRef The name of the global require to inject. | ||
* @param dependencies The globally available dependencies. | ||
* @returns The evaluated module. | ||
*/ | ||
function includeDependency(name, link, requireRef, dependencies) { | ||
return new Promise(resolve => { | ||
const s = document.createElement('script'); | ||
s.async = true; | ||
s.src = link; | ||
window[requireRef] = getLocalRequire(dependencies); | ||
s.onload = () => resolve(checkPiletApp(name, s.app)); | ||
s.onerror = () => resolve(checkPiletApp(name)); | ||
document.body.appendChild(s); | ||
}); | ||
} | ||
exports.includeDependency = includeDependency; | ||
//# sourceMappingURL=dependency.js.map |
@@ -6,5 +6,5 @@ "use strict"; | ||
const dependency_1 = require("./dependency"); | ||
function loadFromContent(meta, content, getDependencies, link) { | ||
function loadFrom(meta, getDependencies, loader) { | ||
const dependencies = Object.assign({}, (getDependencies(meta) || {})); | ||
return dependency_1.compileDependency(meta.name, content, link, dependencies).then(app => (Object.assign(Object.assign({}, app), meta))); | ||
return loader(dependencies).then(app => (Object.assign(Object.assign({}, app), meta))); | ||
} | ||
@@ -27,7 +27,12 @@ function checkFetchPilets(fetchPilets) { | ||
function loadPilet(meta, getDependencies, fetchDependency = fetch_1.defaultFetchDependency) { | ||
const { link, content } = meta; | ||
const retrieve = link ? fetchDependency(link) : content ? Promise.resolve(content) : undefined; | ||
if (retrieve) { | ||
return retrieve.then(content => loadFromContent(meta, content, getDependencies, link)); | ||
const { link, content, requireRef } = meta; | ||
if (requireRef) { | ||
return loadFrom(meta, getDependencies, deps => dependency_1.includeDependency(meta.name, link, requireRef, deps)); | ||
} | ||
else if (link) { | ||
return fetchDependency(link).then(content => loadFrom(meta, getDependencies, deps => dependency_1.compileDependency(meta.name, content, link, deps))); | ||
} | ||
else if (content) { | ||
return loadFrom(meta, getDependencies, deps => dependency_1.compileDependency(meta.name, content, link, deps)); | ||
} | ||
else { | ||
@@ -34,0 +39,0 @@ console.warn('Empty pilet found!', meta.name); |
@@ -23,2 +23,8 @@ /** | ||
/** | ||
* The reference name for the global require. | ||
* If set this wil trigger the script mode instead of the eval | ||
* mode. | ||
*/ | ||
requireRef?: string; | ||
/** | ||
* The computed hash value of the pilet's content. Should be | ||
@@ -25,0 +31,0 @@ * accurate to allow caching. |
@@ -9,2 +9,3 @@ import { PiletMetadata, AvailableDependencies, PiletDependencyGetter } from './types'; | ||
link?: string; | ||
requireRef?: string; | ||
hash: string; | ||
@@ -11,0 +12,0 @@ noCache?: string | boolean; |
{ | ||
"name": "piral-base", | ||
"version": "0.11.0-pre.937", | ||
"version": "0.11.0-pre.942", | ||
"description": "The base library for creating a Piral instance.", | ||
@@ -39,3 +39,3 @@ "keywords": [ | ||
}, | ||
"gitHead": "cbf15ae350358a406b53eea1774105ab4b02709c" | ||
"gitHead": "d8b76fd7dbc640799c7498884dfbfac8d8209ba1" | ||
} |
@@ -15,3 +15,3 @@ import { PiletApp, AvailableDependencies, PiletExports } from './types'; | ||
function checkPiletApp(app?: PiletApp): PiletApp { | ||
function checkPiletApp(name: string, app?: PiletApp): PiletApp { | ||
if (!app) { | ||
@@ -30,2 +30,6 @@ console.error('Invalid module found.', name); | ||
function getLocalRequire(dependencies: AvailableDependencies = {}) { | ||
return (moduleName: string) => requireModule(moduleName, dependencies); | ||
} | ||
/** | ||
@@ -39,7 +43,7 @@ * Compiles the given content from a generic dependency. | ||
*/ | ||
export function evalDependency(name: string, content: string, link = '', dependencies: AvailableDependencies = {}) { | ||
export function evalDependency(name: string, content: string, link = '', dependencies?: AvailableDependencies) { | ||
const mod = { | ||
exports: {}, | ||
} as PiletExports; | ||
const require = (moduleName: string) => requireModule(moduleName, dependencies); | ||
const require = getLocalRequire(dependencies); | ||
@@ -69,6 +73,37 @@ try { | ||
link = '', | ||
dependencies: AvailableDependencies = {}, | ||
dependencies?: AvailableDependencies, | ||
): Promise<PiletApp> { | ||
const app = evalDependency(name, content, link, dependencies); | ||
return Promise.resolve(app).then(checkPiletApp); | ||
return Promise.resolve(app).then(app => checkPiletApp(name, app)); | ||
} | ||
declare global { | ||
interface HTMLScriptElement { | ||
app?: PiletApp; | ||
} | ||
} | ||
/** | ||
* Includes the given script via its URL with a dependency resolution. | ||
* @param name The name of the dependency to include. | ||
* @param link The link to the dependency. | ||
* @param requireRef The name of the global require to inject. | ||
* @param dependencies The globally available dependencies. | ||
* @returns The evaluated module. | ||
*/ | ||
export function includeDependency( | ||
name: string, | ||
link: string, | ||
requireRef: string, | ||
dependencies?: AvailableDependencies, | ||
) { | ||
return new Promise<PiletApp>(resolve => { | ||
const s = document.createElement('script'); | ||
s.async = true; | ||
s.src = link; | ||
window[requireRef] = getLocalRequire(dependencies); | ||
s.onload = () => resolve(checkPiletApp(name, s.app)); | ||
s.onerror = () => resolve(checkPiletApp(name)); | ||
document.body.appendChild(s); | ||
}); | ||
} |
import { isfunc, createEmptyModule, getDependencyResolver } from './utils'; | ||
import { defaultFetchDependency } from './fetch'; | ||
import { compileDependency } from './dependency'; | ||
import { compileDependency, includeDependency } from './dependency'; | ||
import { | ||
@@ -11,9 +11,9 @@ PiletMetadata, | ||
AvailableDependencies, | ||
PiletApp, | ||
} from './types'; | ||
function loadFromContent( | ||
function loadFrom( | ||
meta: PiletMetadata, | ||
content: string, | ||
getDependencies: PiletDependencyGetter, | ||
link?: string, | ||
loader: (dependencies: AvailableDependencies) => Promise<PiletApp>, | ||
): Promise<Pilet> { | ||
@@ -23,3 +23,3 @@ const dependencies = { | ||
}; | ||
return compileDependency(meta.name, content, link, dependencies).then(app => ({ | ||
return loader(dependencies).then(app => ({ | ||
...app, | ||
@@ -52,7 +52,12 @@ ...meta, | ||
): Promise<Pilet> { | ||
const { link, content } = meta; | ||
const retrieve = link ? fetchDependency(link) : content ? Promise.resolve(content) : undefined; | ||
const { link, content, requireRef } = meta; | ||
if (retrieve) { | ||
return retrieve.then(content => loadFromContent(meta, content, getDependencies, link)); | ||
if (requireRef) { | ||
return loadFrom(meta, getDependencies, deps => includeDependency(meta.name, link, requireRef, deps)); | ||
} else if (link) { | ||
return fetchDependency(link).then(content => | ||
loadFrom(meta, getDependencies, deps => compileDependency(meta.name, content, link, deps)), | ||
); | ||
} else if (content) { | ||
return loadFrom(meta, getDependencies, deps => compileDependency(meta.name, content, link, deps)); | ||
} else { | ||
@@ -59,0 +64,0 @@ console.warn('Empty pilet found!', meta.name); |
@@ -23,2 +23,8 @@ /** | ||
/** | ||
* The reference name for the global require. | ||
* If set this wil trigger the script mode instead of the eval | ||
* mode. | ||
*/ | ||
requireRef?: string; | ||
/** | ||
* The computed hash value of the pilet's content. Should be | ||
@@ -25,0 +31,0 @@ * accurate to allow caching. |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
73110
1621