@rws-framework/client
Version:
This package provides the core client-side framework for Realtime Web Suit (RWS), enabling modular, asynchronous web components, state management, and integration with backend services. It is located in `.dev/client`.
67 lines (49 loc) • 2.11 kB
JavaScript
const fs = require('fs');
const path = require('path');
const tools = require('../../../_tools');
const frontendRequestContextCache = [];
const _defaultOpts = {
_vars: {
packed: [],
ignored: [],
frontendRequestContextCache
}
}
const externals = (declaredCodeBase, nodeModules, automatedChunks, externalOptions = _defaultOpts) => ({context, request}, callback) => {
let theOptions = _defaultOpts;
if(externalOptions !== null){
theOptions = Object.assign(theOptions, externalOptions);
}
const codeBase = path.resolve(declaredCodeBase);
const ignored = [
/tslib/,
/reflect-metadata/,
/\@microsoft\/fast-foundation\/.*/,
]
const enforced = [
/\@microsoft\/fast-foundation\/.*\/di/,
/\@microsoft\/fast-foundation\/.*\/foundation-element/,
]
const frontendDirs = [
codeBase,
path.resolve(__dirname,'..','..','..')
];
const inFrontendContext = frontendDirs.some(dir => context.startsWith(dir)) ||
externalOptions._vars.frontendRequestContextCache.some(package => context.indexOf(package.request) > -1)
;
const patternInContextOrRequest = pattern => pattern.test(request) || pattern.test(context);
const isIgnored = ignored.some(patternInContextOrRequest);
const isEnforced = enforced.some(patternInContextOrRequest);
if (isEnforced || (!isIgnored && inFrontendContext)) {
if(!externalOptions._vars.packed.find(package => package.request === request && package.context === context)){
externalOptions._vars.packed.push({request, context});
}
externalOptions._vars.frontendRequestContextCache.push({request, context});
//handled as RWS async dependency
return callback();
}
externalOptions._vars.ignored.push({request, context});
//using require from vendors
callback(null, false);
}
module.exports = {rwsExternals: externals, _externalsDefaults: _defaultOpts};