UNPKG

@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
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