@baseplate-dev/project-builder-server 0.1.1

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.
Files changed (213) hide show
  1. package/LICENSE +390 -0
  2. package/dist/api/context.d.ts +15 -0
  3. package/dist/api/context.d.ts.map +1 -0
  4. package/dist/api/context.js +21 -0
  5. package/dist/api/context.js.map +1 -0
  6. package/dist/api/index.d.ts +287 -0
  7. package/dist/api/index.d.ts.map +1 -0
  8. package/dist/api/index.js +12 -0
  9. package/dist/api/index.js.map +1 -0
  10. package/dist/api/plugins.d.ts +35 -0
  11. package/dist/api/plugins.d.ts.map +1 -0
  12. package/dist/api/plugins.js +13 -0
  13. package/dist/api/plugins.js.map +1 -0
  14. package/dist/api/projects.d.ts +62 -0
  15. package/dist/api/projects.d.ts.map +1 -0
  16. package/dist/api/projects.js +64 -0
  17. package/dist/api/projects.js.map +1 -0
  18. package/dist/api/sync.d.ts +134 -0
  19. package/dist/api/sync.d.ts.map +1 -0
  20. package/dist/api/sync.js +90 -0
  21. package/dist/api/sync.js.map +1 -0
  22. package/dist/api/trpc.d.ts +50 -0
  23. package/dist/api/trpc.d.ts.map +1 -0
  24. package/dist/api/trpc.js +39 -0
  25. package/dist/api/trpc.js.map +1 -0
  26. package/dist/api/types.d.ts +13 -0
  27. package/dist/api/types.d.ts.map +1 -0
  28. package/dist/api/types.js +2 -0
  29. package/dist/api/types.js.map +1 -0
  30. package/dist/api/version.d.ts +40 -0
  31. package/dist/api/version.d.ts.map +1 -0
  32. package/dist/api/version.js +9 -0
  33. package/dist/api/version.js.map +1 -0
  34. package/dist/compiler/admin/crud/displays.d.ts +5 -0
  35. package/dist/compiler/admin/crud/displays.d.ts.map +1 -0
  36. package/dist/compiler/admin/crud/displays.js +46 -0
  37. package/dist/compiler/admin/crud/displays.js.map +1 -0
  38. package/dist/compiler/admin/crud/index.d.ts +5 -0
  39. package/dist/compiler/admin/crud/index.d.ts.map +1 -0
  40. package/dist/compiler/admin/crud/index.js +90 -0
  41. package/dist/compiler/admin/crud/index.js.map +1 -0
  42. package/dist/compiler/admin/crud/inputs.d.ts +5 -0
  43. package/dist/compiler/admin/crud/inputs.d.ts.map +1 -0
  44. package/dist/compiler/admin/crud/inputs.js +146 -0
  45. package/dist/compiler/admin/crud/inputs.js.map +1 -0
  46. package/dist/compiler/admin/index.d.ts +3 -0
  47. package/dist/compiler/admin/index.d.ts.map +1 -0
  48. package/dist/compiler/admin/index.js +95 -0
  49. package/dist/compiler/admin/index.js.map +1 -0
  50. package/dist/compiler/admin/sections.d.ts +5 -0
  51. package/dist/compiler/admin/sections.d.ts.map +1 -0
  52. package/dist/compiler/admin/sections.js +54 -0
  53. package/dist/compiler/admin/sections.js.map +1 -0
  54. package/dist/compiler/app-entry-builder.d.ts +19 -0
  55. package/dist/compiler/app-entry-builder.d.ts.map +1 -0
  56. package/dist/compiler/app-entry-builder.js +45 -0
  57. package/dist/compiler/app-entry-builder.js.map +1 -0
  58. package/dist/compiler/backend/enums.d.ts +4 -0
  59. package/dist/compiler/backend/enums.d.ts.map +1 -0
  60. package/dist/compiler/backend/enums.js +14 -0
  61. package/dist/compiler/backend/enums.js.map +1 -0
  62. package/dist/compiler/backend/fastify.d.ts +5 -0
  63. package/dist/compiler/backend/fastify.d.ts.map +1 -0
  64. package/dist/compiler/backend/fastify.js +62 -0
  65. package/dist/compiler/backend/fastify.js.map +1 -0
  66. package/dist/compiler/backend/feature.d.ts +4 -0
  67. package/dist/compiler/backend/feature.d.ts.map +1 -0
  68. package/dist/compiler/backend/feature.js +26 -0
  69. package/dist/compiler/backend/feature.js.map +1 -0
  70. package/dist/compiler/backend/graphql.d.ts +4 -0
  71. package/dist/compiler/backend/graphql.d.ts.map +1 -0
  72. package/dist/compiler/backend/graphql.js +171 -0
  73. package/dist/compiler/backend/graphql.js.map +1 -0
  74. package/dist/compiler/backend/index.d.ts +3 -0
  75. package/dist/compiler/backend/index.d.ts.map +1 -0
  76. package/dist/compiler/backend/index.js +34 -0
  77. package/dist/compiler/backend/index.js.map +1 -0
  78. package/dist/compiler/backend/models.d.ts +4 -0
  79. package/dist/compiler/backend/models.d.ts.map +1 -0
  80. package/dist/compiler/backend/models.js +79 -0
  81. package/dist/compiler/backend/models.js.map +1 -0
  82. package/dist/compiler/backend/services.d.ts +4 -0
  83. package/dist/compiler/backend/services.d.ts.map +1 -0
  84. package/dist/compiler/backend/services.js +90 -0
  85. package/dist/compiler/backend/services.js.map +1 -0
  86. package/dist/compiler/backend/utils.d.ts +16 -0
  87. package/dist/compiler/backend/utils.d.ts.map +1 -0
  88. package/dist/compiler/backend/utils.js +17 -0
  89. package/dist/compiler/backend/utils.js.map +1 -0
  90. package/dist/compiler/index.d.ts +3 -0
  91. package/dist/compiler/index.d.ts.map +1 -0
  92. package/dist/compiler/index.js +31 -0
  93. package/dist/compiler/index.js.map +1 -0
  94. package/dist/compiler/web/features.d.ts +5 -0
  95. package/dist/compiler/web/features.d.ts.map +1 -0
  96. package/dist/compiler/web/features.js +30 -0
  97. package/dist/compiler/web/features.js.map +1 -0
  98. package/dist/compiler/web/index.d.ts +3 -0
  99. package/dist/compiler/web/index.d.ts.map +1 -0
  100. package/dist/compiler/web/index.js +58 -0
  101. package/dist/compiler/web/index.js.map +1 -0
  102. package/dist/constants/index.d.ts +2 -0
  103. package/dist/constants/index.d.ts.map +1 -0
  104. package/dist/constants/index.js +2 -0
  105. package/dist/constants/index.js.map +1 -0
  106. package/dist/constants/server.d.ts +2 -0
  107. package/dist/constants/server.d.ts.map +1 -0
  108. package/dist/constants/server.js +2 -0
  109. package/dist/constants/server.js.map +1 -0
  110. package/dist/index.d.ts +9 -0
  111. package/dist/index.js +9 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/plugins/index.d.ts +3 -0
  114. package/dist/plugins/index.d.ts.map +1 -0
  115. package/dist/plugins/index.js +3 -0
  116. package/dist/plugins/index.js.map +1 -0
  117. package/dist/plugins/node-plugin-store.d.ts +6 -0
  118. package/dist/plugins/node-plugin-store.d.ts.map +1 -0
  119. package/dist/plugins/node-plugin-store.js +40 -0
  120. package/dist/plugins/node-plugin-store.js.map +1 -0
  121. package/dist/plugins/plugin-discovery.d.ts +7 -0
  122. package/dist/plugins/plugin-discovery.d.ts.map +1 -0
  123. package/dist/plugins/plugin-discovery.js +50 -0
  124. package/dist/plugins/plugin-discovery.js.map +1 -0
  125. package/dist/server/builder-service-manager.d.ts +32 -0
  126. package/dist/server/builder-service-manager.d.ts.map +1 -0
  127. package/dist/server/builder-service-manager.js +52 -0
  128. package/dist/server/builder-service-manager.js.map +1 -0
  129. package/dist/server/graceful-shutdown.d.ts +2 -0
  130. package/dist/server/graceful-shutdown.d.ts.map +1 -0
  131. package/dist/server/graceful-shutdown.js +25 -0
  132. package/dist/server/graceful-shutdown.js.map +1 -0
  133. package/dist/server/index.d.ts +8 -0
  134. package/dist/server/index.d.ts.map +1 -0
  135. package/dist/server/index.js +33 -0
  136. package/dist/server/index.js.map +1 -0
  137. package/dist/server/plugin.d.ts +12 -0
  138. package/dist/server/plugin.d.ts.map +1 -0
  139. package/dist/server/plugin.js +109 -0
  140. package/dist/server/plugin.js.map +1 -0
  141. package/dist/server/server.d.ts +16 -0
  142. package/dist/server/server.d.ts.map +1 -0
  143. package/dist/server/server.js +47 -0
  144. package/dist/server/server.js.map +1 -0
  145. package/dist/service/builder-service.d.ts +154 -0
  146. package/dist/service/builder-service.d.ts.map +1 -0
  147. package/dist/service/builder-service.js +338 -0
  148. package/dist/service/builder-service.js.map +1 -0
  149. package/dist/sync/build-project.d.ts +54 -0
  150. package/dist/sync/build-project.d.ts.map +1 -0
  151. package/dist/sync/build-project.js +173 -0
  152. package/dist/sync/build-project.js.map +1 -0
  153. package/dist/sync/conflict-file-monitor.d.ts +27 -0
  154. package/dist/sync/conflict-file-monitor.d.ts.map +1 -0
  155. package/dist/sync/conflict-file-monitor.js +125 -0
  156. package/dist/sync/conflict-file-monitor.js.map +1 -0
  157. package/dist/sync/generate-for-directory.d.ts +29 -0
  158. package/dist/sync/generate-for-directory.d.ts.map +1 -0
  159. package/dist/sync/generate-for-directory.js +132 -0
  160. package/dist/sync/generate-for-directory.js.map +1 -0
  161. package/dist/sync/generator-steps-writer.d.ts +3 -0
  162. package/dist/sync/generator-steps-writer.d.ts.map +1 -0
  163. package/dist/sync/generator-steps-writer.js +6 -0
  164. package/dist/sync/generator-steps-writer.js.map +1 -0
  165. package/dist/sync/index.d.ts +4 -0
  166. package/dist/sync/index.d.ts.map +1 -0
  167. package/dist/sync/index.js +4 -0
  168. package/dist/sync/index.js.map +1 -0
  169. package/dist/sync/sync-metadata-controller.d.ts +29 -0
  170. package/dist/sync/sync-metadata-controller.d.ts.map +1 -0
  171. package/dist/sync/sync-metadata-controller.js +95 -0
  172. package/dist/sync/sync-metadata-controller.js.map +1 -0
  173. package/dist/sync/sync-metadata-service.d.ts +20 -0
  174. package/dist/sync/sync-metadata-service.d.ts.map +1 -0
  175. package/dist/sync/sync-metadata-service.js +31 -0
  176. package/dist/sync/sync-metadata-service.js.map +1 -0
  177. package/dist/sync/sync-metadata.d.ts +444 -0
  178. package/dist/sync/sync-metadata.d.ts.map +1 -0
  179. package/dist/sync/sync-metadata.js +80 -0
  180. package/dist/sync/sync-metadata.js.map +1 -0
  181. package/dist/sync/utils.d.ts +8 -0
  182. package/dist/sync/utils.d.ts.map +1 -0
  183. package/dist/sync/utils.js +23 -0
  184. package/dist/sync/utils.js.map +1 -0
  185. package/dist/template-extractor/index.d.ts +2 -0
  186. package/dist/template-extractor/index.d.ts.map +1 -0
  187. package/dist/template-extractor/index.js +2 -0
  188. package/dist/template-extractor/index.js.map +1 -0
  189. package/dist/template-extractor/run-template-extractor.d.ts +4 -0
  190. package/dist/template-extractor/run-template-extractor.d.ts.map +1 -0
  191. package/dist/template-extractor/run-template-extractor.js +60 -0
  192. package/dist/template-extractor/run-template-extractor.js.map +1 -0
  193. package/dist/user-config/index.d.ts +2 -0
  194. package/dist/user-config/index.d.ts.map +1 -0
  195. package/dist/user-config/index.js +2 -0
  196. package/dist/user-config/index.js.map +1 -0
  197. package/dist/user-config/user-config-schema.d.ts +46 -0
  198. package/dist/user-config/user-config-schema.d.ts.map +1 -0
  199. package/dist/user-config/user-config-schema.js +30 -0
  200. package/dist/user-config/user-config-schema.js.map +1 -0
  201. package/dist/utils/case.d.ts +3 -0
  202. package/dist/utils/case.d.ts.map +1 -0
  203. package/dist/utils/case.js +14 -0
  204. package/dist/utils/case.js.map +1 -0
  205. package/dist/utils/errors.d.ts +10 -0
  206. package/dist/utils/errors.d.ts.map +1 -0
  207. package/dist/utils/errors.js +15 -0
  208. package/dist/utils/errors.js.map +1 -0
  209. package/dist/utils/paths.d.ts +8 -0
  210. package/dist/utils/paths.d.ts.map +1 -0
  211. package/dist/utils/paths.js +17 -0
  212. package/dist/utils/paths.js.map +1 -0
  213. package/package.json +84 -0
@@ -0,0 +1,338 @@
1
+ import { getLatestMigrationVersion } from '@baseplate-dev/project-builder-lib';
2
+ import { createEventedLogger } from '@baseplate-dev/sync';
3
+ import { hashWithSHA256, TypedEventEmitter } from '@baseplate-dev/utils';
4
+ import { ensureDir, fileExists, handleFileNotFoundError, } from '@baseplate-dev/utils/node';
5
+ import chalk from 'chalk';
6
+ import chokidar from 'chokidar';
7
+ import { execa, parseCommandString } from 'execa';
8
+ import { readFile, unlink, writeFile } from 'node:fs/promises';
9
+ import path from 'node:path';
10
+ import { createNodeSchemaParserContext, discoverPlugins, } from '#src/plugins/index.js';
11
+ import { ConflictFileMonitor } from '#src/sync/conflict-file-monitor.js';
12
+ import { buildProject } from '#src/sync/index.js';
13
+ import { SyncMetadataController } from '#src/sync/sync-metadata-controller.js';
14
+ import { getPackageSyncStatusFromResult } from '#src/sync/utils.js';
15
+ const MAX_CONSOLE_OUTPUT_LENGTH = 1000;
16
+ export class ProjectBuilderService extends TypedEventEmitter {
17
+ directory;
18
+ projectJsonPath;
19
+ watcher;
20
+ id;
21
+ abortController;
22
+ logger;
23
+ cliVersion;
24
+ cachedAvailablePlugins = null;
25
+ builtInPlugins;
26
+ schemaParserContext;
27
+ userConfig;
28
+ syncMetadataController;
29
+ unsubscribeOperations = [];
30
+ currentSyncConsoleOutput = [];
31
+ conflictFileMonitor;
32
+ skipCommands;
33
+ constructor({ directory, id, cliVersion, builtInPlugins, userConfig, skipCommands, }) {
34
+ super();
35
+ this.directory = directory;
36
+ this.projectJsonPath = path.join(directory, 'baseplate/project-definition.json');
37
+ this.id = id;
38
+ this.cliVersion = cliVersion;
39
+ this.userConfig = userConfig;
40
+ this.logger = createEventedLogger();
41
+ this.builtInPlugins = builtInPlugins;
42
+ this.syncMetadataController = new SyncMetadataController(this.directory, this.logger);
43
+ this.skipCommands = skipCommands ?? false;
44
+ this.syncMetadataController
45
+ .getMetadata()
46
+ .then((syncMetadata) => {
47
+ // if the sync is in progress, cancel it - it's more likely
48
+ // the previous sync crashed then we have two simultaneous syncs
49
+ // happening.
50
+ if (syncMetadata.status === 'in-progress') {
51
+ this.syncMetadataController.writeMetadata({
52
+ ...syncMetadata,
53
+ status: 'cancelled',
54
+ });
55
+ }
56
+ })
57
+ .catch((err) => {
58
+ this.logger.error(`Unable to get sync metadata: ${String(err)}`);
59
+ });
60
+ const emitConsoleEvent = (message) => {
61
+ if (this.currentSyncConsoleOutput.length > MAX_CONSOLE_OUTPUT_LENGTH) {
62
+ this.currentSyncConsoleOutput.shift();
63
+ }
64
+ this.currentSyncConsoleOutput.push(message);
65
+ this.emit('command-console-emitted', {
66
+ id: this.id,
67
+ message,
68
+ });
69
+ };
70
+ this.conflictFileMonitor = new ConflictFileMonitor(this.syncMetadataController, this.logger);
71
+ this.conflictFileMonitor.start().catch((err) => {
72
+ this.logger.error(`Unable to start conflict file monitor: ${String(err)}`);
73
+ });
74
+ this.unsubscribeOperations.push(() => {
75
+ this.conflictFileMonitor?.stop().catch((err) => {
76
+ this.logger.error(`Unable to stop conflict file monitor: ${String(err)}`);
77
+ });
78
+ }, this.logger.onLog(emitConsoleEvent), this.logger.onError(emitConsoleEvent), this.syncMetadataController.watchMetadata(), this.syncMetadataController.on('sync-metadata-changed', (syncMetadata) => {
79
+ this.emit('sync-metadata-changed', {
80
+ id: this.id,
81
+ syncMetadata,
82
+ });
83
+ }));
84
+ }
85
+ handleProjectJsonChange() {
86
+ this.readDefinition()
87
+ .then((payload) => {
88
+ this.emit('project-json-changed', payload);
89
+ })
90
+ .catch((error) => {
91
+ this.logger.error(error);
92
+ });
93
+ }
94
+ _getInitialProjectDefinition() {
95
+ const starterName = path
96
+ .basename(path.dirname(path.dirname(this.projectJsonPath)))
97
+ .toLowerCase();
98
+ const sanitizedName = starterName.replaceAll(/[^a-zA-Z0-9-]/g, '');
99
+ const finalName = sanitizedName || 'project-name';
100
+ return JSON.stringify({
101
+ settings: {
102
+ general: {
103
+ name: finalName,
104
+ portOffset: 5000,
105
+ },
106
+ },
107
+ cliVersion: this.cliVersion,
108
+ schemaVersion: getLatestMigrationVersion(),
109
+ });
110
+ }
111
+ /**
112
+ * Initializes the project builder service.
113
+ */
114
+ init() {
115
+ this.watcher = chokidar.watch(this.projectJsonPath, {
116
+ ignoreInitial: true,
117
+ awaitWriteFinish: {
118
+ stabilityThreshold: 1000,
119
+ },
120
+ });
121
+ const boundHandleProjectJsonChange = this.handleProjectJsonChange.bind(this);
122
+ this.watcher.on('all', boundHandleProjectJsonChange);
123
+ }
124
+ /**
125
+ * Closes the project builder service.
126
+ */
127
+ close() {
128
+ if (this.watcher) {
129
+ this.watcher.close().catch((err) => {
130
+ this.logger.error(err);
131
+ });
132
+ }
133
+ for (const unsubscribe of this.unsubscribeOperations)
134
+ unsubscribe();
135
+ this.abortEventEmitter();
136
+ }
137
+ /**
138
+ * Returns the sync metadata.
139
+ *
140
+ * @returns The sync metadata.
141
+ */
142
+ async getSyncMetadata() {
143
+ return this.syncMetadataController.getMetadata();
144
+ }
145
+ /**
146
+ * Reads the project definition file.
147
+ *
148
+ * @returns The contents of the project definition file.
149
+ */
150
+ async readDefinition() {
151
+ const fileReadResult = await readFile(this.projectJsonPath, 'utf8').catch(handleFileNotFoundError);
152
+ const contents = fileReadResult ?? this._getInitialProjectDefinition();
153
+ return {
154
+ contents,
155
+ hash: await hashWithSHA256(contents),
156
+ };
157
+ }
158
+ /**
159
+ * Writes a project definition file checking that the original contents match
160
+ * the current contents of the file to avoid overwriting changes made by the
161
+ * user.
162
+ *
163
+ * @param newContents - The new contents of the project definition file.
164
+ * @param oldContentsHash - The SHA-256 hash of the old contents of the project definition file.
165
+ * @returns The result of the write operation.
166
+ */
167
+ async writeDefinition(newContents, oldContentsHash) {
168
+ if (await fileExists(this.projectJsonPath)) {
169
+ const currentContents = await readFile(this.projectJsonPath);
170
+ const currentContentsHash = await hashWithSHA256(currentContents);
171
+ if (currentContentsHash !== oldContentsHash) {
172
+ return {
173
+ type: 'original-contents-mismatch',
174
+ currentPayload: {
175
+ contents: currentContents.toString('utf8'),
176
+ hash: currentContentsHash,
177
+ },
178
+ };
179
+ }
180
+ }
181
+ else {
182
+ await ensureDir(path.dirname(this.projectJsonPath));
183
+ }
184
+ await writeFile(this.projectJsonPath, newContents, 'utf8');
185
+ return { type: 'success' };
186
+ }
187
+ /**
188
+ * Initiates a new build operation.
189
+ */
190
+ async buildProject() {
191
+ try {
192
+ if (this.abortController) {
193
+ throw new Error('Build process is already running');
194
+ }
195
+ const syncMetadata = await this.getSyncMetadata();
196
+ if (Object.values(syncMetadata.packages).some((p) => p.status === 'conflicts')) {
197
+ throw new Error('Conflicts must be resolved before building');
198
+ }
199
+ this.abortController = new AbortController();
200
+ this.currentSyncConsoleOutput = [];
201
+ this.emit('sync-started', { id: this.id });
202
+ await buildProject({
203
+ directory: this.directory,
204
+ logger: this.logger,
205
+ context: await this.getSchemaParserContext(),
206
+ userConfig: this.userConfig,
207
+ syncMetadataController: this.syncMetadataController,
208
+ abortSignal: this.abortController.signal,
209
+ skipCommands: this.skipCommands,
210
+ });
211
+ }
212
+ catch (error) {
213
+ this.logger.error(chalk.red(`Error building project: ${error instanceof Error ? error.stack : String(error)}`));
214
+ throw error;
215
+ }
216
+ finally {
217
+ this.abortController = undefined;
218
+ this.emit('sync-completed', {
219
+ id: this.id,
220
+ syncMetadata: await this.getSyncMetadata().catch((err) => ({
221
+ status: 'error',
222
+ completedAt: new Date().toISOString(),
223
+ globalErrors: [String(err)],
224
+ packages: {},
225
+ })),
226
+ });
227
+ }
228
+ }
229
+ /**
230
+ * Cancels the current sync operation.
231
+ */
232
+ cancelSync() {
233
+ this.abortController?.abort();
234
+ }
235
+ /**
236
+ * Returns the console output from the current sync operation.
237
+ *
238
+ * @returns The console output from the current sync operation.
239
+ */
240
+ getCurrentSyncConsoleOutput() {
241
+ return this.currentSyncConsoleOutput;
242
+ }
243
+ async getSchemaParserContext() {
244
+ this.schemaParserContext ??= await createNodeSchemaParserContext(this.directory, this.logger, this.builtInPlugins);
245
+ return this.schemaParserContext;
246
+ }
247
+ async getAvailablePlugins() {
248
+ if (!this.cachedAvailablePlugins) {
249
+ const projectPlugins = await discoverPlugins(this.directory, this.logger);
250
+ this.cachedAvailablePlugins = [
251
+ ...this.builtInPlugins.filter((plugin) => !projectPlugins.some((projectPlugin) => projectPlugin.packageName === plugin.packageName)),
252
+ ...projectPlugins,
253
+ ];
254
+ }
255
+ return this.cachedAvailablePlugins;
256
+ }
257
+ async getPackageInfo(packageId) {
258
+ const metadata = await this.syncMetadataController.getMetadata();
259
+ if (!(packageId in metadata.packages)) {
260
+ throw new Error(`Package ${packageId} not found`);
261
+ }
262
+ return metadata.packages[packageId];
263
+ }
264
+ /**
265
+ * Opens the editor for a file.
266
+ *
267
+ * @param packageId - The ID of the package.
268
+ * @param relativePath - The relative path of the file.
269
+ */
270
+ async openEditor(packageId, relativePath) {
271
+ const editor = this.userConfig.sync?.editor;
272
+ if (!editor) {
273
+ throw new Error('No editor configured');
274
+ }
275
+ const packageInfo = await this.getPackageInfo(packageId);
276
+ const absolutePath = path.join(packageInfo.path, relativePath);
277
+ const [command, ...args] = parseCommandString(editor);
278
+ const result = execa(command, [...args, absolutePath], {
279
+ cwd: this.directory,
280
+ detached: true,
281
+ });
282
+ result.unref();
283
+ }
284
+ async removeConflictFile(packageId, relativePath) {
285
+ await this.syncMetadataController.updateMetadataForPackage(packageId, (packageInfo) => {
286
+ const updatedPackageInfo = {
287
+ ...packageInfo,
288
+ result: packageInfo.result
289
+ ? {
290
+ ...packageInfo.result,
291
+ filesWithConflicts: packageInfo.result.filesWithConflicts?.filter((file) => file.relativePath !== relativePath),
292
+ }
293
+ : undefined,
294
+ };
295
+ updatedPackageInfo.status = getPackageSyncStatusFromResult(updatedPackageInfo.result);
296
+ return updatedPackageInfo;
297
+ });
298
+ }
299
+ /**
300
+ * Deletes a conflict file.
301
+ *
302
+ * @param packageId - The ID of the package.
303
+ * @param relativePath - The relative path of the file.
304
+ */
305
+ async deleteConflictFile(packageId, relativePath) {
306
+ const packageInfo = await this.getPackageInfo(packageId);
307
+ // check if file exists as a conflict file
308
+ const conflictFile = packageInfo.result?.filesWithConflicts?.find((file) => file.relativePath === relativePath);
309
+ if (!conflictFile) {
310
+ throw new Error(`File ${relativePath} could not be found with any conflicts`);
311
+ }
312
+ if (!['generated-deleted', 'working-deleted'].includes(conflictFile.conflictType)) {
313
+ throw new Error(`File ${relativePath} is a ${conflictFile.conflictType} and cannot be deleted`);
314
+ }
315
+ const absolutePath = path.join(packageInfo.path, conflictFile.generatedConflictRelativePath ?? conflictFile.relativePath);
316
+ await unlink(absolutePath).catch(handleFileNotFoundError);
317
+ await this.removeConflictFile(packageId, relativePath);
318
+ }
319
+ /**
320
+ * Keeps a conflict file.
321
+ *
322
+ * @param packageId - The ID of the package.
323
+ * @param relativePath - The relative path of the file.
324
+ */
325
+ async keepConflictFile(packageId, relativePath) {
326
+ const packageInfo = await this.getPackageInfo(packageId);
327
+ // check if file exists as a conflict file
328
+ const conflictFile = packageInfo.result?.filesWithConflicts?.find((file) => file.relativePath === relativePath);
329
+ if (!conflictFile) {
330
+ throw new Error(`File ${relativePath} could not be found with any conflicts`);
331
+ }
332
+ if (!['generated-deleted', 'working-deleted'].includes(conflictFile.conflictType)) {
333
+ throw new Error(`File ${relativePath} is a ${conflictFile.conflictType} and cannot be kept`);
334
+ }
335
+ await this.removeConflictFile(packageId, relativePath);
336
+ }
337
+ }
338
+ //# sourceMappingURL=builder-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder-service.js","sourceRoot":"","sources":["../../src/service/builder-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type { SchemaParserContext } from '@baseplate-dev/project-builder-lib';
2
+ import { type Logger } from '@baseplate-dev/sync';
3
+ import type { BaseplateUserConfig } from '#src/user-config/user-config-schema.js';
4
+ import type { SyncStatus } from '../sync/index.js';
5
+ import type { SyncMetadataController } from './sync-metadata-controller.js';
6
+ /**
7
+ * Options for building the project.
8
+ */
9
+ export interface BuildProjectOptions {
10
+ /**
11
+ * The directory to build the project in.
12
+ */
13
+ directory: string;
14
+ /**
15
+ * The logger to use for logging.
16
+ */
17
+ logger: Logger;
18
+ /**
19
+ * The context to use for parsing the project.
20
+ */
21
+ context: SchemaParserContext;
22
+ /**
23
+ * The user config to use for building the project.
24
+ */
25
+ userConfig: BaseplateUserConfig;
26
+ /**
27
+ * The sync metadata controller to use for updating metadata about the sync process.
28
+ */
29
+ syncMetadataController?: SyncMetadataController;
30
+ /**
31
+ * Abort signal to use for cancelling the sync.
32
+ */
33
+ abortSignal?: AbortSignal;
34
+ /**
35
+ * Whether to skip running commands.
36
+ */
37
+ skipCommands?: boolean;
38
+ }
39
+ /**
40
+ * The result of building the project.
41
+ */
42
+ export interface BuildProjectResult {
43
+ /**
44
+ * The status of the build.
45
+ */
46
+ status: SyncStatus;
47
+ }
48
+ /**
49
+ * Builds the project in the given directory.
50
+ *
51
+ * @param options - The options for building the project.
52
+ */
53
+ export declare function buildProject({ directory, logger, context, userConfig, syncMetadataController, abortSignal, skipCommands, }: BuildProjectOptions): Promise<BuildProjectResult>;
54
+ //# sourceMappingURL=build-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-project.d.ts","sourceRoot":"","sources":["../../src/sync/build-project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,mBAAmB,EACpB,MAAM,oCAAoC,CAAC;AAO5C,OAAO,EAAsB,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAYtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAIlF,OAAO,KAAK,EAAqB,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAuD5E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,EAAE,mBAAmB,CAAC;IAC7B;;OAEG;IACH,UAAU,EAAE,mBAAmB,CAAC;IAChC;;OAEG;IACH,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,EACjC,SAAS,EACT,MAAM,EACN,OAAO,EACP,UAAU,EACV,sBAAsB,EACtB,WAAW,EACX,YAAY,GACb,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA+JnD"}
@@ -0,0 +1,173 @@
1
+ import { createPluginImplementationStore, runPluginMigrations, runSchemaMigrations, } from '@baseplate-dev/project-builder-lib';
2
+ import { CancelledSyncError } from '@baseplate-dev/sync';
3
+ import { enhanceErrorWithContext, hashWithSHA256, stringifyPrettyStable, } from '@baseplate-dev/utils';
4
+ import { fileExists } from '@baseplate-dev/utils/node';
5
+ import { mapValues } from 'es-toolkit';
6
+ import { readFile, writeFile } from 'node:fs/promises';
7
+ import path from 'node:path';
8
+ import { stripVTControlCharacters } from 'node:util';
9
+ import { compileApplications } from '#src/compiler/index.js';
10
+ import { generateForDirectory } from '../sync/index.js';
11
+ import { getPackageSyncStatusFromResult } from './utils.js';
12
+ async function loadProjectJson(directory, context) {
13
+ const projectJsonPath = path.join(directory, 'baseplate/project-definition.json');
14
+ const projectJsonExists = await fileExists(projectJsonPath);
15
+ if (!projectJsonExists) {
16
+ throw new Error(`Could not find definition file at ${projectJsonPath}`);
17
+ }
18
+ try {
19
+ const projectJsonContents = await readFile(projectJsonPath, 'utf8');
20
+ const hash = await hashWithSHA256(projectJsonContents);
21
+ const projectJson = JSON.parse(projectJsonContents);
22
+ const { migratedDefinition, appliedMigrations } = runSchemaMigrations(projectJson);
23
+ if (appliedMigrations.length > 0) {
24
+ await writeFile(projectJsonPath, stringifyPrettyStable(migratedDefinition));
25
+ }
26
+ const pluginImplementationStore = createPluginImplementationStore(context.pluginStore, migratedDefinition);
27
+ const definitionWithPluginMigrations = runPluginMigrations(migratedDefinition, pluginImplementationStore);
28
+ return { definition: definitionWithPluginMigrations, hash };
29
+ }
30
+ catch (err) {
31
+ throw enhanceErrorWithContext(err, `Error parsing project definition at ${projectJsonPath}`);
32
+ }
33
+ }
34
+ /**
35
+ * Builds the project in the given directory.
36
+ *
37
+ * @param options - The options for building the project.
38
+ */
39
+ export async function buildProject({ directory, logger, context, userConfig, syncMetadataController, abortSignal, skipCommands, }) {
40
+ await syncMetadataController?.updateMetadata((metadata) => ({
41
+ ...metadata,
42
+ status: 'in-progress',
43
+ globalErrors: undefined,
44
+ startedAt: new Date().toISOString(),
45
+ // retain the packages of the previous sync initially
46
+ packages: mapValues(metadata.packages, (packageInfo) => ({
47
+ ...packageInfo,
48
+ status: 'not-synced',
49
+ })),
50
+ }));
51
+ try {
52
+ const { definition: projectJson } = await loadProjectJson(directory, context);
53
+ const apps = compileApplications(projectJson, context);
54
+ await syncMetadataController?.updateMetadata((metadata) => ({
55
+ ...metadata,
56
+ status: 'in-progress',
57
+ startedAt: new Date().toISOString(),
58
+ packages: Object.fromEntries(apps.map((app, index) => [
59
+ app.id,
60
+ {
61
+ name: app.name,
62
+ path: path.join(directory, app.appDirectory),
63
+ status: 'not-synced',
64
+ statusMessage: undefined,
65
+ order: index,
66
+ // Keep the result from the previous sync if it exists so we can
67
+ // keep any errored commands from the previous sync.
68
+ result: app.id in metadata.packages
69
+ ? metadata.packages[app.id].result
70
+ : undefined,
71
+ },
72
+ ])),
73
+ }));
74
+ let hasErrors = false;
75
+ let wasCancelled = false;
76
+ for (const app of apps) {
77
+ let newResult;
78
+ try {
79
+ if (abortSignal?.aborted) {
80
+ break;
81
+ }
82
+ await syncMetadataController?.updateMetadataForPackage(app.id, (metadata) => ({ ...metadata, status: 'in-progress' }));
83
+ const metadata = await syncMetadataController?.getMetadata();
84
+ const packageInfo = metadata?.packages[app.id];
85
+ const fileIdRegexWhitelist = projectJson.settings.templateExtractor?.fileIdRegexWhitelist.split('\n') ?? [];
86
+ newResult = await generateForDirectory({
87
+ baseDirectory: directory,
88
+ appEntry: app,
89
+ logger,
90
+ writeTemplateMetadataOptions: projectJson.settings.templateExtractor
91
+ ?.writeMetadata
92
+ ? {
93
+ includeTemplateMetadata: true,
94
+ shouldGenerateMetadata: (context) => {
95
+ // always write metadata for files without a manual ID
96
+ if (!context.hasManualId)
97
+ return true;
98
+ return fileIdRegexWhitelist
99
+ .filter((x) => x.trim() !== '')
100
+ .some((pattern) => {
101
+ const regex = new RegExp(pattern);
102
+ return regex.test(`${context.generatorName}:${context.fileId}`);
103
+ });
104
+ },
105
+ }
106
+ : undefined,
107
+ userConfig,
108
+ previousPackageSyncResult: packageInfo?.result,
109
+ abortSignal,
110
+ skipCommands,
111
+ });
112
+ }
113
+ catch (err) {
114
+ if (err instanceof CancelledSyncError) {
115
+ newResult = {
116
+ wasCancelled: true,
117
+ completedAt: new Date().toISOString(),
118
+ };
119
+ wasCancelled = true;
120
+ }
121
+ else {
122
+ logger.error(`Encountered error while generating for ${app.name}:`);
123
+ logger.error(err);
124
+ newResult = {
125
+ errors: [
126
+ {
127
+ // stripVTControlCharacters is used to remove any control characters from the error message
128
+ // which can happen when prettier encounters an error.
129
+ message: stripVTControlCharacters(err instanceof Error ? err.message : String(err)),
130
+ stack: err instanceof Error ? err.stack : undefined,
131
+ },
132
+ ],
133
+ completedAt: new Date().toISOString(),
134
+ };
135
+ hasErrors = true;
136
+ }
137
+ }
138
+ await syncMetadataController?.updateMetadataForPackage(app.id, (metadata) => ({
139
+ ...metadata,
140
+ status: getPackageSyncStatusFromResult(newResult),
141
+ statusMessage: undefined,
142
+ result: newResult,
143
+ }));
144
+ }
145
+ const status = wasCancelled ? 'cancelled' : hasErrors ? 'error' : 'success';
146
+ await syncMetadataController?.updateMetadata((metadata) => ({
147
+ ...metadata,
148
+ status,
149
+ completedAt: new Date().toISOString(),
150
+ }));
151
+ if (wasCancelled) {
152
+ logger.info('Project build cancelled.');
153
+ }
154
+ else if (hasErrors) {
155
+ logger.error('Project build failed.');
156
+ }
157
+ else {
158
+ logger.info(`Project written to ${directory}!`);
159
+ }
160
+ return { status };
161
+ }
162
+ catch (err) {
163
+ await syncMetadataController?.updateMetadata((metadata) => ({
164
+ ...metadata,
165
+ status: 'error',
166
+ completedAt: new Date().toISOString(),
167
+ globalErrors: [String(err)],
168
+ }));
169
+ logger.error('Project build failed.');
170
+ throw err;
171
+ }
172
+ }
173
+ //# sourceMappingURL=build-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-project.js","sourceRoot":"","sources":["../../src/sync/build-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Logger } from '@baseplate-dev/sync';
2
+ import type { SyncMetadataController } from './sync-metadata-controller.js';
3
+ /**
4
+ * This class is responsible for monitoring the conflict files and the files that are pending deletion.
5
+ *
6
+ * It will update the metadata when the files are resolved.
7
+ */
8
+ export declare class ConflictFileMonitor {
9
+ private syncMetadataController;
10
+ private logger;
11
+ private conflictFileWatcher;
12
+ private conflictFiles;
13
+ private unsubscribers;
14
+ constructor(syncMetadataController: SyncMetadataController, logger: Logger);
15
+ private handleMetadataChange;
16
+ private checkFileForConflicts;
17
+ private handleFileChange;
18
+ /**
19
+ * This method will start the monitor and watch for changes in the metadata.
20
+ */
21
+ start(): Promise<void>;
22
+ /**
23
+ * This method will stop the monitor and close the watchers.
24
+ */
25
+ stop(): Promise<void>;
26
+ }
27
+ //# sourceMappingURL=conflict-file-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict-file-monitor.d.ts","sourceRoot":"","sources":["../../src/sync/conflict-file-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAUlD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAgB5E;;;;GAIG;AACH,qBAAa,mBAAmB;IAO5B,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,MAAM;IANhB,OAAO,CAAC,mBAAmB,CAAiC;IAC5D,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,aAAa,CAAsB;gBAGjC,sBAAsB,EAAE,sBAAsB,EAC9C,MAAM,EAAE,MAAM;IAGxB,OAAO,CAAC,oBAAoB;YAsCd,qBAAqB;YAarB,gBAAgB;IAuC9B;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BnC;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAMnC"}