@memberjunction/react-runtime
Version:
Platform-agnostic React component runtime for MemberJunction. Provides core compilation, registry, and execution capabilities for React components in any JavaScript environment.
369 lines • 14.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.unwrapAllComponents = exports.unwrapComponents = exports.unwrapComponent = exports.unwrapAllLibraryComponents = exports.unwrapLibraryComponents = exports.unwrapLibraryComponent = void 0;
function coreUnwrapLogic(library, exportName, debug = false) {
if (library == null) {
throw new Error(`Cannot unwrap export '${exportName}' from null or undefined library`);
}
const libraryType = typeof library;
if (libraryType === 'string' || libraryType === 'number' || libraryType === 'boolean' || libraryType === 'symbol' || libraryType === 'bigint') {
throw new Error(`Cannot unwrap export '${exportName}' from ${libraryType} value. Library must be an object or function.`);
}
if (libraryType === 'function') {
if (debug) {
console.log(`📦 Library is a single function/class, returning it for '${exportName}'`);
console.log(` Function name: ${library.name || 'anonymous'}`);
const hasStatics = Object.keys(library).some(key => key !== 'prototype' && key !== 'length' && key !== 'name' && key !== 'caller' && key !== 'arguments');
if (hasStatics) {
console.log(` Has static properties: ${Object.keys(library).filter(k => k !== 'prototype' && k !== 'length' && k !== 'name' && k !== 'caller' && k !== 'arguments').join(', ')}`);
}
}
return library;
}
if (libraryType === 'object') {
const objectKeys = Object.keys(library).filter(key => key !== '__esModule' && key !== 'default');
if (objectKeys.length === 1 && typeof library[objectKeys[0]] === 'function') {
if (debug) {
console.log(`📦 Library has single exported function '${objectKeys[0]}', using it for '${exportName}'`);
}
return library[objectKeys[0]];
}
if (objectKeys.length === 0 && library.default && typeof library.default === 'function') {
if (debug) {
console.log(`📦 Library only has default export (function), using it for '${exportName}'`);
}
return library.default;
}
}
if (debug) {
console.log(`📦 Library is a complex object, attempting standard unwrapping for '${exportName}'`);
}
if (exportName.includes('.')) {
const parts = exportName.split('.');
let current = library;
let pathTaken = 'library';
for (let i = 0; i < parts.length; i++) {
const part = parts[i];
if (!current) {
if (debug) {
console.log(` ❌ Cannot access '${part}' - parent is null/undefined at path: ${pathTaken}`);
}
return undefined;
}
if (i === 0) {
if (debug) {
console.log(` Checking library.${part}...`);
}
const firstComponent = current[part];
if (debug) {
console.log(` Checking library.default.${part}...`);
}
const firstDefault = current.default?.[part];
if (firstComponent) {
current = firstComponent;
pathTaken = `library.${part}`;
if (debug) {
console.log(` ✅ Found via ${pathTaken}`);
}
}
else if (firstDefault) {
current = firstDefault;
pathTaken = `library.default.${part}`;
if (debug) {
console.log(` ✅ Found via ${pathTaken}`);
}
}
else {
if (debug) {
console.log(` ❌ Could not find '${part}' in library`);
}
return undefined;
}
}
else {
if (debug) {
console.log(` Checking ${pathTaken}.${part}...`);
}
if (current[part]) {
current = current[part];
pathTaken += `.${part}`;
if (debug) {
console.log(` ✅ Found via ${pathTaken}`);
}
}
else if (current.default?.[part]) {
current = current.default[part];
pathTaken += `.default.${part}`;
if (debug) {
console.log(` ✅ Found via ${pathTaken}.default`);
}
}
else {
if (debug) {
console.log(` ❌ Could not find '${part}' at path: ${pathTaken}`);
}
return undefined;
}
}
}
const isValidExport = (obj) => {
return obj != null;
};
if (isValidExport(current)) {
if (debug) {
console.log(`✅ Successfully unwrapped '${exportName}' via: ${pathTaken}`);
const exportType = typeof current === 'function' ?
(current.prototype?.isReactComponent ? 'React class component' : 'function/component') :
(typeof current === 'object' ? 'object/utility' : typeof current);
console.log(` Export type: ${exportType}`);
}
return current;
}
else if (current?.default && isValidExport(current.default)) {
if (debug) {
console.log(`✅ Successfully unwrapped '${exportName}' via: ${pathTaken}.default`);
}
return current.default;
}
else {
if (debug) {
console.log(` ❌ '${exportName}' at ${pathTaken} is null/undefined`);
}
return undefined;
}
}
let unwrapPath = '';
let component;
const isValidExport = (obj) => {
return obj != null;
};
if (debug) {
console.log(` Checking library.${exportName}...`);
}
const directComponent = library[exportName];
if (debug && directComponent) {
console.log(` Checking library.${exportName}.default...`);
}
const moduleDefault = directComponent?.default;
if (debug && library.default) {
console.log(` Checking library.default.${exportName}...`);
}
const libraryDefault = library.default?.[exportName];
if (debug && libraryDefault) {
console.log(` Checking library.default.${exportName}.default...`);
}
const libraryDefaultModule = library.default?.[exportName]?.default;
if (isValidExport(directComponent)) {
component = directComponent;
unwrapPath = `library.${exportName}`;
if (debug) {
console.log(` ✅ Found via ${unwrapPath}`);
const exportType = typeof directComponent === 'function' ? 'function' :
typeof directComponent === 'object' ? 'object' : typeof directComponent;
console.log(` Export type: ${exportType}`);
}
}
else if (isValidExport(moduleDefault)) {
component = moduleDefault;
unwrapPath = `library.${exportName}.default`;
if (debug) {
console.log(` ✅ Found via ${unwrapPath}`);
}
}
else if (isValidExport(libraryDefault)) {
component = libraryDefault;
unwrapPath = `library.default.${exportName}`;
if (debug) {
console.log(` ✅ Found via ${unwrapPath}`);
}
}
else if (isValidExport(libraryDefaultModule)) {
component = libraryDefaultModule;
unwrapPath = `library.default.${exportName}.default`;
if (debug) {
console.log(` ✅ Found via ${unwrapPath}`);
}
}
if (debug && !component) {
console.log(` ❌ Could not unwrap '${exportName}' from library (all paths were null/undefined)`);
console.log(' Library structure:');
console.log(' - Top-level keys:', Object.keys(library).slice(0, 10).join(', '), Object.keys(library).length > 10 ? '...' : '');
console.log(` - library.${exportName}:`, directComponent);
if (library.default) {
console.log(' - library.default exists, keys:', Object.keys(library.default).slice(0, 10).join(', '));
}
}
return component;
}
function unwrapLibraryComponent(library, exportName, debug = false) {
try {
return coreUnwrapLogic(library, exportName, debug);
}
catch (error) {
if (debug) {
console.error(`🚫 Error unwrapping export '${exportName}':`, error.message);
}
throw error;
}
}
exports.unwrapLibraryComponent = unwrapLibraryComponent;
function unwrapLibraryComponents(library, ...exportNames) {
let debug = false;
let names = exportNames;
const lastArg = exportNames[exportNames.length - 1];
if (typeof lastArg === 'boolean') {
debug = lastArg;
names = exportNames.slice(0, -1);
}
const components = {};
const found = [];
const notFound = [];
const libraryType = typeof library;
if (library == null ||
libraryType === 'string' ||
libraryType === 'number' ||
libraryType === 'boolean' ||
libraryType === 'symbol' ||
libraryType === 'bigint') {
try {
coreUnwrapLogic(library, names[0] || 'unknown', debug);
}
catch (error) {
if (debug) {
console.error(`🚫 ${error.message}`);
}
throw error;
}
}
if (libraryType === 'function') {
if (debug) {
console.log(`📦 Library is a single function/class, returning it for all ${names.length} requested names`);
}
for (const name of names) {
components[name] = library;
found.push(name);
}
}
else {
for (const name of names) {
try {
const component = coreUnwrapLogic(library, name, false);
if (component) {
components[name] = component;
if (name.includes('.')) {
const lastPart = name.split('.').pop();
if (lastPart && !components[lastPart]) {
components[lastPart] = component;
}
}
found.push(name);
}
else {
notFound.push(name);
}
}
catch (error) {
throw error;
}
}
}
if (debug) {
if (found.length > 0) {
console.log(`📦 Successfully unwrapped ${found.length} components:`, found.join(', '));
}
if (notFound.length > 0) {
console.warn(`⚠️ Could not unwrap ${notFound.length} components:`, notFound.join(', '));
}
}
return components;
}
exports.unwrapLibraryComponents = unwrapLibraryComponents;
function unwrapAllLibraryComponents(library, debug = false) {
const components = {};
const libraryType = typeof library;
if (library == null ||
libraryType === 'string' ||
libraryType === 'number' ||
libraryType === 'boolean' ||
libraryType === 'symbol' ||
libraryType === 'bigint') {
try {
coreUnwrapLogic(library, 'auto-detect', debug);
}
catch (error) {
if (debug) {
console.error(`🚫 ${error.message}`);
}
throw error;
}
}
if (libraryType === 'function') {
const functionName = library.name || 'Component';
if (debug) {
console.log(`📦 Library is a single function/class '${functionName}', returning it as the only component`);
}
components[functionName] = library;
return components;
}
const looksLikeComponentName = (key) => {
if (!key || key.length === 0)
return false;
if (key[0] !== key[0].toUpperCase())
return false;
if (['__esModule', 'VERSION', 'version', 'default'].includes(key))
return false;
return /[a-z]/.test(key);
};
const checkedKeys = new Set();
for (const key of Object.keys(library)) {
if (looksLikeComponentName(key)) {
try {
const component = coreUnwrapLogic(library, key, false);
if (component) {
components[key] = component;
checkedKeys.add(key);
}
}
catch (error) {
}
}
}
if (library.default && typeof library.default === 'object') {
for (const key of Object.keys(library.default)) {
if (!checkedKeys.has(key) && looksLikeComponentName(key)) {
try {
const component = coreUnwrapLogic(library, key, false);
if (component) {
components[key] = component;
checkedKeys.add(key);
}
}
catch (error) {
}
}
}
}
if (debug) {
const exportNames = Object.keys(components);
if (exportNames.length > 0) {
console.log(`🔍 Auto-detected ${exportNames.length} components from library`);
console.log(' Components:', exportNames.slice(0, 20).join(', '), exportNames.length > 20 ? `... and ${exportNames.length - 20} more` : '');
}
else {
console.warn('⚠️ No components auto-detected from library');
console.log(' Library type:', typeof library);
if (library) {
console.log(' Top-level keys:', Object.keys(library).slice(0, 10).join(', '));
}
}
}
return components;
}
exports.unwrapAllLibraryComponents = unwrapAllLibraryComponents;
exports.unwrapComponent = unwrapLibraryComponent;
const unwrapComponents = (library, exportNames, debug = false) => {
return unwrapLibraryComponents(library, ...exportNames, debug);
};
exports.unwrapComponents = unwrapComponents;
exports.unwrapAllComponents = unwrapAllLibraryComponents;
//# sourceMappingURL=component-unwrapper.js.map