@intlayer/config
Version:
Retrieve Intlayer configurations and manage environment variables for both server-side and client-side environments.
130 lines (128 loc) • 4.67 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
const require_utils_alias = require('../utils/alias.cjs');
const require_configFile_getConfiguration = require('../configFile/getConfiguration.cjs');
const require_bundle_logBundle = require('./logBundle.cjs');
const require_envVars_envVars = require('../envVars/envVars.cjs');
let node_path = require("node:path");
let node_fs_promises = require("node:fs/promises");
let _intlayer_types_package_json = require("@intlayer/types/package.json");
_intlayer_types_package_json = require_runtime.__toESM(_intlayer_types_package_json);
let esbuild = require("esbuild");
let node_child_process = require("node:child_process");
let node_util = require("node:util");
//#region src/bundle/index.ts
const execAsync = (0, node_util.promisify)(node_child_process.exec);
const packageList = [
"next-intlayer",
"react-intlayer",
"vue-intlayer",
"svelte-intlayer",
"preact-intlayer",
"solid-intlayer",
"angular-intlayer",
"lit-intlayer",
"express-intlayer",
"hono-intlayer",
"fastify-intlayer",
"adonis-intlayer",
"vanilla-intlayer",
"intlayer"
];
const defaultVersion = _intlayer_types_package_json.default.version;
/**
* Bundle the application content using esbuild.
* It uses the Intlayer configuration to set up aliases and other esbuild options.
*
* @param options - Bundle options including entryPoint, outfile, and esbuild options.
* @returns The build result.
*/
const bundleIntlayer = async (options) => {
const { outfile = "intlayer-bundle.js", configOptions, bundlePackages = [...packageList], version = defaultVersion, ...esbuildOptions } = options;
const intlayerConfig = require_configFile_getConfiguration.getConfiguration(configOptions);
const logger = new require_bundle_logBundle.BundleLogger(intlayerConfig);
const alias = require_utils_alias.getAlias({
configuration: intlayerConfig,
formatter: (value) => (0, node_path.resolve)(process.cwd(), value)
});
const treeShakingDefines = require_envVars_envVars.getConfigEnvVars(intlayerConfig, (key) => `process.env.${key}`, (value) => `"${value}"`);
const intlayerBundlePlugin = {
name: "intlayer-bundle-plugin",
setup(build) {
const packagesRegex = new RegExp(`^(${bundlePackages.map((packages) => packages.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|")})(\\/.*)?$`);
build.onResolve({ filter: packagesRegex }, () => ({ external: false }));
build.onResolve({ filter: /^@intlayer\// }, () => ({ external: false }));
}
};
const tempDir = (0, node_path.join)(intlayerConfig.system.tempDir, "intlayer-bundle-tmp");
logger.setStatus("installing");
try {
await (0, node_fs_promises.rm)(tempDir, {
recursive: true,
force: true
});
await (0, node_fs_promises.mkdir)(tempDir, { recursive: true });
const deps = Object.fromEntries(bundlePackages.map((pkg) => [pkg, version]));
await (0, node_fs_promises.writeFile)((0, node_path.join)(tempDir, "package.json"), JSON.stringify({
dependencies: deps,
type: "module"
}));
let pm = "npm install";
try {
await execAsync("bun --version");
pm = "bun install";
} catch {}
await execAsync(pm, { cwd: tempDir });
const buildOptions = {
bundle: true,
outfile: (0, node_path.isAbsolute)(outfile) ? outfile : (0, node_path.join)(process.cwd(), outfile),
absWorkingDir: tempDir,
platform: "browser",
conditions: [
"browser",
"module",
"import",
"default"
],
minify: true,
minifyIdentifiers: true,
treeShaking: true,
format: "iife",
ignoreAnnotations: true,
stdin: {
contents: bundlePackages.map((packageName) => {
const globalName = packageName.split("-").map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`).join("");
return `import * as ${globalName} from '${packageName}';\nif (typeof window !== 'undefined') { window['${globalName}'] = ${globalName}; }`;
}).join("\n"),
resolveDir: tempDir
},
define: {
"process.env": "{}",
...treeShakingDefines,
...esbuildOptions.define
},
alias: {
...alias,
...esbuildOptions.alias
},
...esbuildOptions,
plugins: [intlayerBundlePlugin, ...esbuildOptions.plugins || []]
};
logger.setStatus("bundling");
const result = await (0, esbuild.build)(buildOptions);
logger.setStatus("success");
return result;
} catch (error) {
logger.setError(error);
throw error;
} finally {
await (0, node_fs_promises.rm)(tempDir, {
recursive: true,
force: true
});
}
};
//#endregion
exports.bundleIntlayer = bundleIntlayer;
exports.packageList = packageList;
//# sourceMappingURL=index.cjs.map