@noego/app 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,39 +3,72 @@ import path from 'node:path';
3
3
 
4
4
  import { createBuildContext } from '../build/context.js';
5
5
  import { buildServer } from '../build/server.js';
6
- import { discoverProject } from '../build/openapi.js';
7
6
  import { buildClient } from '../build/client.js';
8
- import { buildClientModules } from '../build/client-modules.js';
9
7
  import { buildSsr } from '../build/ssr.js';
10
8
  import { rewriteHtmlTemplate } from '../build/html.js';
11
9
  import { writeRuntimeManifest } from '../build/runtime-manifest.js';
12
10
  import { generateBootstrap } from '../build/bootstrap.js';
11
+ import { loadBuildConfig } from '../config.js';
12
+ import { discoverProject } from '../build/openapi.js';
13
13
 
14
- export async function runBuild(config) {
14
+ export async function runBuild(cliOptions) {
15
+ const config = await loadBuildConfig(cliOptions);
15
16
  const context = createBuildContext(config);
16
17
  const { logger } = context;
17
18
 
19
+ const hasServer = !!config.server;
20
+ const hasClient = !!config.ui;
21
+
22
+ if (!hasServer && !hasClient) {
23
+ logger.error('Nothing to build. Define a `server` or `client` section in your config.');
24
+ process.exit(1);
25
+ }
26
+
27
+ logger.info(`Starting build in ${config.mode} mode...`);
28
+
18
29
  await prepareWorkspace(context);
30
+
19
31
  const discovery = await discoverProject(context);
20
- const serverArtifacts = await buildServer(context, discovery);
21
- const clientArtifacts = await buildClient(context, discovery);
22
- await buildClientModules(context, discovery);
23
- await rewriteHtmlTemplate(context, clientArtifacts);
24
- const ssrArtifacts = await buildSsr(context, discovery);
32
+
33
+ let serverArtifacts = null;
34
+ if (hasServer) {
35
+ logger.info('Building server...');
36
+ serverArtifacts = await buildServer(context, discovery);
37
+ logger.info('Server build complete.');
38
+ }
39
+
40
+ let clientArtifacts = null;
41
+ let ssrArtifacts = null;
42
+ if (hasClient) {
43
+ logger.info('Building client...');
44
+ clientArtifacts = await buildClient(context, discovery);
45
+
46
+ logger.info('Building SSR components...');
47
+ ssrArtifacts = await buildSsr(context, discovery);
48
+
49
+ await rewriteHtmlTemplate(context, clientArtifacts);
50
+ logger.info('Client & SSR build complete.');
51
+ }
52
+
25
53
  const runtimeManifestPath = await writeRuntimeManifest(context, {
26
54
  discovery,
27
55
  server: serverArtifacts || {},
28
- client: clientArtifacts,
29
- ssr: ssrArtifacts
56
+ client: clientArtifacts || {},
57
+ ssr: ssrArtifacts || {}
30
58
  });
31
59
 
32
- logger.info(`Runtime manifest: ${path.relative(config.rootDir, runtimeManifestPath)}`);
33
- logger.info(`Client manifest: ${path.relative(config.outDir, clientArtifacts.manifestPath)}`);
34
- if (ssrArtifacts.manifestPath) {
35
- logger.info(`SSR manifest: ${path.relative(config.outDir, ssrArtifacts.manifestPath)}`);
60
+ logger.info(`Runtime manifest: ${path.relative(config.root, runtimeManifestPath)}`);
61
+
62
+ if (hasClient) {
63
+ logger.info(`Client manifest: ${path.relative(config.outDir, clientArtifacts.manifestPath)}`);
64
+ if (ssrArtifacts.manifestPath) {
65
+ logger.info(`SSR manifest: ${path.relative(config.outDir, ssrArtifacts.manifestPath)}`);
66
+ }
36
67
  }
37
68
 
38
- await generateBootstrap(context);
69
+ if (hasServer) {
70
+ await generateBootstrap(context);
71
+ }
39
72
 
40
73
  logger.info('Build complete');
41
74
  }
@@ -44,16 +77,28 @@ async function prepareWorkspace(context) {
44
77
  const { config, logger } = context;
45
78
  const { outDir, layout, rootDir } = config;
46
79
 
80
+ if (!outDir) {
81
+ logger.error('Output directory (`outDir`) is not defined in the configuration.');
82
+ process.exit(1);
83
+ }
84
+
47
85
  if (path.resolve(outDir) === path.resolve(rootDir)) {
48
86
  throw new Error('Refusing to clean output: --out resolves to project root');
49
87
  }
50
88
 
51
- logger.info(`Cleaning output directory ${outDir}`);
89
+ logger.info(`Cleaning output directory ${path.relative(rootDir, outDir)}`);
52
90
  await fs.rm(outDir, { recursive: true, force: true });
53
91
  await fs.mkdir(layout.tempDir, { recursive: true });
54
- await fs.mkdir(layout.serverOutDir, { recursive: true });
55
- await fs.mkdir(layout.middlewareOutDir, { recursive: true });
56
- await fs.mkdir(layout.clientOutDir, { recursive: true });
57
- await fs.mkdir(layout.uiOutDir, { recursive: true });
58
- await fs.mkdir(layout.ssrOutDir, { recursive: true });
92
+
93
+ if (config.server) {
94
+ await fs.mkdir(layout.serverOutDir, { recursive: true });
95
+ if (layout.middlewareOutDir) {
96
+ await fs.mkdir(layout.middlewareOutDir, { recursive: true });
97
+ }
98
+ }
99
+ if (config.client) {
100
+ await fs.mkdir(layout.clientOutDir, { recursive: true });
101
+ await fs.mkdir(layout.uiOutDir, { recursive: true });
102
+ await fs.mkdir(layout.ssrOutDir, { recursive: true });
103
+ }
59
104
  }