@baseplate-dev/project-builder-server 0.2.5 → 0.3.0

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 (132) hide show
  1. package/dist/api/index.d.ts +3 -3
  2. package/dist/api/sync.d.ts +3 -3
  3. package/dist/compiler/app-entry-builder.d.ts +1 -2
  4. package/dist/compiler/app-entry-builder.d.ts.map +1 -1
  5. package/dist/compiler/app-entry-builder.js +3 -5
  6. package/dist/compiler/app-entry-builder.js.map +1 -1
  7. package/dist/compiler/index.d.ts.map +1 -1
  8. package/dist/compiler/index.js +0 -4
  9. package/dist/compiler/index.js.map +1 -1
  10. package/dist/compiler/web/admin/crud/displays.d.ts +5 -0
  11. package/dist/compiler/web/admin/crud/displays.d.ts.map +1 -0
  12. package/dist/compiler/web/admin/crud/displays.js.map +1 -0
  13. package/dist/compiler/web/admin/crud/index.d.ts +5 -0
  14. package/dist/compiler/web/admin/crud/index.d.ts.map +1 -0
  15. package/dist/compiler/web/admin/crud/index.js.map +1 -0
  16. package/dist/compiler/web/admin/crud/inputs.d.ts +5 -0
  17. package/dist/compiler/web/admin/crud/inputs.d.ts.map +1 -0
  18. package/dist/compiler/web/admin/crud/inputs.js.map +1 -0
  19. package/dist/compiler/web/admin/index.d.ts +5 -0
  20. package/dist/compiler/web/admin/index.d.ts.map +1 -0
  21. package/dist/compiler/web/admin/index.js +10 -0
  22. package/dist/compiler/web/admin/index.js.map +1 -0
  23. package/dist/compiler/web/admin/sections.d.ts +5 -0
  24. package/dist/compiler/web/admin/sections.d.ts.map +1 -0
  25. package/dist/compiler/{admin → web/admin}/sections.js +2 -1
  26. package/dist/compiler/web/admin/sections.js.map +1 -0
  27. package/dist/compiler/web/index.d.ts.map +1 -1
  28. package/dist/compiler/web/index.js +72 -6
  29. package/dist/compiler/web/index.js.map +1 -1
  30. package/dist/diff/diff-project.d.ts.map +1 -1
  31. package/dist/diff/diff-project.js +22 -5
  32. package/dist/diff/diff-project.js.map +1 -1
  33. package/dist/diff/diff-utils.d.ts +7 -3
  34. package/dist/diff/diff-utils.d.ts.map +1 -1
  35. package/dist/diff/diff-utils.js +80 -22
  36. package/dist/diff/diff-utils.js.map +1 -1
  37. package/dist/diff/index.d.ts +1 -0
  38. package/dist/diff/index.d.ts.map +1 -1
  39. package/dist/diff/index.js +1 -0
  40. package/dist/diff/index.js.map +1 -1
  41. package/dist/diff/snapshot/apply-diff-to-file-contents.d.ts +3 -0
  42. package/dist/diff/snapshot/apply-diff-to-file-contents.d.ts.map +1 -0
  43. package/dist/diff/snapshot/apply-diff-to-file-contents.js +26 -0
  44. package/dist/diff/snapshot/apply-diff-to-file-contents.js.map +1 -0
  45. package/dist/diff/snapshot/apply-diff-to-generator-output.d.ts +4 -0
  46. package/dist/diff/snapshot/apply-diff-to-generator-output.d.ts.map +1 -0
  47. package/dist/diff/snapshot/apply-diff-to-generator-output.js +28 -0
  48. package/dist/diff/snapshot/apply-diff-to-generator-output.js.map +1 -0
  49. package/dist/diff/snapshot/create-snapshot-for-project.d.ts +41 -0
  50. package/dist/diff/snapshot/create-snapshot-for-project.d.ts.map +1 -0
  51. package/dist/diff/snapshot/create-snapshot-for-project.js +48 -0
  52. package/dist/diff/snapshot/create-snapshot-for-project.js.map +1 -0
  53. package/dist/diff/snapshot/index.d.ts +6 -0
  54. package/dist/diff/snapshot/index.d.ts.map +1 -0
  55. package/dist/diff/snapshot/index.js +5 -0
  56. package/dist/diff/snapshot/index.js.map +1 -0
  57. package/dist/diff/snapshot/save-snapshot.d.ts +25 -0
  58. package/dist/diff/snapshot/save-snapshot.d.ts.map +1 -0
  59. package/dist/diff/snapshot/save-snapshot.js +55 -0
  60. package/dist/diff/snapshot/save-snapshot.js.map +1 -0
  61. package/dist/diff/snapshot/snapshot-diff-utils.d.ts +7 -0
  62. package/dist/diff/snapshot/snapshot-diff-utils.d.ts.map +1 -0
  63. package/dist/diff/snapshot/snapshot-diff-utils.js +20 -0
  64. package/dist/diff/snapshot/snapshot-diff-utils.js.map +1 -0
  65. package/dist/diff/snapshot/snapshot-management.d.ts +31 -0
  66. package/dist/diff/snapshot/snapshot-management.d.ts.map +1 -0
  67. package/dist/diff/snapshot/snapshot-management.js +154 -0
  68. package/dist/diff/snapshot/snapshot-management.js.map +1 -0
  69. package/dist/diff/snapshot/snapshot-manifest.d.ts +40 -0
  70. package/dist/diff/snapshot/snapshot-manifest.d.ts.map +1 -0
  71. package/dist/diff/snapshot/snapshot-manifest.js +113 -0
  72. package/dist/diff/snapshot/snapshot-manifest.js.map +1 -0
  73. package/dist/diff/snapshot/snapshot-types.d.ts +165 -0
  74. package/dist/diff/snapshot/snapshot-types.d.ts.map +1 -0
  75. package/dist/diff/snapshot/snapshot-types.js +23 -0
  76. package/dist/diff/snapshot/snapshot-types.js.map +1 -0
  77. package/dist/diff/snapshot/snapshot-utils.d.ts +20 -0
  78. package/dist/diff/snapshot/snapshot-utils.d.ts.map +1 -0
  79. package/dist/diff/snapshot/snapshot-utils.js +51 -0
  80. package/dist/diff/snapshot/snapshot-utils.js.map +1 -0
  81. package/dist/diff/types.d.ts +38 -6
  82. package/dist/diff/types.d.ts.map +1 -1
  83. package/dist/project-definition/get-single-app-directory-for-project.d.ts +11 -0
  84. package/dist/project-definition/get-single-app-directory-for-project.d.ts.map +1 -0
  85. package/dist/project-definition/get-single-app-directory-for-project.js +18 -0
  86. package/dist/project-definition/get-single-app-directory-for-project.js.map +1 -0
  87. package/dist/project-definition/index.d.ts +2 -0
  88. package/dist/project-definition/index.d.ts.map +1 -0
  89. package/dist/project-definition/index.js +2 -0
  90. package/dist/project-definition/index.js.map +1 -0
  91. package/dist/project-definition/load-project-definition.d.ts +12 -0
  92. package/dist/project-definition/load-project-definition.d.ts.map +1 -0
  93. package/dist/project-definition/load-project-definition.js +34 -0
  94. package/dist/project-definition/load-project-definition.js.map +1 -0
  95. package/dist/server/plugin.js +6 -6
  96. package/dist/server/plugin.js.map +1 -1
  97. package/dist/sync/generate-for-directory.d.ts +5 -14
  98. package/dist/sync/generate-for-directory.d.ts.map +1 -1
  99. package/dist/sync/generate-for-directory.js +37 -30
  100. package/dist/sync/generate-for-directory.js.map +1 -1
  101. package/dist/sync/get-previous-generated-payload.d.ts +9 -0
  102. package/dist/sync/get-previous-generated-payload.d.ts.map +1 -0
  103. package/dist/sync/get-previous-generated-payload.js +23 -0
  104. package/dist/sync/get-previous-generated-payload.js.map +1 -0
  105. package/dist/sync/sync-project.d.ts +7 -3
  106. package/dist/sync/sync-project.d.ts.map +1 -1
  107. package/dist/sync/sync-project.js +5 -29
  108. package/dist/sync/sync-project.js.map +1 -1
  109. package/dist/sync/types.d.ts +14 -0
  110. package/dist/sync/types.d.ts.map +1 -0
  111. package/dist/sync/types.js +15 -0
  112. package/dist/sync/types.js.map +1 -0
  113. package/package.json +12 -11
  114. package/dist/compiler/admin/crud/displays.d.ts +0 -5
  115. package/dist/compiler/admin/crud/displays.d.ts.map +0 -1
  116. package/dist/compiler/admin/crud/displays.js.map +0 -1
  117. package/dist/compiler/admin/crud/index.d.ts +0 -5
  118. package/dist/compiler/admin/crud/index.d.ts.map +0 -1
  119. package/dist/compiler/admin/crud/index.js.map +0 -1
  120. package/dist/compiler/admin/crud/inputs.d.ts +0 -5
  121. package/dist/compiler/admin/crud/inputs.d.ts.map +0 -1
  122. package/dist/compiler/admin/crud/inputs.js.map +0 -1
  123. package/dist/compiler/admin/index.d.ts +0 -3
  124. package/dist/compiler/admin/index.d.ts.map +0 -1
  125. package/dist/compiler/admin/index.js +0 -102
  126. package/dist/compiler/admin/index.js.map +0 -1
  127. package/dist/compiler/admin/sections.d.ts +0 -5
  128. package/dist/compiler/admin/sections.d.ts.map +0 -1
  129. package/dist/compiler/admin/sections.js.map +0 -1
  130. /package/dist/compiler/{admin → web/admin}/crud/displays.js +0 -0
  131. /package/dist/compiler/{admin → web/admin}/crud/index.js +0 -0
  132. /package/dist/compiler/{admin → web/admin}/crud/inputs.js +0 -0
@@ -1,7 +1,9 @@
1
1
  import { shouldIncludeFile as shouldIncludeFileIgnore } from '@baseplate-dev/sync';
2
2
  import * as diff from 'diff';
3
+ import { globby } from 'globby';
3
4
  import { isBinaryFile } from 'isbinaryfile';
4
5
  import micromatch from 'micromatch';
6
+ import fsAdapter from 'node:fs';
5
7
  import { readFile } from 'node:fs/promises';
6
8
  import path from 'node:path';
7
9
  /**
@@ -41,12 +43,34 @@ export function isContentBinary(content) {
41
43
  return Buffer.isBuffer(content);
42
44
  }
43
45
  /**
44
- * Creates a unified diff for text files
46
+ * Creates a unified diff for text files (generated → working)
45
47
  */
46
- export function createUnifiedDiff(filePath, oldContent, newContent) {
47
- const patch = diff.createPatch(filePath, oldContent, newContent, 'working', 'generated');
48
+ export function createUnifiedDiff(filePath, generatedContent, workingContent) {
49
+ const patch = diff.createPatch(filePath, generatedContent, workingContent, 'generated', 'working');
48
50
  return patch;
49
51
  }
52
+ /**
53
+ * Scans the working directory for all files, respecting ignore and glob patterns
54
+ */
55
+ export async function scanWorkingDirectory(directory, globPatterns, ignoreInstance) {
56
+ // Create glob pattern to match all files
57
+ const patterns = globPatterns && globPatterns.length > 0 ? globPatterns : ['**/*'];
58
+ const files = await globby(patterns, {
59
+ cwd: directory,
60
+ onlyFiles: true,
61
+ fs: fsAdapter,
62
+ gitignore: true,
63
+ absolute: false, // Return relative paths
64
+ });
65
+ // Filter files using ignore patterns and glob patterns
66
+ return files.filter((filePath) => shouldIncludeFile(filePath, globPatterns, ignoreInstance));
67
+ }
68
+ function normalizeAsBuffer(content) {
69
+ if (Buffer.isBuffer(content)) {
70
+ return content;
71
+ }
72
+ return Buffer.from(content);
73
+ }
50
74
  /**
51
75
  * Compares generated output with working directory files
52
76
  */
@@ -69,16 +93,24 @@ export async function compareFiles(directory, generatorOutput, globPatterns, ign
69
93
  continue;
70
94
  }
71
95
  if (workingContent === null) {
72
- // File only exists in generated output
73
- diffs.push({
74
- path: filePath,
75
- type: 'added',
76
- generatedContent,
77
- isBinary: generatedIsBinary,
78
- unifiedDiff: generatedIsBinary
79
- ? undefined
80
- : createUnifiedDiff(filePath, '', generatedContent.toString()),
81
- });
96
+ // File only exists in generated output - generator should not create this file
97
+ if (generatedIsBinary) {
98
+ diffs.push({
99
+ path: filePath,
100
+ type: 'deleted',
101
+ isBinary: true,
102
+ generatedContent,
103
+ });
104
+ }
105
+ else {
106
+ diffs.push({
107
+ path: filePath,
108
+ type: 'deleted',
109
+ generatedContent,
110
+ isBinary: false,
111
+ unifiedDiff: createUnifiedDiff(filePath, generatedContent, ''),
112
+ });
113
+ }
82
114
  }
83
115
  else if (generatedIsBinary || workingIsBinary) {
84
116
  // Binary file comparison
@@ -89,9 +121,9 @@ export async function compareFiles(directory, generatorOutput, globPatterns, ign
89
121
  diffs.push({
90
122
  path: filePath,
91
123
  type: 'modified',
92
- generatedContent,
93
- workingContent,
94
124
  isBinary: true,
125
+ generatedContent: normalizeAsBuffer(generatedContent),
126
+ workingContent: normalizeAsBuffer(workingContent),
95
127
  });
96
128
  }
97
129
  }
@@ -102,18 +134,44 @@ export async function compareFiles(directory, generatorOutput, globPatterns, ign
102
134
  if (generatedText !== workingText) {
103
135
  diffs.push({
104
136
  path: filePath,
105
- type: 'modified',
106
- generatedContent,
107
- workingContent,
108
137
  isBinary: false,
109
- unifiedDiff: createUnifiedDiff(filePath, workingText, generatedText),
138
+ type: 'modified',
139
+ generatedContent: generatedText,
140
+ workingContent: workingText,
141
+ unifiedDiff: createUnifiedDiff(filePath, generatedText, workingText),
110
142
  });
111
143
  }
112
144
  }
113
145
  }
114
- // TODO: Check for files that exist in working directory but not in generated output
115
- // This would require scanning the working directory, which might be expensive
116
- // For now, we'll focus on differences in generated files
146
+ // Check for files that exist in working directory but not in generated output
147
+ const workingDirectoryFiles = await scanWorkingDirectory(directory, globPatterns, ignoreInstance);
148
+ // Find files that exist in working directory but not in generated output
149
+ for (const workingFilePath of workingDirectoryFiles) {
150
+ if (!processedFiles.has(workingFilePath)) {
151
+ // This file exists in working directory but not in generated output - generator should create this file
152
+ const workingContent = await readWorkingFile(directory, workingFilePath);
153
+ if (workingContent !== null) {
154
+ const workingIsBinary = isContentBinary(workingContent);
155
+ if (workingIsBinary) {
156
+ diffs.push({
157
+ path: workingFilePath,
158
+ type: 'added',
159
+ workingContent,
160
+ isBinary: true,
161
+ });
162
+ }
163
+ else {
164
+ diffs.push({
165
+ path: workingFilePath,
166
+ type: 'added',
167
+ workingContent,
168
+ isBinary: workingIsBinary,
169
+ unifiedDiff: createUnifiedDiff(workingFilePath, '', workingContent),
170
+ });
171
+ }
172
+ }
173
+ }
174
+ }
117
175
  const summary = {
118
176
  totalFiles: diffs.length,
119
177
  addedFiles: diffs.filter((d) => d.type === 'added').length,
@@ -1 +1 @@
1
- {"version":3,"file":"diff-utils.js","sourceRoot":"","sources":["../../src/diff/diff-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff-utils.js","sourceRoot":"","sources":["../../src/diff/diff-utils.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export * from './diff-project.js';
2
2
  export * from './diff-utils.js';
3
3
  export * from './formatters.js';
4
+ export * from './snapshot/index.js';
4
5
  export type * from './types.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/diff/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,mBAAmB,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/diff/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,mBAAmB,YAAY,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from './diff-project.js';
2
2
  export * from './diff-utils.js';
3
3
  export * from './formatters.js';
4
+ export * from './snapshot/index.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/diff/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/diff/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SnapshotManifest } from './snapshot-types.js';
2
+ export declare function applySnapshotToFileContents(relativePath: string, generatedContents: string | Buffer, snapshot: SnapshotManifest, diffDirectory: string): Promise<string | Buffer | undefined | false>;
3
+ //# sourceMappingURL=apply-diff-to-file-contents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-diff-to-file-contents.d.ts","sourceRoot":"","sources":["../../../src/diff/snapshot/apply-diff-to-file-contents.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,GAAG,MAAM,EAClC,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC,CA4B9C"}
@@ -0,0 +1,26 @@
1
+ import { handleFileNotFoundError } from '@baseplate-dev/utils/node';
2
+ import { applyPatch } from 'diff';
3
+ import { readFile } from 'node:fs/promises';
4
+ import path from 'node:path';
5
+ export async function applySnapshotToFileContents(relativePath, generatedContents, snapshot, diffDirectory) {
6
+ // If the file was purposely deleted, we skip the generation
7
+ if (snapshot.files.deleted.includes(relativePath)) {
8
+ return undefined;
9
+ }
10
+ // We do not support applying diffs to binary files
11
+ if (Buffer.isBuffer(generatedContents)) {
12
+ return generatedContents;
13
+ }
14
+ // Check for modified files
15
+ const fileEntry = snapshot.files.modified.find((file) => file.path === relativePath);
16
+ if (!fileEntry) {
17
+ return generatedContents;
18
+ }
19
+ const diffFilePath = path.join(diffDirectory, fileEntry.diffFile);
20
+ const diffFile = await readFile(diffFilePath, 'utf-8').catch(handleFileNotFoundError);
21
+ if (!diffFile) {
22
+ throw new Error(`Diff file not found: ${diffFilePath}`);
23
+ }
24
+ return applyPatch(generatedContents, diffFile);
25
+ }
26
+ //# sourceMappingURL=apply-diff-to-file-contents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-diff-to-file-contents.js","sourceRoot":"","sources":["../../../src/diff/snapshot/apply-diff-to-file-contents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,YAAoB,EACpB,iBAAkC,EAClC,QAA0B,EAC1B,aAAqB;IAErB,4DAA4D;IAC5D,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,mDAAmD;IACnD,IAAI,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACvC,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,2BAA2B;IAC3B,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAC5C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CACrC,CAAC;IACF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,KAAK,CAC1D,uBAAuB,CACxB,CAAC;IACF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,YAAY,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,UAAU,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { GeneratorOutput } from '@baseplate-dev/sync';
2
+ import type { SnapshotManifest } from './snapshot-types.js';
3
+ export declare function applySnapshotToGeneratorOutput(generatorOutput: GeneratorOutput, snapshot: SnapshotManifest, diffDirectory: string): Promise<GeneratorOutput>;
4
+ //# sourceMappingURL=apply-diff-to-generator-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-diff-to-generator-output.d.ts","sourceRoot":"","sources":["../../../src/diff/snapshot/apply-diff-to-generator-output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAOrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,wBAAsB,8BAA8B,CAClD,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,eAAe,CAAC,CAiC1B"}
@@ -0,0 +1,28 @@
1
+ import { handleFileNotFoundError } from '@baseplate-dev/utils/node';
2
+ import { applyPatch } from 'diff';
3
+ import { readFile } from 'node:fs/promises';
4
+ import path from 'node:path';
5
+ export async function applySnapshotToGeneratorOutput(generatorOutput, snapshot, diffDirectory) {
6
+ const generatorFiles = new Map([...generatorOutput.files].filter(([filePath]) => !snapshot.files.deleted.includes(filePath)));
7
+ for (const fileEntry of snapshot.files.modified) {
8
+ const fileData = generatorFiles.get(fileEntry.path);
9
+ if (!fileData) {
10
+ throw new Error(`File not found in generator output: ${fileEntry.path}. Please run snapshot fix-diff to fix the diffs.`);
11
+ }
12
+ const diffFilePath = path.join(diffDirectory, fileEntry.diffFile);
13
+ const diffFile = await readFile(diffFilePath, 'utf-8').catch(handleFileNotFoundError);
14
+ if (!diffFile) {
15
+ throw new Error(`Diff file not found: ${diffFilePath}`);
16
+ }
17
+ const newContents = applyPatch(fileData.contents.toString(), diffFile);
18
+ if (!newContents) {
19
+ throw new Error(`Failed to apply patch to file ${fileEntry.path}. The patch may be invalid. Please run snapshot fix-diff to fix the diffs.`);
20
+ }
21
+ fileData.contents = newContents;
22
+ }
23
+ return {
24
+ ...generatorOutput,
25
+ files: generatorFiles,
26
+ };
27
+ }
28
+ //# sourceMappingURL=apply-diff-to-generator-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-diff-to-generator-output.js","sourceRoot":"","sources":["../../../src/diff/snapshot/apply-diff-to-generator-output.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,eAAgC,EAChC,QAA0B,EAC1B,aAAqB;IAErB,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,MAAM,CAC/B,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC3D,CACF,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,uCAAuC,SAAS,CAAC,IAAI,kDAAkD,CACxG,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,KAAK,CAC1D,uBAAuB,CACxB,CAAC;QACF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,YAAY,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;QACvE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,iCAAiC,SAAS,CAAC,IAAI,4EAA4E,CAC5H,CAAC;QACJ,CAAC;QACD,QAAQ,CAAC,QAAQ,GAAG,WAAW,CAAC;IAClC,CAAC;IACD,OAAO;QACL,GAAG,eAAe;QAClB,KAAK,EAAE,cAAc;KACtB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
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
+ /**
5
+ * Options for creating snapshots
6
+ */
7
+ export interface CreateSnapshotForProjectOptions {
8
+ /**
9
+ * The directory to create snapshot in.
10
+ */
11
+ projectDirectory: string;
12
+ /**
13
+ * The app to create a snapshot for.
14
+ */
15
+ app: string;
16
+ /**
17
+ * The logger to use for logging.
18
+ */
19
+ logger: Logger;
20
+ /**
21
+ * The context to use for parsing the project.
22
+ */
23
+ context: SchemaParserContext;
24
+ /**
25
+ * The user config to use for building the project.
26
+ */
27
+ userConfig: BaseplateUserConfig;
28
+ /**
29
+ * Whether to use .baseplateignore file for filtering.
30
+ */
31
+ useIgnoreFile?: boolean;
32
+ /**
33
+ * Custom snapshot directory name.
34
+ */
35
+ snapshotDir?: string;
36
+ }
37
+ /**
38
+ * Creates a snapshot of the current diff state for a particular app
39
+ */
40
+ export declare function createSnapshotForProject(options: CreateSnapshotForProjectOptions): Promise<void>;
41
+ //# sourceMappingURL=create-snapshot-for-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-snapshot-for-project.d.ts","sourceRoot":"","sources":["../../../src/diff/snapshot/create-snapshot-for-project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAUlD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAQlF;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,EAAE,mBAAmB,CAAC;IAC7B;;OAEG;IACH,UAAU,EAAE,mBAAmB,CAAC;IAChC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,IAAI,CAAC,CAiEf"}
@@ -0,0 +1,48 @@
1
+ import { buildGeneratorEntry, executeGeneratorEntry, formatGeneratorOutput, loadIgnorePatterns, } from '@baseplate-dev/sync';
2
+ import path from 'node:path';
3
+ import { compileApplications } from '#src/compiler/index.js';
4
+ import { loadProjectDefinition } from '#src/project-definition/index.js';
5
+ import { createTemplateMetadataOptions } from '#src/sync/template-metadata-utils.js';
6
+ import { saveSnapshot } from './save-snapshot.js';
7
+ /**
8
+ * Creates a snapshot of the current diff state for a particular app
9
+ */
10
+ export async function createSnapshotForProject(options) {
11
+ const { projectDirectory: directory, app: appName, logger, context, useIgnoreFile = true, snapshotDir, } = options;
12
+ try {
13
+ logger.info('Loading project definition...');
14
+ const { definition: projectJson } = await loadProjectDefinition(directory, context);
15
+ logger.info('Compiling applications...');
16
+ const apps = compileApplications(projectJson, context);
17
+ // Filter apps if specified
18
+ const app = apps.find((app) => appName === app.name);
19
+ if (!app) {
20
+ throw new Error(`No applications found named ${appName}. Available apps: ${apps.map((a) => a.name).join(', ')}`);
21
+ }
22
+ const appDirectory = path.join(directory, app.appDirectory);
23
+ logger.info(`Creating snapshot for app: ${app.name} (${app.appDirectory})`);
24
+ // Load ignore patterns for this app directory
25
+ const ignoreInstance = useIgnoreFile
26
+ ? await loadIgnorePatterns(appDirectory)
27
+ : undefined;
28
+ // Generate the output without writing files
29
+ const generatorEntry = await buildGeneratorEntry(app.generatorBundle);
30
+ const generatorOutput = await executeGeneratorEntry(generatorEntry, {
31
+ templateMetadataOptions: createTemplateMetadataOptions(projectJson),
32
+ });
33
+ // Format the output
34
+ const formattedGeneratorOutput = await formatGeneratorOutput(generatorOutput, { outputDirectory: appDirectory });
35
+ // Create snapshot
36
+ const result = await saveSnapshot(appDirectory, formattedGeneratorOutput, {
37
+ snapshotDir,
38
+ ignoreInstance,
39
+ });
40
+ logger.info(`✓ Snapshot created at ${result.snapshotPath} (${result.fileCount.modified} modified, ${result.fileCount.added} added, ${result.fileCount.deleted} deleted)`);
41
+ logger.info('✓ Snapshots created successfully');
42
+ }
43
+ catch (error) {
44
+ logger.error(`Error creating snapshot: ${String(error)}`);
45
+ throw error;
46
+ }
47
+ }
48
+ //# sourceMappingURL=create-snapshot-for-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-snapshot-for-project.js","sourceRoot":"","sources":["../../../src/diff/snapshot/create-snapshot-for-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export * from './apply-diff-to-file-contents.js';
2
+ export * from './apply-diff-to-generator-output.js';
3
+ export * from './create-snapshot-for-project.js';
4
+ export * from './snapshot-management.js';
5
+ export type * from './snapshot-types.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/diff/snapshot/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,mBAAmB,qBAAqB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './apply-diff-to-file-contents.js';
2
+ export * from './apply-diff-to-generator-output.js';
3
+ export * from './create-snapshot-for-project.js';
4
+ export * from './snapshot-management.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/diff/snapshot/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Snapshot creation functionality
3
+ */
4
+ import type { GeneratorOutput } from '@baseplate-dev/sync';
5
+ import type ignore from 'ignore';
6
+ interface SaveSnapshotOptions {
7
+ ignoreInstance?: ignore.Ignore;
8
+ snapshotDir?: string;
9
+ }
10
+ interface SaveSnapshotResult {
11
+ /** Path to the created snapshot directory */
12
+ snapshotPath: string;
13
+ /** Number of files included in the snapshot */
14
+ fileCount: {
15
+ modified: number;
16
+ added: number;
17
+ deleted: number;
18
+ };
19
+ }
20
+ /**
21
+ * Creates a snapshot from the current diff state
22
+ */
23
+ export declare function saveSnapshot(directory: string, generatorOutput: GeneratorOutput, { ignoreInstance, snapshotDir }?: SaveSnapshotOptions): Promise<SaveSnapshotResult>;
24
+ export {};
25
+ //# sourceMappingURL=save-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-snapshot.d.ts","sourceRoot":"","sources":["../../../src/diff/snapshot/save-snapshot.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAejC,UAAU,mBAAmB;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,kBAAkB;IAC1B,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,eAAe,EAChC,EAAE,cAAc,EAAE,WAAW,EAAE,GAAE,mBAAwB,GACxD,OAAO,CAAC,kBAAkB,CAAC,CA+D7B"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Snapshot creation functionality
3
+ */
4
+ import { mkdir, rm } from 'node:fs/promises';
5
+ import { compareFiles } from '../diff-utils.js';
6
+ import { saveSnapshotDiffFile } from './snapshot-diff-utils.js';
7
+ import { saveSnapshotManifest } from './snapshot-manifest.js';
8
+ import { SNAPSHOT_VERSION } from './snapshot-types.js';
9
+ import { createSnapshotDirectory, pathToSafeDiffFilename, } from './snapshot-utils.js';
10
+ /**
11
+ * Creates a snapshot from the current diff state
12
+ */
13
+ export async function saveSnapshot(directory, generatorOutput, { ignoreInstance, snapshotDir } = {}) {
14
+ // Get current diff state
15
+ const diffSummary = await compareFiles(directory, generatorOutput, undefined, ignoreInstance);
16
+ // Create snapshot directory structure
17
+ const snapshotDirectory = await createSnapshotDirectory(directory, snapshotDir);
18
+ // Create manifest
19
+ const { diffs } = diffSummary;
20
+ // For now, we ignore binary modifications
21
+ const modifiedTextDiffs = diffs.filter((diff) => diff.type === 'modified' && !diff.isBinary);
22
+ const manifest = {
23
+ version: SNAPSHOT_VERSION,
24
+ files: {
25
+ modified: modifiedTextDiffs.map((diff) => ({
26
+ path: diff.path,
27
+ diffFile: pathToSafeDiffFilename(diff.path),
28
+ })),
29
+ added: diffs
30
+ .filter((diff) => diff.type === 'added')
31
+ .map((diff) => diff.path),
32
+ deleted: diffs
33
+ .filter((diff) => diff.type === 'deleted')
34
+ .map((diff) => diff.path),
35
+ },
36
+ };
37
+ // Clear out existing diffs
38
+ await rm(snapshotDirectory.diffsPath, { recursive: true });
39
+ await mkdir(snapshotDirectory.diffsPath, { recursive: true });
40
+ // Save diffs to diffs folder
41
+ for (const diff of modifiedTextDiffs) {
42
+ await saveSnapshotDiffFile(snapshotDirectory, diff.path, diff.generatedContent, diff.workingContent);
43
+ }
44
+ // Save manifest
45
+ await saveSnapshotManifest(snapshotDirectory, manifest);
46
+ return {
47
+ snapshotPath: snapshotDirectory.path,
48
+ fileCount: {
49
+ modified: manifest.files.modified.length,
50
+ added: manifest.files.added.length,
51
+ deleted: manifest.files.deleted.length,
52
+ },
53
+ };
54
+ }
55
+ //# sourceMappingURL=save-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-snapshot.js","sourceRoot":"","sources":["../../../src/diff/snapshot/save-snapshot.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAI7C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAkB7B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAiB,EACjB,eAAgC,EAChC,EAAE,cAAc,EAAE,WAAW,KAA0B,EAAE;IAEzD,yBAAyB;IACzB,MAAM,WAAW,GAAG,MAAM,YAAY,CACpC,SAAS,EACT,eAAe,EACf,SAAS,EACT,cAAc,CACf,CAAC;IAEF,sCAAsC;IACtC,MAAM,iBAAiB,GAAG,MAAM,uBAAuB,CACrD,SAAS,EACT,WAAW,CACZ,CAAC;IAEF,kBAAkB;IAClB,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC;IAE9B,0CAA0C;IAC1C,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CACpC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,CACrD,CAAC;IACF,MAAM,QAAQ,GAAqB;QACjC,OAAO,EAAE,gBAAgB;QACzB,KAAK,EAAE;YACL,QAAQ,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACzC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;aAC5C,CAAC,CAAC;YACH,KAAK,EAAE,KAAK;iBACT,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;iBACvC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B,OAAO,EAAE,KAAK;iBACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;iBACzC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SAC5B;KACF,CAAC;IAEF,2BAA2B;IAC3B,MAAM,EAAE,CAAC,iBAAiB,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9D,6BAA6B;IAC7B,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACrC,MAAM,oBAAoB,CACxB,iBAAiB,EACjB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,cAAc,CACpB,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,MAAM,oBAAoB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAExD,OAAO;QACL,YAAY,EAAE,iBAAiB,CAAC,IAAI;QACpC,SAAS,EAAE;YACT,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;YACxC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;YAClC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;SACvC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { SnapshotDirectory } from './snapshot-types.js';
2
+ /**
3
+ * Creates and saves a diff file for a modified file
4
+ */
5
+ export declare function saveSnapshotDiffFile(snapshotDirectory: SnapshotDirectory, relativePath: string, generatedContent: string, workingContent: string): Promise<string>;
6
+ export declare function removeSnapshotDiffFile(snapshotDirectory: SnapshotDirectory, diffFileName: string): Promise<void>;
7
+ //# sourceMappingURL=snapshot-diff-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-diff-utils.d.ts","sourceRoot":"","sources":["../../../src/diff/snapshot/snapshot-diff-utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAI7D;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,iBAAiB,EAAE,iBAAiB,EACpC,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,wBAAsB,sBAAsB,CAC1C,iBAAiB,EAAE,iBAAiB,EACpC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAGf"}
@@ -0,0 +1,20 @@
1
+ import { createPatch } from 'diff';
2
+ import { mkdir, rm, writeFile } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { pathToSafeDiffFilename } from './snapshot-utils.js';
5
+ /**
6
+ * Creates and saves a diff file for a modified file
7
+ */
8
+ export async function saveSnapshotDiffFile(snapshotDirectory, relativePath, generatedContent, workingContent) {
9
+ const diffContent = createPatch(relativePath, generatedContent, workingContent);
10
+ const diffFileName = pathToSafeDiffFilename(relativePath);
11
+ const diffFilePath = path.join(snapshotDirectory.diffsPath, diffFileName);
12
+ await mkdir(path.dirname(diffFilePath), { recursive: true });
13
+ await writeFile(diffFilePath, diffContent, 'utf8');
14
+ return diffFileName;
15
+ }
16
+ export async function removeSnapshotDiffFile(snapshotDirectory, diffFileName) {
17
+ const diffFilePath = path.join(snapshotDirectory.diffsPath, diffFileName);
18
+ await rm(diffFilePath);
19
+ }
20
+ //# sourceMappingURL=snapshot-diff-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-diff-utils.js","sourceRoot":"","sources":["../../../src/diff/snapshot/snapshot-diff-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,iBAAoC,EACpC,YAAoB,EACpB,gBAAwB,EACxB,cAAsB;IAEtB,MAAM,WAAW,GAAG,WAAW,CAC7B,YAAY,EACZ,gBAAgB,EAChB,cAAc,CACf,CAAC;IACF,MAAM,YAAY,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAE1E,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,SAAS,CAAC,YAAY,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAEnD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,iBAAoC,EACpC,YAAoB;IAEpB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAC1E,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { SchemaParserContext } from '@baseplate-dev/project-builder-lib';
2
+ import type { Logger } from '@baseplate-dev/sync';
3
+ import type { GeneratorOperations } from '#src/sync/types.js';
4
+ export interface SnapshotManagementOptions {
5
+ projectDirectory: string;
6
+ appName: string;
7
+ snapshotDirectory?: string;
8
+ context: SchemaParserContext;
9
+ logger: Logger;
10
+ generatorOperations?: GeneratorOperations;
11
+ }
12
+ /**
13
+ * Adds files to snapshot
14
+ */
15
+ export declare function addFilesToSnapshot(relativePaths: string[], isDeleted: boolean, { projectDirectory, snapshotDirectory, appName, context, logger, generatorOperations, }: SnapshotManagementOptions): Promise<void>;
16
+ /**
17
+ * Removes files from snapshot
18
+ */
19
+ export declare function removeFilesFromSnapshot(relativePaths: string[], { projectDirectory, appName, snapshotDirectory, context, logger, }: SnapshotManagementOptions): Promise<void>;
20
+ export interface SnapshotListOptions {
21
+ projectDirectory: string;
22
+ appName: string;
23
+ snapshotDirectory?: string;
24
+ context: SchemaParserContext;
25
+ logger: Logger;
26
+ }
27
+ /**
28
+ * Lists snapshot contents
29
+ */
30
+ export declare function listSnapshotContents({ projectDirectory, snapshotDirectory, appName, context, logger, }: SnapshotListOptions): Promise<void>;
31
+ //# sourceMappingURL=snapshot-management.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-management.d.ts","sourceRoot":"","sources":["../../../src/diff/snapshot/snapshot-management.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAOlD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAoB9D,MAAM,WAAW,yBAAyB;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EAAE,EACvB,SAAS,EAAE,OAAO,EAClB,EACE,gBAAgB,EAChB,iBAAiB,EACjB,OAAO,EACP,OAAO,EACP,MAAM,EACN,mBAAkD,GACnD,EAAE,yBAAyB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAiGf;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,MAAM,EAAE,EACvB,EACE,gBAAgB,EAChB,OAAO,EACP,iBAAiB,EACjB,OAAO,EACP,MAAM,GACP,EAAE,yBAAyB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAED,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,EACzC,gBAAgB,EAChB,iBAAiB,EACjB,OAAO,EACP,OAAO,EACP,MAAM,GACP,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDrC"}