build function
Implementation
Future<BuildResult> build(BuildOptions options, {BuildLogger? logger}) async {
final resolvedEntry = resolveEntry(
options.entry,
defaultEntry: options.defaultEntry,
fallbackEntry: options.fallbackEntry,
workingDirectory: options.workingDirectory,
);
if (resolvedEntry == null) {
throw ArgumentError(
'Entry not found. Tried `${options.entry}` '
'and fallback `${options.fallbackEntry}`.',
);
}
_ensureDir(
'${options.outDir}/js/core',
workingDirectory: options.workingDirectory,
);
_ensureDir(
'${options.outDir}/js/node',
workingDirectory: options.workingDirectory,
);
_ensureDir(
'${options.outDir}/js/bun',
workingDirectory: options.workingDirectory,
);
_ensureDir(
'${options.outDir}/js/deno',
workingDirectory: options.workingDirectory,
);
_ensureDir(
'${options.outDir}/edge/cloudflare',
workingDirectory: options.workingDirectory,
);
_ensureDir(
'${options.outDir}/edge/vercel',
workingDirectory: options.workingDirectory,
);
_ensureDir(
'${options.outDir}/edge/netlify',
workingDirectory: options.workingDirectory,
);
_ensureDir(
'${options.outDir}/shared',
workingDirectory: options.workingDirectory,
);
_ensureDir(
'${options.outDir}/bin',
workingDirectory: options.workingDirectory,
);
final baseName = _basenameWithoutExtension(resolvedEntry);
final coreJsName = '$baseName.js';
final coreJsPath = '${options.outDir}/js/core/$coreJsName';
final exeName = Platform.isWindows ? '$baseName.exe' : baseName;
final exePath = '${options.outDir}/bin/$exeName';
await _run(
options.dartExecutable,
<String>['compile', 'js', resolvedEntry, '-o', coreJsPath],
silent: options.silent,
logger: logger,
workingDirectory: options.workingDirectory,
);
await _run(
options.dartExecutable,
<String>['compile', 'exe', resolvedEntry, '-o', exePath],
silent: options.silent,
logger: logger,
workingDirectory: options.workingDirectory,
);
await _writeRuntimeWrappers(
options.outDir,
coreJsName: coreJsName,
workingDirectory: options.workingDirectory,
);
if (!options.silent && logger != null) {
logger('[osrv] build complete');
logger('[osrv] js core: $coreJsPath');
logger('[osrv] exe: $exePath');
}
return BuildResult(
entry: resolvedEntry,
outDir: options.outDir,
coreJsPath: coreJsPath,
executablePath: exePath,
);
}