temporary

This commit is contained in:
2025-09-30 10:56:38 +02:00
commit 07e54ddeab
7903 changed files with 1688938 additions and 0 deletions

View File

@ -0,0 +1 @@
../../../@oxc-project+types@0.90.0/node_modules/@oxc-project/types

View File

@ -0,0 +1 @@
../../../@rolldown+binding-darwin-arm64@1.0.0-beta.39/node_modules/@rolldown/binding-darwin-arm64

View File

@ -0,0 +1 @@
../../../@rolldown+pluginutils@1.0.0-beta.39/node_modules/@rolldown/pluginutils

View File

@ -0,0 +1 @@
../../ansis@4.2.0/node_modules/ansis

View File

@ -0,0 +1,25 @@
MIT License
Copyright (c) 2024-present VoidZero Inc. & Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
end of terms and conditions
The licenses of externally maintained libraries from which parts of the Software is derived are listed [here](https://github.com/rolldown/rolldown/blob/main/THIRD-PARTY-LICENSE).

View File

@ -0,0 +1,2 @@
#!/usr/bin/env node
import '../dist/cli.mjs';

View File

@ -0,0 +1 @@
export { };

View File

@ -0,0 +1,579 @@
import "./shared/parse-ast-index-BzRh1cX7.mjs";
import { description, getCliSchemaInfo, getInputCliKeys, getOutputCliKeys, onExit, rolldown, validateCliOptions, version, watch } from "./shared/src-CC6sgydx.mjs";
import { arraify } from "./shared/misc-CQeo-AFx.mjs";
import { logger } from "./shared/logger-CiCY7ucm.mjs";
import { loadConfig } from "./shared/load-config-BhonyBZl.mjs";
import path from "node:path";
import colors from "ansis";
import { parseArgs } from "node:util";
import process$1 from "node:process";
import { performance } from "node:perf_hooks";
//#region src/cli/arguments/alias.ts
const alias = {
config: {
abbreviation: "c",
hint: "filename"
},
help: { abbreviation: "h" },
version: { abbreviation: "v" },
watch: { abbreviation: "w" },
dir: { abbreviation: "d" },
file: { abbreviation: "o" },
external: { abbreviation: "e" },
format: { abbreviation: "f" },
name: { abbreviation: "n" },
globals: { abbreviation: "g" },
sourcemap: {
abbreviation: "s",
default: true
},
minify: { abbreviation: "m" },
platform: { abbreviation: "p" },
assetFileNames: { hint: "name" },
chunkFileNames: { hint: "name" },
entryFileNames: { hint: "name" },
externalLiveBindings: {
default: true,
reverse: true
},
treeshake: {
default: true,
reverse: true
},
preserveEntrySignatures: {
default: "strict",
reverse: true
},
moduleTypes: { hint: "types" }
};
//#endregion
//#region src/cli/arguments/utils.ts
function setNestedProperty(obj, path$1, value) {
const keys = path$1.split(".");
let current = obj;
for (let i = 0; i < keys.length - 1; i++) {
if (!current[keys[i]]) current[keys[i]] = {};
current = current[keys[i]];
}
const finalKey = keys[keys.length - 1];
Object.defineProperty(current, finalKey, {
value,
writable: true,
enumerable: true,
configurable: true
});
}
function camelCaseToKebabCase(str) {
return str.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);
}
function kebabCaseToCamelCase(str) {
return str.replace(/-./g, (match) => match[1].toUpperCase());
}
//#endregion
//#region src/cli/arguments/normalize.ts
function normalizeCliOptions(cliOptions, positionals) {
const [data, errors] = validateCliOptions(cliOptions);
if (errors?.length) {
errors.forEach((error) => {
logger.error(`${error}. You can use \`rolldown -h\` to see the help.`);
});
process.exit(1);
}
const options$1 = data ?? {};
const result = {
input: {},
output: {},
help: options$1.help ?? false,
version: options$1.version ?? false,
watch: options$1.watch ?? false
};
if (typeof options$1.config === "string") result.config = options$1.config;
const keysOfInput = getInputCliKeys();
const keysOfOutput = getOutputCliKeys();
const reservedKeys = [
"help",
"version",
"config",
"watch"
];
for (let [key, value] of Object.entries(options$1)) {
const [primary] = key.split(".");
if (keysOfInput.includes(primary)) setNestedProperty(result.input, key, value);
else if (keysOfOutput.includes(primary)) setNestedProperty(result.output, key, value);
else if (!reservedKeys.includes(key)) {
logger.error(`Unknown option: ${key}`);
process.exit(1);
}
}
if (!result.config && positionals.length > 0) if (Array.isArray(result.input.input)) result.input.input.push(...positionals);
else result.input.input = positionals;
return result;
}
//#endregion
//#region src/cli/arguments/index.ts
const schemaInfo = getCliSchemaInfo();
const options = Object.fromEntries(Object.entries(schemaInfo).filter(([_key, info]) => info.type !== "never").map(([key, info]) => {
const config = Object.getOwnPropertyDescriptor(alias, key)?.value;
const result = {
type: info.type === "boolean" ? "boolean" : "string",
description: info?.description ?? config?.description ?? "",
hint: config?.hint
};
if (config && config?.abbreviation) result.short = config?.abbreviation;
if (config && config.reverse) {
if (result.description.startsWith("enable")) result.description = result.description.replace("enable", "disable");
else if (!result.description.startsWith("Avoid")) result.description = `disable ${result.description}`;
}
key = camelCaseToKebabCase(key);
return [config?.reverse ? `no-${key}` : key, result];
}));
function parseCliArguments() {
const { values, tokens, positionals } = parseArgs({
options,
tokens: true,
allowPositionals: true,
strict: false
});
let invalid_options = tokens.filter((token) => token.kind === "option").map((option) => {
let negative = false;
if (option.name.startsWith("no-")) {
const name = kebabCaseToCamelCase(option.name.substring(3));
if (name in schemaInfo) {
delete values[option.name];
option.name = name;
negative = true;
}
}
delete values[option.name];
option.name = kebabCaseToCamelCase(option.name);
let originalInfo = schemaInfo[option.name];
if (!originalInfo) return {
name: option.name,
value: option.value
};
let type = originalInfo.type;
if (type === "string" && typeof option.value !== "string") {
let opt = option;
let defaultValue = Object.getOwnPropertyDescriptor(alias, opt.name)?.value;
Object.defineProperty(values, opt.name, {
value: defaultValue.default ?? "",
enumerable: true,
configurable: true,
writable: true
});
} else if (type === "object" && typeof option.value === "string") {
const [key, value] = option.value.split(",").map((x) => x.split("="))[0];
if (!values[option.name]) Object.defineProperty(values, option.name, {
value: {},
enumerable: true,
configurable: true,
writable: true
});
if (key && value) Object.defineProperty(values[option.name], key, {
value,
enumerable: true,
configurable: true,
writable: true
});
} else if (type === "array" && typeof option.value === "string") {
if (!values[option.name]) Object.defineProperty(values, option.name, {
value: [],
enumerable: true,
configurable: true,
writable: true
});
values[option.name].push(option.value);
} else if (type === "boolean") Object.defineProperty(values, option.name, {
value: !negative,
enumerable: true,
configurable: true,
writable: true
});
else if (type === "union") {
let defaultValue = Object.getOwnPropertyDescriptor(alias, option.name)?.value;
Object.defineProperty(values, option.name, {
value: option.value ?? defaultValue?.default ?? "",
enumerable: true,
configurable: true,
writable: true
});
} else Object.defineProperty(values, option.name, {
value: option.value ?? "",
enumerable: true,
configurable: true,
writable: true
});
}).filter((item) => {
return item !== void 0;
});
invalid_options.sort((a, b) => {
return a.name.localeCompare(b.name);
});
if (invalid_options.length !== 0) {
let single = invalid_options.length === 1;
logger.warn(`Option \`${invalid_options.map((item) => item.name).join(",")}\` ${single ? "is" : "are"} unrecognized. We will ignore ${single ? "this" : "those"} option${single ? "" : "s"}.`);
}
let rawArgs = {
...values,
...invalid_options.reduce((acc, cur) => {
acc[cur.name] = cur.value;
return acc;
}, Object.create(null))
};
return {
...normalizeCliOptions(values, positionals),
rawArgs
};
}
//#endregion
//#region src/utils/clear-screen.ts
const CLEAR_SCREEN = "\x1Bc";
function getClearScreenFunction(options$1) {
const isTTY = process.stdout.isTTY;
const isAnyOptionNotAllowingClearScreen = arraify(options$1).some(({ watch: watch$1 }) => watch$1 === false || watch$1?.clearScreen === false);
if (isTTY && !isAnyOptionNotAllowingClearScreen) return () => {
process.stdout.write(CLEAR_SCREEN);
};
}
//#endregion
//#region \0@oxc-project+runtime@0.90.0/helpers/usingCtx.js
function _usingCtx() {
var r = "function" == typeof SuppressedError ? SuppressedError : function(r$1, e$1) {
var n$1 = Error();
return n$1.name = "SuppressedError", n$1.error = r$1, n$1.suppressed = e$1, n$1;
}, e = {}, n = [];
function using(r$1, e$1) {
if (null != e$1) {
if (Object(e$1) !== e$1) throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");
if (r$1) var o = e$1[Symbol.asyncDispose || Symbol["for"]("Symbol.asyncDispose")];
if (void 0 === o && (o = e$1[Symbol.dispose || Symbol["for"]("Symbol.dispose")], r$1)) var t = o;
if ("function" != typeof o) throw new TypeError("Object is not disposable.");
t && (o = function o$1() {
try {
t.call(e$1);
} catch (r$2) {
return Promise.reject(r$2);
}
}), n.push({
v: e$1,
d: o,
a: r$1
});
} else r$1 && n.push({
d: e$1,
a: r$1
});
return e$1;
}
return {
e,
u: using.bind(null, !1),
a: using.bind(null, !0),
d: function d() {
var o, t = this.e, s = 0;
function next() {
for (; o = n.pop();) try {
if (!o.a && 1 === s) return s = 0, n.push(o), Promise.resolve().then(next);
if (o.d) {
var r$1 = o.d.call(o.v);
if (o.a) return s |= 2, Promise.resolve(r$1).then(next, err);
} else s |= 1;
} catch (r$2) {
return err(r$2);
}
if (1 === s) return t !== e ? Promise.reject(t) : Promise.resolve();
if (t !== e) throw t;
}
function err(n$1) {
return t = t !== e ? new r(n$1, t) : n$1, next();
}
return next();
}
};
}
//#endregion
//#region src/cli/commands/bundle.ts
async function bundleWithConfig(configPath, cliOptions, rawArgs = {}) {
if (cliOptions.watch) {
process.env.ROLLUP_WATCH = "true";
process.env.ROLLDOWN_WATCH = "true";
}
const config = await loadConfig(configPath);
if (!config) {
logger.error(`No configuration found at ${config}`);
process.exit(1);
}
const resolvedConfig = typeof config === "function" ? await config(rawArgs) : config;
if (cliOptions.watch) await watchInner(resolvedConfig, cliOptions);
else await bundleInner(resolvedConfig, cliOptions);
}
async function bundleWithCliOptions(cliOptions) {
try {
var _usingCtx$1 = _usingCtx();
if (cliOptions.output.dir || cliOptions.output.file) {
await (cliOptions.watch ? watchInner : bundleInner)({}, cliOptions);
return;
}
if (cliOptions.watch) {
logger.error("You must specify `output.dir` to use watch mode");
process.exit(1);
}
const { output: outputs } = await _usingCtx$1.a(await rolldown(cliOptions.input)).generate(cliOptions.output);
if (outputs.length === 0) {
logger.error("No output generated");
process.exit(1);
}
for (const file of outputs) {
if (outputs.length > 1) logger.log(`\n${colors.cyan(colors.bold(`|→ ${file.fileName}:`))}\n`);
console.log(file.type === "asset" ? file.source : file.code);
}
} catch (_) {
_usingCtx$1.e = _;
} finally {
await _usingCtx$1.d();
}
}
async function watchInner(config, cliOptions) {
let normalizedConfig = arraify(config).map((option) => {
return {
...option,
...cliOptions.input,
output: arraify(option.output || {}).map((output) => {
return {
...output,
...cliOptions.output
};
})
};
});
const watcher = watch(normalizedConfig);
onExit((code) => {
Promise.resolve(watcher.close()).finally(() => {
process.exit(typeof code === "number" ? code : 0);
});
return true;
});
const changedFile = [];
watcher.on("change", (id, event) => {
if (event.event === "update") changedFile.push(id);
});
const clearScreen = getClearScreenFunction(normalizedConfig);
watcher.on("event", async (event) => {
switch (event.code) {
case "START":
clearScreen?.();
break;
case "BUNDLE_START":
if (changedFile.length > 0) logger.log(`Found ${colors.bold(changedFile.map(relativeId).join(", "))} changed, rebuilding...`);
changedFile.length = 0;
break;
case "BUNDLE_END":
await event.result.close();
logger.success(`Rebuilt ${colors.bold(relativeId(event.output[0]))} in ${colors.green(ms(event.duration))}.`);
break;
case "ERROR":
await event.result.close();
logger.error(event.error);
break;
default: break;
}
});
logger.log(`Waiting for changes...`);
}
async function bundleInner(config, cliOptions) {
const startTime = performance.now();
const result = [];
const configList = arraify(config);
for (const config$1 of configList) {
const outputList = arraify(config$1.output || {});
const build = await rolldown({
...config$1,
...cliOptions.input
});
for (const output of outputList) try {
result.push(await build.write({
...output,
...cliOptions.output
}));
} finally {
await build.close();
}
}
result.forEach(printBundleOutputPretty);
logger.log(``);
const duration = performance.now() - startTime;
logger.success(`rolldown v${version} Finished in ${colors.green(ms(duration))}`);
}
function printBundleOutputPretty(output) {
const outputEntries = collectOutputEntries(output.output);
const outputLayoutSizes = collectOutputLayoutAdjustmentSizes(outputEntries);
printOutputEntries(outputEntries, outputLayoutSizes, "<DIR>");
}
function collectOutputEntries(output) {
return output.map((chunk) => ({
type: chunk.type,
fileName: chunk.fileName,
size: chunk.type === "chunk" ? Buffer.byteLength(chunk.code) : Buffer.byteLength(chunk.source)
}));
}
function collectOutputLayoutAdjustmentSizes(entries) {
let longest = 0;
let biggestSize = 0;
for (const entry of entries) {
if (entry.fileName.length > longest) longest = entry.fileName.length;
if (entry.size > biggestSize) biggestSize = entry.size;
}
const sizePad = displaySize(biggestSize).length;
return {
longest,
biggestSize,
sizePad
};
}
const numberFormatter = new Intl.NumberFormat("en", {
maximumFractionDigits: 2,
minimumFractionDigits: 2
});
function displaySize(bytes) {
return `${numberFormatter.format(bytes / 1e3)} kB`;
}
const CHUNK_GROUPS = [{
type: "asset",
color: "green"
}, {
type: "chunk",
color: "cyan"
}];
function printOutputEntries(entries, sizeAdjustment, distPath) {
for (const group of CHUNK_GROUPS) {
const filtered = entries.filter((e) => e.type === group.type);
if (!filtered.length) continue;
for (const entry of filtered.sort((a, z) => a.size - z.size)) {
let log = colors.dim(withTrailingSlash(distPath));
log += colors[group.color](entry.fileName.padEnd(sizeAdjustment.longest + 2));
log += colors.dim(entry.type);
log += colors.dim(` │ size: ${displaySize(entry.size).padStart(sizeAdjustment.sizePad)}`);
logger.log(log);
}
}
}
function withTrailingSlash(path$1) {
if (path$1[path$1.length - 1] !== "/") return `${path$1}/`;
return path$1;
}
function ms(duration) {
return duration < 1e3 ? `${duration.toFixed(2)} ms` : `${(duration / 1e3).toFixed(2)} s`;
}
function relativeId(id) {
if (!path.isAbsolute(id)) return id;
return path.relative(path.resolve(), id);
}
//#endregion
//#region src/cli/commands/help.ts
const introduction = `${colors.gray(`${description} (rolldown v${version})`)}
${colors.bold(colors.underline("USAGE"))} ${colors.cyan("rolldown -c <config>")} or ${colors.cyan("rolldown <input> <options>")}`;
const examples = [
{
title: "Bundle with a config file `rolldown.config.mjs`",
command: "rolldown -c rolldown.config.mjs"
},
{
title: "Bundle the `src/main.ts` to `dist` with `cjs` format",
command: "rolldown src/main.ts -d dist -f cjs"
},
{
title: "Bundle the `src/main.ts` and handle the `.png` assets to Data URL",
command: "rolldown src/main.ts -d dist --moduleTypes .png=dataurl"
},
{
title: "Bundle the `src/main.tsx` and minify the output with sourcemap",
command: "rolldown src/main.tsx -d dist -m -s"
},
{
title: "Create self-executing IIFE using external jQuery as `$` and `_`",
command: "rolldown src/main.ts -d dist -n bundle -f iife -e jQuery,window._ -g jQuery=$"
}
];
const notes = [
"Due to the API limitation, you need to pass `-s` for `.map` sourcemap file as the last argument.",
"If you are using the configuration, please pass the `-c` as the last argument if you ignore the default configuration file.",
"CLI options will override the configuration file.",
"For more information, please visit https://rolldown.rs/."
];
function showHelp() {
logger.log(introduction);
logger.log("");
logger.log(`${colors.bold(colors.underline("OPTIONS"))}`);
logger.log("");
logger.log(Object.entries(options).sort(([a], [b]) => {
if (options[a].short && !options[b].short) return -1;
if (!options[a].short && options[b].short) return 1;
if (options[a].short && options[b].short) return options[a].short.localeCompare(options[b].short);
return a.localeCompare(b);
}).map(([option, { type, short, hint, description: description$1 }]) => {
let optionStr = ` --${option} `;
option = camelCaseToKebabCase(option);
if (short) optionStr += `-${short}, `;
if (type === "string") optionStr += `<${hint ?? option}>`;
if (description$1 && description$1.length > 0) description$1 = description$1[0].toUpperCase() + description$1.slice(1);
return colors.cyan(optionStr.padEnd(30)) + description$1 + (description$1 && description$1?.endsWith(".") ? "" : ".");
}).join("\n"));
logger.log("");
logger.log(`${colors.bold(colors.underline("EXAMPLES"))}`);
logger.log("");
examples.forEach(({ title, command }, ord) => {
logger.log(` ${ord + 1}. ${title}:`);
logger.log(` ${colors.cyan(command)}`);
logger.log("");
});
logger.log(`${colors.bold(colors.underline("NOTES"))}`);
logger.log("");
notes.forEach((note) => {
logger.log(` * ${colors.gray(note)}`);
});
}
//#endregion
//#region src/cli/version-check.ts
function checkNodeVersion(nodeVersion) {
const currentVersion = nodeVersion.split(".");
const major = parseInt(currentVersion[0], 10);
const minor = parseInt(currentVersion[1], 10);
return major === 20 && minor >= 19 || major === 22 && minor >= 12 || major > 22;
}
//#endregion
//#region src/cli/index.ts
if (!checkNodeVersion(process$1.versions.node)) logger.warn(`You are using Node.js ${process$1.versions.node}. Rolldown requires Node.js version 20.19+ or 22.12+. Please upgrade your Node.js version.`);
async function main() {
const { rawArgs,...cliOptions } = parseCliArguments();
if (cliOptions.config || cliOptions.config === "") {
await bundleWithConfig(cliOptions.config, cliOptions, rawArgs);
return;
}
if ("input" in cliOptions.input) {
await bundleWithCliOptions(cliOptions);
return;
}
if (cliOptions.version) {
logger.log(`rolldown v${version}`);
return;
}
showHelp();
}
main().catch((err) => {
logger.error(err);
process$1.exit(1);
});
//#endregion
export { };

View File

@ -0,0 +1,10 @@
import "./shared/binding-aYdpw2Yk.mjs";
import { ConfigExport, defineConfig } from "./shared/define-config-DMtLQsA0.mjs";
//#region src/utils/load-config.d.ts
declare function loadConfig(configPath: string): Promise<ConfigExport>;
//#endregion
//#region src/config.d.ts
declare const VERSION: string;
//#endregion
export { VERSION, defineConfig, loadConfig };

View File

@ -0,0 +1,10 @@
import "./shared/parse-ast-index-BzRh1cX7.mjs";
import { defineConfig, version } from "./shared/src-CC6sgydx.mjs";
import "./shared/misc-CQeo-AFx.mjs";
import { loadConfig } from "./shared/load-config-BhonyBZl.mjs";
//#region src/config.ts
const VERSION = version;
//#endregion
export { VERSION, defineConfig, loadConfig };

View File

@ -0,0 +1,147 @@
import { BindingAssetPluginConfig, BindingBuildImportAnalysisPluginConfig, BindingDynamicImportVarsPluginConfig, BindingEsmExternalRequirePluginConfig, BindingHmrUpdate, BindingImportGlobPluginConfig, BindingIsolatedDeclarationPluginConfig, BindingJsonPluginConfig, BindingManifestPluginConfig, BindingModulePreloadPolyfillPluginConfig, BindingReactRefreshWrapperPluginConfig, BindingReplacePluginConfig, BindingReporterPluginConfig, BindingTransformPluginConfig, BindingViteResolvePluginConfig, BindingWasmHelperPluginConfig, IsolatedDeclarationsOptions, IsolatedDeclarationsResult, NapiResolveOptions, ResolveResult, ResolverFactory, TransformOptions, TransformResult, isolatedDeclaration, moduleRunnerTransform, transform } from "./shared/binding-aYdpw2Yk.mjs";
import { BuiltinPlugin, InputOptions, OutputOptions, StringOrRegExp, defineParallelPlugin } from "./shared/define-config-DMtLQsA0.mjs";
//#region src/api/dev/dev-options.d.ts
interface DevWatchOptions {
/**
* If `true`, files are not written to disk.
* @default false
*/
skipWrite?: boolean;
/**
* If `true`, use polling instead of native file system events for watching.
* @default false
*/
usePolling?: boolean;
/**
* Poll interval in milliseconds (only used when usePolling is true).
* @default 100
*/
pollInterval?: number;
/**
* If `true`, use debounced watcher. If `false`, use non-debounced watcher for immediate responses.
* @default true
*/
useDebounce?: boolean;
/**
* Debounce duration in milliseconds (only used when useDebounce is true).
* @default 10
*/
debounceDuration?: number;
/**
* Whether to compare file contents for poll-based watchers (only used when usePolling is true).
* When enabled, poll watchers will check file contents to determine if they actually changed.
* @default false
*/
compareContentsForPolling?: boolean;
/**
* Tick rate in milliseconds for debounced watchers (only used when useDebounce is true).
* Controls how frequently the debouncer checks for events to process.
* When not specified, the debouncer will auto-select an appropriate tick rate (1/4 of the debounce duration).
* @default undefined (auto-select)
*/
debounceTickRate?: number;
}
interface DevOptions {
onHmrUpdates?: (updates: BindingHmrUpdate[], changedFiles: string[]) => void | Promise<void>;
watch?: DevWatchOptions;
}
//#endregion
//#region src/api/dev/dev-engine.d.ts
declare class DevEngine {
#private;
static create(inputOptions: InputOptions, outputOptions?: OutputOptions, devOptions?: DevOptions): Promise<DevEngine>;
private constructor();
run(): Promise<void>;
ensureCurrentBuildFinish(): Promise<void>;
ensureLatestBuildOutput(): Promise<void>;
/**
* Returns true if a new build is scheduled.
*/
scheduleBuildIfStale(): Promise<"scheduled" | "alreadyScheduled" | undefined>;
invalidate(file: string, firstInvalidatedBy?: string): Promise<BindingHmrUpdate>;
}
//#endregion
//#region src/api/dev/index.d.ts
declare var dev: typeof DevEngine.create;
//#endregion
//#region src/api/experimental.d.ts
/**
* This is an experimental API. It's behavior may change in the future.
*
* Calling this API will only execute the scan stage of rolldown.
*/
declare const scan: (input: InputOptions) => Promise<void>;
//#endregion
//#region src/builtin-plugin/constructors.d.ts
declare function modulePreloadPolyfillPlugin(config?: BindingModulePreloadPolyfillPluginConfig): BuiltinPlugin;
type DynamicImportVarsPluginConfig = Omit<BindingDynamicImportVarsPluginConfig, "include" | "exclude"> & {
include?: StringOrRegExp | StringOrRegExp[];
exclude?: StringOrRegExp | StringOrRegExp[];
};
declare function dynamicImportVarsPlugin(config?: DynamicImportVarsPluginConfig): BuiltinPlugin;
declare function importGlobPlugin(config?: BindingImportGlobPluginConfig): BuiltinPlugin;
declare function reporterPlugin(config?: BindingReporterPluginConfig): BuiltinPlugin;
declare function manifestPlugin(config?: BindingManifestPluginConfig): BuiltinPlugin;
declare function wasmHelperPlugin(config?: BindingWasmHelperPluginConfig): BuiltinPlugin;
declare function wasmFallbackPlugin(): BuiltinPlugin;
declare function loadFallbackPlugin(): BuiltinPlugin;
declare function jsonPlugin(config?: BindingJsonPluginConfig): BuiltinPlugin;
declare function buildImportAnalysisPlugin(config: BindingBuildImportAnalysisPluginConfig): BuiltinPlugin;
declare function viteResolvePlugin(config: BindingViteResolvePluginConfig): BuiltinPlugin;
declare function isolatedDeclarationPlugin(config?: BindingIsolatedDeclarationPluginConfig): BuiltinPlugin;
declare function assetPlugin(config?: BindingAssetPluginConfig): BuiltinPlugin;
declare function webWorkerPostPlugin(): BuiltinPlugin;
declare function esmExternalRequirePlugin(config?: BindingEsmExternalRequirePluginConfig): BuiltinPlugin;
type ReactRefreshWrapperPluginConfig = Omit<BindingReactRefreshWrapperPluginConfig, "include" | "exclude"> & {
include?: StringOrRegExp | StringOrRegExp[];
exclude?: StringOrRegExp | StringOrRegExp[];
};
declare function reactRefreshWrapperPlugin(config: ReactRefreshWrapperPluginConfig): BuiltinPlugin;
//#endregion
//#region src/builtin-plugin/alias-plugin.d.ts
type AliasPluginAlias = {
find: string | RegExp;
replacement: string;
};
type AliasPluginConfig = {
entries: AliasPluginAlias[];
};
declare function aliasPlugin(config: AliasPluginConfig): BuiltinPlugin;
//#endregion
//#region src/builtin-plugin/replace-plugin.d.ts
/**
* Replaces targeted strings in files while bundling.
*
* @example
* // Basic usage
* ```js
* replacePlugin({
* 'process.env.NODE_ENV': JSON.stringify('production'),
* __buildVersion: 15
* })
* ```
* @example
* // With options
* ```js
* replacePlugin({
* 'process.env.NODE_ENV': JSON.stringify('production'),
* __buildVersion: 15
* }, {
* preventAssignment: false,
* })
* ```
*/
declare function replacePlugin(values?: BindingReplacePluginConfig["values"], options?: Omit<BindingReplacePluginConfig, "values">): BuiltinPlugin;
//#endregion
//#region src/builtin-plugin/transform-plugin.d.ts
type TransformPattern = string | RegExp | readonly (RegExp | string)[];
type TransformPluginConfig = Omit<BindingTransformPluginConfig, "include" | "exclude" | "jsxRefreshInclude" | "jsxRefreshExclude"> & {
include?: TransformPattern;
exclude?: TransformPattern;
jsxRefreshInclude?: TransformPattern;
jsxRefreshExclude?: TransformPattern;
};
declare function transformPlugin(config?: TransformPluginConfig): BuiltinPlugin;
//#endregion
export { DevEngine, type DevOptions, type DevWatchOptions, type IsolatedDeclarationsOptions, type IsolatedDeclarationsResult, type NapiResolveOptions as ResolveOptions, type ResolveResult, ResolverFactory, type TransformOptions, type TransformResult, aliasPlugin, assetPlugin, buildImportAnalysisPlugin, defineParallelPlugin, dev, dynamicImportVarsPlugin, esmExternalRequirePlugin, importGlobPlugin, isolatedDeclaration, isolatedDeclarationPlugin, jsonPlugin, loadFallbackPlugin, manifestPlugin, modulePreloadPolyfillPlugin, moduleRunnerTransform, reactRefreshWrapperPlugin, replacePlugin, reporterPlugin, scan, transform, transformPlugin, viteResolvePlugin, wasmFallbackPlugin, wasmHelperPlugin, webWorkerPostPlugin };

View File

@ -0,0 +1,216 @@
import { BindingDevEngine, ResolverFactory, isolatedDeclaration, moduleRunnerTransform, transform } from "./shared/parse-ast-index-BzRh1cX7.mjs";
import { BuiltinPlugin, PluginDriver, RolldownBuild, createBundlerOptions, makeBuiltinPluginCallable, normalizedStringOrRegex } from "./shared/src-CC6sgydx.mjs";
import "./shared/misc-CQeo-AFx.mjs";
import { logger } from "./shared/logger-CiCY7ucm.mjs";
import { pathToFileURL } from "node:url";
//#region src/api/dev/dev-engine.ts
var DevEngine = class DevEngine {
#inner;
#cachedBuildFinishPromise = null;
static async create(inputOptions, outputOptions = {}, devOptions = {}) {
inputOptions = await PluginDriver.callOptionsHook(inputOptions);
const options = await createBundlerOptions(inputOptions, outputOptions, false);
const bindingDevOptions = {
onHmrUpdates: devOptions.onHmrUpdates,
watch: devOptions.watch && {
skipWrite: devOptions.watch.skipWrite,
usePolling: devOptions.watch.usePolling,
pollInterval: devOptions.watch.pollInterval,
useDebounce: devOptions.watch.useDebounce,
debounceDuration: devOptions.watch.debounceDuration,
compareContentsForPolling: devOptions.watch.compareContentsForPolling,
debounceTickRate: devOptions.watch.debounceTickRate
}
};
const inner = new BindingDevEngine(options.bundlerOptions, bindingDevOptions);
return new DevEngine(inner);
}
constructor(inner) {
this.#inner = inner;
}
async run() {
await this.#inner.run();
}
async ensureCurrentBuildFinish() {
if (this.#cachedBuildFinishPromise) return this.#cachedBuildFinishPromise;
const promise = this.#inner.ensureCurrentBuildFinish().then(() => {
this.#cachedBuildFinishPromise = null;
});
this.#cachedBuildFinishPromise = promise;
return promise;
}
async ensureLatestBuildOutput() {
await this.#inner.ensureLatestBuildOutput();
}
/**
* Returns true if a new build is scheduled.
*/
async scheduleBuildIfStale() {
const scheduled = await this.#inner.scheduleBuildIfStale();
if (scheduled) {
scheduled.wait().catch(() => {});
return scheduled.alreadyScheduled() ? "alreadyScheduled" : "scheduled";
}
}
async invalidate(file, firstInvalidatedBy) {
return this.#inner.invalidate(file, firstInvalidatedBy);
}
};
//#endregion
//#region src/api/dev/index.ts
var dev = DevEngine.create;
//#endregion
//#region src/api/experimental.ts
/**
* This is an experimental API. It's behavior may change in the future.
*
* Calling this API will only execute the scan stage of rolldown.
*/
const scan = async (input) => {
const inputOptions = await PluginDriver.callOptionsHook(input);
const build = new RolldownBuild(inputOptions);
try {
await build.scan();
} finally {
await build.close();
}
};
//#endregion
//#region src/plugin/parallel-plugin.ts
function defineParallelPlugin(pluginPath) {
return (options) => {
return { _parallel: {
fileUrl: pathToFileURL(pluginPath).href,
options
} };
};
}
//#endregion
//#region src/builtin-plugin/constructors.ts
function modulePreloadPolyfillPlugin(config) {
return new BuiltinPlugin("builtin:module-preload-polyfill", config);
}
function dynamicImportVarsPlugin(config) {
if (config) {
config.include = normalizedStringOrRegex(config.include);
config.exclude = normalizedStringOrRegex(config.exclude);
}
return new BuiltinPlugin("builtin:dynamic-import-vars", config);
}
function importGlobPlugin(config) {
return new BuiltinPlugin("builtin:import-glob", config);
}
function reporterPlugin(config) {
return new BuiltinPlugin("builtin:reporter", config);
}
function manifestPlugin(config) {
return new BuiltinPlugin("builtin:manifest", config);
}
function wasmHelperPlugin(config) {
return new BuiltinPlugin("builtin:wasm-helper", config);
}
function wasmFallbackPlugin() {
const builtinPlugin = new BuiltinPlugin("builtin:wasm-fallback");
return makeBuiltinPluginCallable(builtinPlugin);
}
function loadFallbackPlugin() {
return new BuiltinPlugin("builtin:load-fallback");
}
function jsonPlugin(config) {
const builtinPlugin = new BuiltinPlugin("builtin:json", config);
return makeBuiltinPluginCallable(builtinPlugin);
}
function buildImportAnalysisPlugin(config) {
return new BuiltinPlugin("builtin:build-import-analysis", config);
}
function viteResolvePlugin(config) {
const builtinPlugin = new BuiltinPlugin("builtin:vite-resolve", config);
return makeBuiltinPluginCallable(builtinPlugin);
}
function isolatedDeclarationPlugin(config) {
return new BuiltinPlugin("builtin:isolated-declaration", config);
}
function assetPlugin(config) {
return new BuiltinPlugin("builtin:asset", config);
}
function webWorkerPostPlugin() {
return new BuiltinPlugin("builtin:web-worker-post");
}
function esmExternalRequirePlugin(config) {
return new BuiltinPlugin("builtin:esm-external-require", config);
}
function reactRefreshWrapperPlugin(config) {
if (config) {
config.include = normalizedStringOrRegex(config.include);
config.exclude = normalizedStringOrRegex(config.exclude);
}
const builtinPlugin = new BuiltinPlugin("builtin:react-refresh-wrapper", config);
return makeBuiltinPluginCallable(builtinPlugin);
}
//#endregion
//#region src/builtin-plugin/alias-plugin.ts
function aliasPlugin(config) {
return new BuiltinPlugin("builtin:alias", config);
}
//#endregion
//#region src/builtin-plugin/replace-plugin.ts
/**
* Replaces targeted strings in files while bundling.
*
* @example
* // Basic usage
* ```js
* replacePlugin({
* 'process.env.NODE_ENV': JSON.stringify('production'),
* __buildVersion: 15
* })
* ```
* @example
* // With options
* ```js
* replacePlugin({
* 'process.env.NODE_ENV': JSON.stringify('production'),
* __buildVersion: 15
* }, {
* preventAssignment: false,
* })
* ```
*/
function replacePlugin(values = {}, options = {}) {
let hasNonStringValues = false;
Object.keys(values).forEach((key) => {
const value = values[key];
if (typeof value !== "string") {
hasNonStringValues = true;
values[key] = String(value);
}
});
if (hasNonStringValues) logger.warn("Some values provided to `replacePlugin` are not strings. They will be converted to strings, but for better performance consider converting them manually.");
return new BuiltinPlugin("builtin:replace", {
...options,
values
});
}
//#endregion
//#region src/builtin-plugin/transform-plugin.ts
function transformPlugin(config) {
if (config) config = {
...config,
include: normalizedStringOrRegex(config.include),
exclude: normalizedStringOrRegex(config.exclude),
jsxRefreshInclude: normalizedStringOrRegex(config.jsxRefreshInclude),
jsxRefreshExclude: normalizedStringOrRegex(config.jsxRefreshExclude)
};
return new BuiltinPlugin("builtin:transform", config);
}
//#endregion
export { DevEngine, ResolverFactory, aliasPlugin, assetPlugin, buildImportAnalysisPlugin, defineParallelPlugin, dev, dynamicImportVarsPlugin, esmExternalRequirePlugin, importGlobPlugin, isolatedDeclaration, isolatedDeclarationPlugin, jsonPlugin, loadFallbackPlugin, manifestPlugin, modulePreloadPolyfillPlugin, moduleRunnerTransform, reactRefreshWrapperPlugin, replacePlugin, reporterPlugin, scan, transform, transformPlugin, viteResolvePlugin, wasmFallbackPlugin, wasmHelperPlugin, webWorkerPostPlugin };

View File

@ -0,0 +1,71 @@
export class DevRuntime {
/**
* @type {Record<string, Module>}
*/
modules: Record<string, Module>;
/**
* @param {string} _moduleId
*/
createModuleHotContext(_moduleId: string): void;
/**
* @param {string[]} _boundaries
*/
applyUpdates(_boundaries: string[]): void;
/**
* @param {string} id
* @param {{ exports: any }} exportsHolder
*/
registerModule(id: string, exportsHolder: {
exports: any;
}): void;
/**
* @param {string} id
*/
loadExports(id: string): any;
/**
* __esmMin
*
* @type {<T>(fn: any, res: T) => () => T}
* @internal
*/
createEsmInitializer: <T>(fn: any, res: T) => () => T;
/**
* __commonJSMin
*
* @type {<T extends { exports: any }>(cb: any, mod: { exports: any }) => () => T}
* @internal
*/
createCjsInitializer: <T extends {
exports: any;
}>(cb: any, mod: {
exports: any;
}) => () => T;
/** @internal */
__toESM: any;
/** @internal */
__toCommonJS: any;
/** @internal */
__export: any;
/** @internal */
__toDynamicImportESM: any;
/** @internal */
__reExport: any;
}
declare class Module {
/**
* @param {string} id
*/
constructor(id: string);
/**
* @type {{ exports: any }}
*/
exportsHolder: {
exports: any;
};
/**
* @type {string}
*/
id: string;
get exports(): any;
}
export {};

View File

@ -0,0 +1,4 @@
import "./shared/binding-aYdpw2Yk.mjs";
import { withFilter } from "./shared/define-config-DMtLQsA0.mjs";
import { and, code, exclude, id, include, moduleType, not, or, queries, query } from "@rolldown/pluginutils";
export { and, code, exclude, id, include, moduleType, not, or, queries, query, withFilter };

View File

@ -0,0 +1,44 @@
import { arraify, isPromiseLike } from "./shared/misc-CQeo-AFx.mjs";
import { and, code, exclude, id, include, moduleType, not, or, queries, query } from "@rolldown/pluginutils";
//#region src/plugin/with-filter.ts
function withFilterImpl(pluginOption, filterObjectList) {
if (isPromiseLike(pluginOption)) return pluginOption.then((p) => withFilter(p, filterObjectList));
if (pluginOption == false || pluginOption == null) return pluginOption;
if (Array.isArray(pluginOption)) return pluginOption.map((p) => withFilter(p, filterObjectList));
let plugin = pluginOption;
let filterObjectIndex = findMatchedFilterObject(plugin.name, filterObjectList);
if (filterObjectIndex === -1) return plugin;
let filterObject = filterObjectList[filterObjectIndex];
Object.keys(plugin).forEach((key) => {
switch (key) {
case "transform":
case "resolveId":
case "load":
if (!plugin[key]) return;
if (typeof plugin[key] === "object") plugin[key].filter = filterObject[key] ?? plugin[key].filter;
else plugin[key] = {
handler: plugin[key],
filter: filterObject[key]
};
break;
default: break;
}
});
return plugin;
}
function withFilter(pluginOption, filterObject) {
return withFilterImpl(pluginOption, arraify(filterObject));
}
function findMatchedFilterObject(pluginName, overrideFilterObjectList) {
if (overrideFilterObjectList.length === 1 && overrideFilterObjectList[0].pluginNamePattern === void 0) return 0;
for (let i = 0; i < overrideFilterObjectList.length; i++) for (let j = 0; j < (overrideFilterObjectList[i].pluginNamePattern ?? []).length; j++) {
let pattern = overrideFilterObjectList[i].pluginNamePattern[j];
if (typeof pattern === "string" && pattern === pluginName) return i;
else if (pattern instanceof RegExp && pattern.test(pluginName)) return i;
}
return -1;
}
//#endregion
export { and, code, exclude, id, include, moduleType, not, or, queries, query, withFilter };

View File

@ -0,0 +1,3 @@
import { PreRenderedChunk } from "./shared/binding-aYdpw2Yk.mjs";
import { AddonFunction, AsyncPluginHooks, BufferEncoding, BuildOptions, ChunkFileNamesFunction, ChunkingContext, ConfigExport, CustomPluginOptions, DefineParallelPluginResult, EmittedAsset, EmittedFile, ExistingRawSourceMap, ExternalOption, FunctionPluginHooks, GeneralHookFilter, GetModuleInfo, GlobalsFunction, HookFilter, HookFilterExtension, ImportKind, InputOption, InputOptions, InternalModuleFormat, LoadResult, LogLevel, LogLevelOption, LogOrStringHandler, LoggingFunction, MinifyOptions, MinimalPluginContext, ModuleFormat, ModuleInfo, ModuleOptions, ModuleType, ModuleTypeFilter, ModuleTypes, NormalizedInputOptions, NormalizedOutputOptions, ObjectHook, OptimizationOptions, OutputAsset, OutputBundle, OutputChunk, OutputOptions, ParallelPluginHooks, PartialNull, PartialResolvedId, Plugin, PluginContext, PluginContextMeta, PreRenderedAsset, RenderedChunk, RenderedModule, ResolveIdExtraOptions, ResolveIdResult, ResolvedId, RolldownBuild, RolldownDirectoryEntry, RolldownFileStats, RolldownFsModule, RolldownOptions, RolldownOptionsFunction, RolldownOutput, RolldownPlugin, RolldownPluginOption, RolldownWatcher, RolldownWatcherEvent, RollupError, RollupLog, RollupLogWithString, SourceDescription, SourceMap, SourceMapInput, SourcemapIgnoreListOption, TransformPluginContext, TransformResult, TreeshakingOptions, VERSION, WarningHandlerWithDefault, WatchOptions, WatcherOptions, build, defineConfig, rolldown, watch } from "./shared/define-config-DMtLQsA0.mjs";
export { AddonFunction, AsyncPluginHooks, BufferEncoding, BuildOptions, ChunkFileNamesFunction, ChunkingContext, ConfigExport, CustomPluginOptions, DefineParallelPluginResult, EmittedAsset, EmittedFile, ExistingRawSourceMap, ExternalOption, FunctionPluginHooks, GeneralHookFilter, GetModuleInfo, GlobalsFunction, HookFilter, HookFilterExtension, ImportKind, InputOption, InputOptions, InternalModuleFormat, LoadResult, LogLevel, LogLevelOption, LogOrStringHandler, LoggingFunction, MinifyOptions, MinimalPluginContext, ModuleFormat, ModuleInfo, ModuleOptions, ModuleType, ModuleTypeFilter, ModuleTypes, NormalizedInputOptions, NormalizedOutputOptions, ObjectHook, OptimizationOptions, OutputAsset, OutputBundle, OutputChunk, OutputOptions, ParallelPluginHooks, PartialNull, PartialResolvedId, Plugin, PluginContext, PluginContextMeta, PreRenderedAsset, PreRenderedChunk, RenderedChunk, RenderedModule, ResolveIdExtraOptions, ResolveIdResult, ResolvedId, RolldownBuild, RolldownDirectoryEntry, RolldownFileStats, RolldownFsModule, RolldownOptions, RolldownOptionsFunction, RolldownOutput, RolldownPlugin, RolldownPluginOption, RolldownWatcher, RolldownWatcherEvent, RollupError, RollupLog, RollupLogWithString, SourceDescription, SourceMap, SourceMapInput, SourcemapIgnoreListOption, TransformPluginContext, TransformResult, TreeshakingOptions, VERSION, WarningHandlerWithDefault, WatchOptions, WatcherOptions, build, defineConfig, rolldown, watch };

View File

@ -0,0 +1,5 @@
import "./shared/parse-ast-index-BzRh1cX7.mjs";
import { VERSION, build, defineConfig, rolldown, watch } from "./shared/src-CC6sgydx.mjs";
import "./shared/misc-CQeo-AFx.mjs";
export { VERSION, build, defineConfig, rolldown, watch };

View File

@ -0,0 +1 @@
export { };

View File

@ -0,0 +1,31 @@
import { registerPlugins } from "./shared/parse-ast-index-BzRh1cX7.mjs";
import { PluginContextData, bindingifyPlugin } from "./shared/src-CC6sgydx.mjs";
import "./shared/misc-CQeo-AFx.mjs";
import { parentPort, workerData } from "node:worker_threads";
//#region src/parallel-plugin-worker.ts
const { registryId, pluginInfos, threadNumber } = workerData;
(async () => {
try {
const plugins = await Promise.all(pluginInfos.map(async (pluginInfo) => {
const definePluginImpl = (await import(pluginInfo.fileUrl)).default;
const plugin = await definePluginImpl(pluginInfo.options, { threadNumber });
return {
index: pluginInfo.index,
plugin: bindingifyPlugin(plugin, {}, {}, new PluginContextData(() => {}, {}, []), [], () => {}, "info", false)
};
}));
registerPlugins(registryId, plugins);
parentPort.postMessage({ type: "success" });
} catch (error) {
parentPort.postMessage({
type: "error",
error
});
} finally {
parentPort.unref();
}
})();
//#endregion
export { };

View File

@ -0,0 +1,14 @@
import "./shared/binding-aYdpw2Yk.mjs";
import { MaybePromise, Plugin } from "./shared/define-config-DMtLQsA0.mjs";
//#region src/plugin/parallel-plugin-implementation.d.ts
type ParallelPluginImplementation = Plugin;
type Context = {
/**
* Thread number
*/
threadNumber: number;
};
declare function defineParallelPluginImplementation<Options>(plugin: (Options: Options, context: Context) => MaybePromise<ParallelPluginImplementation>): (Options: Options, context: Context) => MaybePromise<ParallelPluginImplementation>;
//#endregion
export { type Context, type ParallelPluginImplementation, defineParallelPluginImplementation };

View File

@ -0,0 +1,7 @@
//#region src/plugin/parallel-plugin-implementation.ts
function defineParallelPluginImplementation(plugin) {
return plugin;
}
//#endregion
export { defineParallelPluginImplementation };

View File

@ -0,0 +1,8 @@
import { ParseResult, ParserOptions } from "./shared/binding-aYdpw2Yk.mjs";
import { Program } from "@oxc-project/types";
//#region src/parse-ast-index.d.ts
declare function parseAst(sourceText: string, options?: ParserOptions | undefined | null, filename?: string): Program;
declare function parseAstAsync(sourceText: string, options?: ParserOptions | undefined | null, filename?: string): Promise<Program>;
//#endregion
export { type ParseResult, type ParserOptions, parseAst, parseAstAsync };

View File

@ -0,0 +1,3 @@
import { parseAst, parseAstAsync } from "./shared/parse-ast-index-BzRh1cX7.mjs";
export { parseAst, parseAstAsync };

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,117 @@
import { rolldown } from "./src-CC6sgydx.mjs";
import fs from "node:fs";
import path from "node:path";
import { readdir } from "node:fs/promises";
import { pathToFileURL } from "node:url";
import { cwd } from "node:process";
//#region src/utils/load-config.ts
async function bundleTsConfig(configFile, isEsm) {
const dirnameVarName = "injected_original_dirname";
const filenameVarName = "injected_original_filename";
const importMetaUrlVarName = "injected_original_import_meta_url";
const bundle = await rolldown({
input: configFile,
platform: "node",
resolve: { mainFields: ["main"] },
define: {
__dirname: dirnameVarName,
__filename: filenameVarName,
"import.meta.url": importMetaUrlVarName,
"import.meta.dirname": dirnameVarName,
"import.meta.filename": filenameVarName
},
treeshake: false,
external: [/^[\w@][^:]/],
plugins: [{
name: "inject-file-scope-variables",
transform: {
filter: { id: /\.[cm]?[jt]s$/ },
async handler(code, id) {
return {
code: `const ${dirnameVarName} = ${JSON.stringify(path.dirname(id))};const ${filenameVarName} = ${JSON.stringify(id)};const ${importMetaUrlVarName} = ${JSON.stringify(pathToFileURL(id).href)};` + code,
map: null
};
}
}
}]
});
const outputDir = path.dirname(configFile);
const fileName = (await bundle.write({
dir: outputDir,
format: isEsm ? "esm" : "cjs",
sourcemap: "inline",
entryFileNames: `rolldown.config.[hash]${path.extname(configFile).replace("ts", "js")}`
})).output.find((chunk) => chunk.type === "chunk" && chunk.isEntry).fileName;
return path.join(outputDir, fileName);
}
const SUPPORTED_JS_CONFIG_FORMATS = [
".js",
".mjs",
".cjs"
];
const SUPPORTED_TS_CONFIG_FORMATS = [
".ts",
".mts",
".cts"
];
const SUPPORTED_CONFIG_FORMATS = [...SUPPORTED_JS_CONFIG_FORMATS, ...SUPPORTED_TS_CONFIG_FORMATS];
const DEFAULT_CONFIG_BASE = "rolldown.config";
async function findConfigFileNameInCwd() {
const filesInWorkingDirectory = new Set(await readdir(cwd()));
for (const extension of SUPPORTED_CONFIG_FORMATS) {
const fileName = `${DEFAULT_CONFIG_BASE}${extension}`;
if (filesInWorkingDirectory.has(fileName)) return fileName;
}
throw new Error("No `rolldown.config` configuration file found.");
}
async function loadTsConfig(configFile) {
const isEsm = isFilePathESM(configFile);
const file = await bundleTsConfig(configFile, isEsm);
try {
return (await import(pathToFileURL(file).href)).default;
} finally {
fs.unlink(file, () => {});
}
}
function isFilePathESM(filePath) {
if (/\.m[jt]s$/.test(filePath)) return true;
else if (/\.c[jt]s$/.test(filePath)) return false;
else {
const pkg = findNearestPackageData(path.dirname(filePath));
if (pkg) return pkg.type === "module";
return false;
}
}
function findNearestPackageData(basedir) {
while (basedir) {
const pkgPath = path.join(basedir, "package.json");
if (tryStatSync(pkgPath)?.isFile()) try {
return JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
} catch {}
const nextBasedir = path.dirname(basedir);
if (nextBasedir === basedir) break;
basedir = nextBasedir;
}
return null;
}
function tryStatSync(file) {
try {
return fs.statSync(file, { throwIfNoEntry: false });
} catch {}
}
async function loadConfig(configPath) {
const ext = path.extname(configPath = configPath || await findConfigFileNameInCwd());
try {
if (SUPPORTED_JS_CONFIG_FORMATS.includes(ext) || process.env.NODE_OPTIONS?.includes("--import=tsx") && SUPPORTED_TS_CONFIG_FORMATS.includes(ext)) return (await import(pathToFileURL(configPath).href)).default;
else if (SUPPORTED_TS_CONFIG_FORMATS.includes(ext)) {
const rawConfigPath = path.resolve(configPath);
return await loadTsConfig(rawConfigPath);
} else throw new Error(`Unsupported config format. Expected: \`${SUPPORTED_CONFIG_FORMATS.join(",")}\` but got \`${ext}\``);
} catch (err) {
throw new Error("Error happened while loading config.", { cause: err });
}
}
//#endregion
export { loadConfig };

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,22 @@
//#region src/utils/misc.ts
function arraify(value) {
return Array.isArray(value) ? value : [value];
}
function isPromiseLike(value) {
return value && (typeof value === "object" || typeof value === "function") && typeof value.then === "function";
}
function unimplemented(info) {
if (info) throw new Error(`unimplemented: ${info}`);
throw new Error("unimplemented");
}
function unreachable(info) {
if (info) throw new Error(`unreachable: ${info}`);
throw new Error("unreachable");
}
function unsupported(info) {
throw new Error(`UNSUPPORTED: ${info}`);
}
function noop(..._args) {}
//#endregion
export { arraify, isPromiseLike, noop, unimplemented, unreachable, unsupported };

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,17 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -z "$NODE_PATH" ]; then
export NODE_PATH="/Users/bubo/bytesample/node_modules/.pnpm/rolldown@1.0.0-beta.39/node_modules/rolldown/bin/node_modules:/Users/bubo/bytesample/node_modules/.pnpm/rolldown@1.0.0-beta.39/node_modules/rolldown/node_modules:/Users/bubo/bytesample/node_modules/.pnpm/rolldown@1.0.0-beta.39/node_modules:/Users/bubo/bytesample/node_modules/.pnpm/node_modules"
else
export NODE_PATH="/Users/bubo/bytesample/node_modules/.pnpm/rolldown@1.0.0-beta.39/node_modules/rolldown/bin/node_modules:/Users/bubo/bytesample/node_modules/.pnpm/rolldown@1.0.0-beta.39/node_modules/rolldown/node_modules:/Users/bubo/bytesample/node_modules/.pnpm/rolldown@1.0.0-beta.39/node_modules:/Users/bubo/bytesample/node_modules/.pnpm/node_modules:$NODE_PATH"
fi
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../../bin/cli.mjs" "$@"
else
exec node "$basedir/../../bin/cli.mjs" "$@"
fi

View File

@ -0,0 +1,147 @@
{
"name": "rolldown",
"version": "1.0.0-beta.39",
"description": "Fast JavaScript/TypeScript bundler in Rust with Rollup-compatible API.",
"type": "module",
"homepage": "https://rolldown.rs/",
"repository": {
"type": "git",
"url": "git+https://github.com/rolldown/rolldown.git",
"directory": "packages/rolldown"
},
"license": "MIT",
"keywords": [
"webpack",
"parcel",
"esbuild",
"rollup",
"bundler",
"rolldown"
],
"files": [
"bin",
"cli",
"dist",
"!dist/*.node"
],
"bin": {
"rolldown": "./bin/cli.mjs"
},
"main": "./dist/index.mjs",
"module": "./dist/index.mjs",
"types": "./dist/index.d.mts",
"exports": {
".": "./dist/index.mjs",
"./config": "./dist/config.mjs",
"./experimental": "./dist/experimental-index.mjs",
"./filter": "./dist/filter-index.mjs",
"./parallelPlugin": "./dist/parallel-plugin.mjs",
"./parseAst": "./dist/parse-ast-index.mjs",
"./package.json": "./package.json"
},
"imports": {
"#parallel-plugin-worker": "./dist/parallel-plugin-worker.mjs"
},
"publishConfig": {
"registry": "https://registry.npmjs.org/",
"access": "public"
},
"napi": {
"binaryName": "rolldown-binding",
"packageName": "@rolldown/binding",
"targets": [
"x86_64-apple-darwin",
"x86_64-pc-windows-msvc",
"x86_64-unknown-linux-gnu",
"x86_64-unknown-linux-musl",
"x86_64-unknown-freebsd",
"i686-pc-windows-msvc",
"armv7-unknown-linux-gnueabihf",
"aarch64-unknown-linux-gnu",
"aarch64-apple-darwin",
"aarch64-unknown-linux-musl",
"aarch64-unknown-linux-ohos",
"aarch64-pc-windows-msvc",
"aarch64-linux-android",
"wasm32-wasip1-threads"
],
"wasm": {
"initialMemory": 16384,
"browser": {
"fs": true,
"asyncInit": true
}
},
"dtsHeader": "type MaybePromise<T> = T | Promise<T>\ntype Nullable<T> = T | null | undefined\ntype VoidNullable<T = void> = T | null | undefined | void\nexport type BindingStringOrRegex = string | RegExp\n\n"
},
"dependencies": {
"@oxc-project/types": "=0.90.0",
"ansis": "^4.0.0",
"@rolldown/pluginutils": "1.0.0-beta.39"
},
"devDependencies": {
"@napi-rs/cli": "^3.2.0",
"@napi-rs/wasm-runtime": "^1.0.0",
"@oxc-node/cli": "^0.0.32",
"@rollup/plugin-json": "^6.1.0",
"buble": "^0.20.0",
"consola": "^3.4.2",
"emnapi": "^1.2.0",
"execa": "^9.2.0",
"glob": "^11.0.0",
"oxc-parser": "=0.90.0",
"pathe": "^2.0.3",
"remeda": "^2.10.0",
"rolldown-plugin-dts": "^0.16.0",
"rollup": "^4.18.0",
"signal-exit": "4.1.0",
"source-map": "^0.7.4",
"tsx": "^4.19.4",
"typedoc": "^0.28.0",
"typescript": "^5.7.3",
"valibot": "1.1.0",
"rolldown": "1.0.0-beta.39"
},
"engines": {
"node": "^20.19.0 || >=22.12.0"
},
"optionalDependencies": {
"@rolldown/binding-darwin-x64": "1.0.0-beta.39",
"@rolldown/binding-win32-x64-msvc": "1.0.0-beta.39",
"@rolldown/binding-linux-x64-gnu": "1.0.0-beta.39",
"@rolldown/binding-linux-x64-musl": "1.0.0-beta.39",
"@rolldown/binding-freebsd-x64": "1.0.0-beta.39",
"@rolldown/binding-win32-ia32-msvc": "1.0.0-beta.39",
"@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.39",
"@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.39",
"@rolldown/binding-darwin-arm64": "1.0.0-beta.39",
"@rolldown/binding-linux-arm64-musl": "1.0.0-beta.39",
"@rolldown/binding-openharmony-arm64": "1.0.0-beta.39",
"@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.39",
"@rolldown/binding-android-arm64": "1.0.0-beta.39",
"@rolldown/binding-wasm32-wasi": "1.0.0-beta.39"
},
"scripts": {
"# Scrips for binding #": "_",
"artifacts": "napi artifacts --cwd ./src --package-json-path ../package.json -o=../artifacts --npm-dir ../npm",
"build-binding": "oxnode ./build-binding.ts",
"build-binding:release": "pnpm build-binding --release",
"build-binding:profile": "pnpm build-binding --profile profile",
"build-binding:wasi": "pnpm build-binding --target wasm32-wasip1-threads",
"build-binding:wasi:release": "pnpm build-binding --profile release-wasi --target wasm32-wasip1-threads",
"# Scrips for node #": "_",
"build-node": "tsx -C dev ./build.ts",
"build-types-check": "tsc -p ./tsconfig.check.json",
"build-js-glue": "pnpm run --sequential '/^build-(node|types-check)$/'",
"build-native:debug": "pnpm run --sequential '/^build-(binding|js-glue)$/'",
"build-native:release": "pnpm run --sequential '/^build-(binding:release|js-glue)$/'",
"build-native:profile": "pnpm run build-binding:profile && pnpm run build-js-glue",
"build-native:memory-profile": "pnpm run build-binding:profile --features default_global_allocator && pnpm run build-js-glue",
"build-wasi:debug": "TARGET='rolldown-wasi' pnpm run --sequential '/^build-(binding|binding:wasi|node)$/'",
"build-wasi:release": "TARGET='rolldown-wasi' pnpm run --sequential '/^build-(binding|binding:wasi:release|node)$/'",
"build-browser-pkg:debug": "TARGET='browser' pnpm run --sequential '/^build-(binding|binding:wasi|node)$/'",
"build-browser-pkg:release": "TARGET='browser' pnpm run --sequential '/^build-(binding|binding:wasi:release|node)$/'",
"# Scrips for docs #": "_",
"extract-options-doc": "typedoc"
}
}