Files
docker_dev/lowcoder/client/packages/lowcoder-cli/dev-utils/external.js
2025-11-17 18:45:35 +01:00

103 lines
2.2 KiB
JavaScript

/**
* libs to import as global var
* name: module name
* mergeDefaultAndNameExports: whether to merge default and named exports
*/
export const libs = [
"axios",
"redux",
"react-router",
"react-router-dom",
"react-redux",
"react",
"react-dom",
"lodash",
"history",
"antd",
"@dnd-kit/core",
"@dnd-kit/modifiers",
"@dnd-kit/sortable",
"@dnd-kit/utilities",
{
name: "moment",
extractDefault: true,
},
{
name: "dayjs",
extractDefault: true,
},
{
name: "lowcoder-sdk",
from: "./src/index.sdk.ts",
},
{
name: "styled-components",
mergeDefaultAndNameExports: true,
},
];
/**
* get global var name from module name
* @param {string} name
* @returns
*/
export const getLibGlobalVarName = (name) => {
return "$" + name.replace(/@/g, "$").replace(/[\/\-]/g, "_");
};
export const getLibNames = () => {
return libs.map((i) => {
if (typeof i === "object") {
return i.name;
}
return i;
});
};
export const getAllLibGlobalVarNames = () => {
const ret = {};
libs.forEach((lib) => {
let name = lib;
if (typeof lib === "object") {
name = lib.name;
}
ret[name] = getLibGlobalVarName(name);
});
return ret;
};
export const libsImportCode = (exclude = []) => {
const importLines = [];
const assignLines = [];
libs.forEach((i) => {
let name = i;
let merge = false;
let from = name;
let extractDefault = false;
if (typeof i === "object") {
name = i.name;
merge = i.mergeDefaultAndNameExports ?? false;
from = i.from ?? name;
extractDefault = i.extractDefault ?? false;
}
if (exclude.includes(name)) {
return;
}
const varName = getLibGlobalVarName(name);
if (merge) {
importLines.push(`import * as ${varName}_named_exports from '${from}';`);
importLines.push(`import ${varName} from '${from}';`);
assignLines.push(`Object.assign(${varName}, ${varName}_named_exports);`);
} else if (extractDefault) {
importLines.push(`import ${varName} from '${from}';`);
} else {
importLines.push(`import * as ${varName} from '${from}';`);
}
assignLines.push(`window.${varName} = ${varName};`);
});
return importLines.concat(assignLines).join("\n");
};