initial commit
This commit is contained in:
@@ -0,0 +1,229 @@
|
||||
shadow$provide.module$node_modules$pixi_DOT_js$lib$assets$resolver$Resolver = function(global, require, module, exports) {
|
||||
function getUrlExtension(url) {
|
||||
return url.split(".").pop().split("?").shift().split("#").shift();
|
||||
}
|
||||
var warn = require("module$node_modules$pixi_DOT_js$lib$utils$logging$warn"), path = require("module$node_modules$pixi_DOT_js$lib$utils$path"), convertToList = require("module$node_modules$pixi_DOT_js$lib$assets$utils$convertToList"), createStringVariations = require("module$node_modules$pixi_DOT_js$lib$assets$utils$createStringVariations"), isSingleItem = require("module$node_modules$pixi_DOT_js$lib$assets$utils$isSingleItem");
|
||||
"use strict";
|
||||
class Resolver {
|
||||
constructor() {
|
||||
this._defaultBundleIdentifierOptions = {connector:"-", createBundleAssetId:(bundleId, assetId) => `${bundleId}${this._bundleIdConnector}${assetId}`, extractAssetIdFromBundle:(bundleId, assetBundleId) => assetBundleId.replace(`${bundleId}${this._bundleIdConnector}`, "")};
|
||||
this._bundleIdConnector = this._defaultBundleIdentifierOptions.connector;
|
||||
this._createBundleAssetId = this._defaultBundleIdentifierOptions.createBundleAssetId;
|
||||
this._extractAssetIdFromBundle = this._defaultBundleIdentifierOptions.extractAssetIdFromBundle;
|
||||
this._assetMap = {};
|
||||
this._preferredOrder = [];
|
||||
this._parsers = [];
|
||||
this._resolverHash = {};
|
||||
this._bundles = {};
|
||||
}
|
||||
setBundleIdentifier(bundleIdentifier) {
|
||||
this._bundleIdConnector = bundleIdentifier.connector ?? this._bundleIdConnector;
|
||||
this._createBundleAssetId = bundleIdentifier.createBundleAssetId ?? this._createBundleAssetId;
|
||||
this._extractAssetIdFromBundle = bundleIdentifier.extractAssetIdFromBundle ?? this._extractAssetIdFromBundle;
|
||||
if ("bar" !== this._extractAssetIdFromBundle("foo", this._createBundleAssetId("foo", "bar"))) {
|
||||
throw Error("[Resolver] GenerateBundleAssetId are not working correctly");
|
||||
}
|
||||
}
|
||||
prefer(...preferOrders) {
|
||||
preferOrders.forEach(prefer => {
|
||||
this._preferredOrder.push(prefer);
|
||||
prefer.priority || (prefer.priority = Object.keys(prefer.params));
|
||||
});
|
||||
this._resolverHash = {};
|
||||
}
|
||||
set basePath(basePath) {
|
||||
this._basePath = basePath;
|
||||
}
|
||||
get basePath() {
|
||||
return this._basePath;
|
||||
}
|
||||
set rootPath(rootPath) {
|
||||
this._rootPath = rootPath;
|
||||
}
|
||||
get rootPath() {
|
||||
return this._rootPath;
|
||||
}
|
||||
get parsers() {
|
||||
return this._parsers;
|
||||
}
|
||||
reset() {
|
||||
this.setBundleIdentifier(this._defaultBundleIdentifierOptions);
|
||||
this._assetMap = {};
|
||||
this._preferredOrder = [];
|
||||
this._resolverHash = {};
|
||||
this._manifest = this._basePath = this._rootPath = null;
|
||||
this._bundles = {};
|
||||
this._defaultSearchParams = null;
|
||||
}
|
||||
setDefaultSearchParams(searchParams) {
|
||||
this._defaultSearchParams = "string" === typeof searchParams ? searchParams : Object.keys(searchParams).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(searchParams[key])}`).join("\x26");
|
||||
}
|
||||
getAlias(asset) {
|
||||
const {alias, src} = asset;
|
||||
return convertToList.convertToList(alias || src, value => "string" === typeof value ? value : Array.isArray(value) ? value.map(v => v?.src ?? v) : value?.src ? value.src : value, !0);
|
||||
}
|
||||
removeAlias(alias, asset) {
|
||||
!this._assetMap[alias] || asset && asset !== this._resolverHash[alias] || (delete this._resolverHash[alias], delete this._assetMap[alias]);
|
||||
}
|
||||
addManifest(manifest) {
|
||||
this._manifest && warn.warn("[Resolver] Manifest already exists, this will be overwritten");
|
||||
this._manifest = manifest;
|
||||
manifest.bundles.forEach(bundle => {
|
||||
this.addBundle(bundle.name, bundle.assets);
|
||||
});
|
||||
}
|
||||
addBundle(bundleId, assets) {
|
||||
const assetNames = [];
|
||||
let convertedAssets = assets;
|
||||
Array.isArray(assets) || (convertedAssets = Object.entries(assets).map(([alias, src]) => "string" === typeof src || Array.isArray(src) ? {alias, src} : {alias, ...src}));
|
||||
convertedAssets.forEach(asset => {
|
||||
const srcs = asset.src;
|
||||
var aliases = asset.alias;
|
||||
if ("string" === typeof aliases) {
|
||||
var bundleAssetId = this._createBundleAssetId(bundleId, aliases);
|
||||
assetNames.push(bundleAssetId);
|
||||
aliases = [aliases, bundleAssetId];
|
||||
} else {
|
||||
bundleAssetId = aliases.map(name => this._createBundleAssetId(bundleId, name)), assetNames.push(...bundleAssetId), aliases = [...aliases, ...bundleAssetId];
|
||||
}
|
||||
this.add({...asset, alias:aliases, src:srcs});
|
||||
});
|
||||
this._bundles[bundleId] = assetNames;
|
||||
}
|
||||
add(aliases) {
|
||||
const assets = [];
|
||||
Array.isArray(aliases) ? assets.push(...aliases) : assets.push(aliases);
|
||||
let keyCheck;
|
||||
keyCheck = key => {
|
||||
this.hasKey(key) && warn.warn(`[Resolver] already has key: ${key} overwriting`);
|
||||
};
|
||||
convertToList.convertToList(assets).forEach(asset => {
|
||||
var {src} = asset;
|
||||
let {data, format, loadParser:userDefinedLoadParser, parser:userDefinedParser} = asset;
|
||||
src = convertToList.convertToList(src).map(src2 => "string" === typeof src2 ? createStringVariations.createStringVariations(src2) : Array.isArray(src2) ? src2 : [src2]);
|
||||
const aliasesToUse = this.getAlias(asset);
|
||||
Array.isArray(aliasesToUse) ? aliasesToUse.forEach(keyCheck) : keyCheck(aliasesToUse);
|
||||
const resolvedAssets = [], parseUrl = url => {
|
||||
const parser = this._parsers.find(p => p.test(url));
|
||||
return {src:url, ...parser?.parse(url)};
|
||||
};
|
||||
src.forEach(srcs => {
|
||||
srcs.forEach(src2 => {
|
||||
if ("object" !== typeof src2) {
|
||||
src2 = parseUrl(src2);
|
||||
} else {
|
||||
data = src2.data ?? data;
|
||||
format = src2.format ?? format;
|
||||
if (src2.loadParser || src2.parser) {
|
||||
userDefinedLoadParser = src2.loadParser ?? userDefinedLoadParser, userDefinedParser = src2.parser ?? userDefinedParser;
|
||||
}
|
||||
src2 = {...parseUrl(src2.src), ...src2};
|
||||
}
|
||||
if (!aliasesToUse) {
|
||||
throw Error(`[Resolver] alias is undefined for this asset: ${src2.src}`);
|
||||
}
|
||||
src2 = this._buildResolvedAsset(src2, {aliases:aliasesToUse, data, format, loadParser:userDefinedLoadParser, parser:userDefinedParser, progressSize:asset.progressSize});
|
||||
resolvedAssets.push(src2);
|
||||
});
|
||||
});
|
||||
aliasesToUse.forEach(alias => {
|
||||
this._assetMap[alias] = resolvedAssets;
|
||||
});
|
||||
});
|
||||
}
|
||||
resolveBundle(bundleIds) {
|
||||
const singleAsset = isSingleItem.isSingleItem(bundleIds);
|
||||
bundleIds = convertToList.convertToList(bundleIds);
|
||||
const out = {};
|
||||
bundleIds.forEach(bundleId => {
|
||||
var assetNames = this._bundles[bundleId];
|
||||
if (assetNames) {
|
||||
assetNames = this.resolve(assetNames);
|
||||
const assets = {};
|
||||
for (const key in assetNames) {
|
||||
const asset = assetNames[key];
|
||||
assets[this._extractAssetIdFromBundle(bundleId, key)] = asset;
|
||||
}
|
||||
out[bundleId] = assets;
|
||||
}
|
||||
});
|
||||
return singleAsset ? out[bundleIds[0]] : out;
|
||||
}
|
||||
resolveUrl(key) {
|
||||
const result = this.resolve(key);
|
||||
if ("string" !== typeof key) {
|
||||
key = {};
|
||||
for (const i in result) {
|
||||
key[i] = result[i].src;
|
||||
}
|
||||
return key;
|
||||
}
|
||||
return result.src;
|
||||
}
|
||||
resolve(keys) {
|
||||
const singleAsset = isSingleItem.isSingleItem(keys);
|
||||
keys = convertToList.convertToList(keys);
|
||||
const result = {};
|
||||
keys.forEach(key => {
|
||||
if (!this._resolverHash[key]) {
|
||||
if (this._assetMap[key]) {
|
||||
let assets = this._assetMap[key];
|
||||
const preferredOrder = this._getPreferredOrder(assets);
|
||||
preferredOrder?.priority.forEach(priorityKey => {
|
||||
preferredOrder.params[priorityKey].forEach(value => {
|
||||
const filteredAssets = assets.filter(asset => asset[priorityKey] ? asset[priorityKey] === value : !1);
|
||||
filteredAssets.length && (assets = filteredAssets);
|
||||
});
|
||||
});
|
||||
this._resolverHash[key] = assets[0];
|
||||
} else {
|
||||
this._resolverHash[key] = this._buildResolvedAsset({alias:[key], src:key}, {});
|
||||
}
|
||||
}
|
||||
result[key] = this._resolverHash[key];
|
||||
});
|
||||
return singleAsset ? result[keys[0]] : result;
|
||||
}
|
||||
hasKey(key) {
|
||||
return !!this._assetMap[key];
|
||||
}
|
||||
hasBundle(key) {
|
||||
return !!this._bundles[key];
|
||||
}
|
||||
_getPreferredOrder(assets) {
|
||||
for (let i = 0; i < assets.length; i++) {
|
||||
const asset = assets[i], preferred = this._preferredOrder.find(preference => preference.params.format.includes(asset.format));
|
||||
if (preferred) {
|
||||
return preferred;
|
||||
}
|
||||
}
|
||||
return this._preferredOrder[0];
|
||||
}
|
||||
_appendDefaultSearchParams(url) {
|
||||
if (!this._defaultSearchParams) {
|
||||
return url;
|
||||
}
|
||||
const paramConnector = /\?/.test(url) ? "\x26" : "?";
|
||||
return `${url}${paramConnector}${this._defaultSearchParams}`;
|
||||
}
|
||||
_buildResolvedAsset(formattedAsset, data) {
|
||||
const {aliases, data:assetData, loadParser, parser, format, progressSize} = data;
|
||||
if (this._basePath || this._rootPath) {
|
||||
formattedAsset.src = path.path.toAbsolute(formattedAsset.src, this._basePath, this._rootPath);
|
||||
}
|
||||
formattedAsset.alias = aliases ?? formattedAsset.alias ?? [formattedAsset.src];
|
||||
formattedAsset.src = this._appendDefaultSearchParams(formattedAsset.src);
|
||||
formattedAsset.data = {...(assetData || {}), ...formattedAsset.data};
|
||||
formattedAsset.loadParser = loadParser ?? formattedAsset.loadParser;
|
||||
formattedAsset.parser = parser ?? formattedAsset.parser;
|
||||
formattedAsset.format = format ?? formattedAsset.format ?? getUrlExtension(formattedAsset.src);
|
||||
void 0 !== progressSize && (formattedAsset.progressSize = progressSize);
|
||||
return formattedAsset;
|
||||
}
|
||||
}
|
||||
Resolver.RETINA_PREFIX = /@([0-9\.]+)x/;
|
||||
exports.Resolver = Resolver;
|
||||
exports.getUrlExtension = getUrlExtension;
|
||||
};
|
||||
|
||||
//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$assets$resolver$Resolver.js.map
|
||||
Reference in New Issue
Block a user