/
export.impl.ts
60 lines (56 loc) · 1.72 KB
/
export.impl.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import {
BuilderContext,
BuilderOutput,
createBuilder,
scheduleTargetAndForget,
targetFromTargetString
} from '@angular-devkit/architect';
import exportApp from 'next/dist/export';
import { PHASE_EXPORT } from 'next/dist/next-server/lib/constants';
import * as path from 'path';
import { from, Observable, of } from 'rxjs';
import { concatMap, map } from 'rxjs/operators';
import { prepareConfig } from '../../utils/config';
import {
NextBuildBuilderOptions,
NextExportBuilderOptions
} from '../../utils/types';
try {
require('dotenv').config();
} catch (e) {}
export default createBuilder<NextExportBuilderOptions>(run);
function run(
options: NextExportBuilderOptions,
context: BuilderContext
): Observable<BuilderOutput> {
const buildTarget = targetFromTargetString(options.buildTarget);
const build$ = scheduleTargetAndForget(context, buildTarget);
return build$.pipe(
concatMap(r => {
if (!r.success) return of(r);
return from(context.getTargetOptions(buildTarget)).pipe(
concatMap((buildOptions: NextBuildBuilderOptions) => {
const root = path.resolve(context.workspaceRoot, buildOptions.root);
const config = prepareConfig(
context.workspaceRoot,
buildOptions.root,
buildOptions.outputPath,
buildOptions.fileReplacements,
PHASE_EXPORT
);
return from(
exportApp(
root,
{
silent: options.silent,
threads: options.threads,
outdir: `${buildOptions.outputPath}/exported`
} as any,
config
)
).pipe(map(() => ({ success: true })));
})
);
})
);
}