@mdfriday/foundry 25.8.8 → 25.8.10

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 (190) hide show
  1. package/README.md +4 -0
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/internal/application/incremental-build-coordinator.d.ts +2 -0
  7. package/dist/internal/application/incremental-build-coordinator.d.ts.map +1 -1
  8. package/dist/internal/application/incremental-build-coordinator.js +2 -2
  9. package/dist/internal/application/incremental-build-coordinator.js.map +1 -1
  10. package/dist/internal/application/ssg.d.ts +6 -5
  11. package/dist/internal/application/ssg.d.ts.map +1 -1
  12. package/dist/internal/application/ssg.js +12 -11
  13. package/dist/internal/application/ssg.js.map +1 -1
  14. package/dist/internal/domain/config/tests/entity-config.test.d.ts +2 -0
  15. package/dist/internal/domain/config/tests/entity-config.test.d.ts.map +1 -0
  16. package/dist/internal/domain/config/tests/entity-config.test.js +199 -0
  17. package/dist/internal/domain/config/tests/entity-config.test.js.map +1 -0
  18. package/dist/internal/domain/config/tests/entity-root.test.d.ts +2 -0
  19. package/dist/internal/domain/config/tests/entity-root.test.d.ts.map +1 -0
  20. package/dist/internal/domain/config/tests/entity-root.test.js +235 -0
  21. package/dist/internal/domain/config/tests/entity-root.test.js.map +1 -0
  22. package/dist/internal/domain/config/tests/factory-config.test.d.ts +2 -0
  23. package/dist/internal/domain/config/tests/factory-config.test.d.ts.map +1 -0
  24. package/dist/internal/domain/config/tests/factory-config.test.js +84 -0
  25. package/dist/internal/domain/config/tests/factory-config.test.js.map +1 -0
  26. package/dist/internal/domain/config/tests/index.test.d.ts +2 -0
  27. package/dist/internal/domain/config/tests/index.test.d.ts.map +1 -0
  28. package/dist/internal/domain/config/tests/index.test.js +197 -0
  29. package/dist/internal/domain/config/tests/index.test.js.map +1 -0
  30. package/dist/internal/domain/config/tests/mock-fs.d.ts +26 -0
  31. package/dist/internal/domain/config/tests/mock-fs.d.ts.map +1 -0
  32. package/dist/internal/domain/config/tests/mock-fs.js +281 -0
  33. package/dist/internal/domain/config/tests/mock-fs.js.map +1 -0
  34. package/dist/internal/domain/config/tests/type.test.d.ts +2 -0
  35. package/dist/internal/domain/config/tests/type.test.d.ts.map +1 -0
  36. package/dist/internal/domain/config/tests/type.test.js +272 -0
  37. package/dist/internal/domain/config/tests/type.test.js.map +1 -0
  38. package/dist/internal/domain/config/tests/vo-module.test.d.ts +2 -0
  39. package/dist/internal/domain/config/tests/vo-module.test.d.ts.map +1 -0
  40. package/dist/internal/domain/config/tests/vo-module.test.js +267 -0
  41. package/dist/internal/domain/config/tests/vo-module.test.js.map +1 -0
  42. package/dist/internal/domain/config/tests/vo-root.test.d.ts +2 -0
  43. package/dist/internal/domain/config/tests/vo-root.test.d.ts.map +1 -0
  44. package/dist/internal/domain/config/tests/vo-root.test.js +165 -0
  45. package/dist/internal/domain/config/tests/vo-root.test.js.map +1 -0
  46. package/dist/internal/domain/config/tests/vo-service.test.d.ts +2 -0
  47. package/dist/internal/domain/config/tests/vo-service.test.d.ts.map +1 -0
  48. package/dist/internal/domain/config/tests/vo-service.test.js +266 -0
  49. package/dist/internal/domain/config/tests/vo-service.test.js.map +1 -0
  50. package/dist/internal/domain/content/factory/hub.js +1 -1
  51. package/dist/internal/domain/content/factory/hub.js.map +1 -1
  52. package/dist/internal/domain/content/type.d.ts +2 -1
  53. package/dist/internal/domain/content/type.d.ts.map +1 -1
  54. package/dist/internal/domain/content/type.js.map +1 -1
  55. package/dist/internal/domain/fs/entity/overlayfs.js +1 -1
  56. package/dist/internal/domain/fs/entity/overlayfs.js.map +1 -1
  57. package/dist/internal/domain/fs/tests/entity-basefs.test.d.ts +2 -0
  58. package/dist/internal/domain/fs/tests/entity-basefs.test.d.ts.map +1 -0
  59. package/dist/internal/domain/fs/tests/entity-basefs.test.js +279 -0
  60. package/dist/internal/domain/fs/tests/entity-basefs.test.js.map +1 -0
  61. package/dist/internal/domain/fs/tests/entity-fs.test.d.ts +2 -0
  62. package/dist/internal/domain/fs/tests/entity-fs.test.d.ts.map +1 -0
  63. package/dist/internal/domain/fs/tests/entity-fs.test.js +230 -0
  64. package/dist/internal/domain/fs/tests/entity-fs.test.js.map +1 -0
  65. package/dist/internal/domain/fs/tests/entity-originfs.test.d.ts +2 -0
  66. package/dist/internal/domain/fs/tests/entity-originfs.test.d.ts.map +1 -0
  67. package/dist/internal/domain/fs/tests/entity-originfs.test.js +47 -0
  68. package/dist/internal/domain/fs/tests/entity-originfs.test.js.map +1 -0
  69. package/dist/internal/domain/fs/tests/entity-overlaydir.test.d.ts +2 -0
  70. package/dist/internal/domain/fs/tests/entity-overlaydir.test.d.ts.map +1 -0
  71. package/dist/internal/domain/fs/tests/entity-overlaydir.test.js +293 -0
  72. package/dist/internal/domain/fs/tests/entity-overlaydir.test.js.map +1 -0
  73. package/dist/internal/domain/fs/tests/entity-overlayfs.test.d.ts +2 -0
  74. package/dist/internal/domain/fs/tests/entity-overlayfs.test.d.ts.map +1 -0
  75. package/dist/internal/domain/fs/tests/entity-overlayfs.test.js +281 -0
  76. package/dist/internal/domain/fs/tests/entity-overlayfs.test.js.map +1 -0
  77. package/dist/internal/domain/fs/tests/entity-service.test.d.ts +2 -0
  78. package/dist/internal/domain/fs/tests/entity-service.test.d.ts.map +1 -0
  79. package/dist/internal/domain/fs/tests/entity-service.test.js +43 -0
  80. package/dist/internal/domain/fs/tests/entity-service.test.js.map +1 -0
  81. package/dist/internal/domain/fs/tests/factory-fs.test.d.ts +2 -0
  82. package/dist/internal/domain/fs/tests/factory-fs.test.d.ts.map +1 -0
  83. package/dist/internal/domain/fs/tests/factory-fs.test.js +105 -0
  84. package/dist/internal/domain/fs/tests/factory-fs.test.js.map +1 -0
  85. package/dist/internal/domain/fs/tests/type.test.d.ts +2 -0
  86. package/dist/internal/domain/fs/tests/type.test.d.ts.map +1 -0
  87. package/dist/internal/domain/fs/tests/type.test.js +113 -0
  88. package/dist/internal/domain/fs/tests/type.test.js.map +1 -0
  89. package/dist/internal/domain/fs/tests/vo-dir.test.d.ts +2 -0
  90. package/dist/internal/domain/fs/tests/vo-dir.test.d.ts.map +1 -0
  91. package/dist/internal/domain/fs/tests/vo-dir.test.js +211 -0
  92. package/dist/internal/domain/fs/tests/vo-dir.test.js.map +1 -0
  93. package/dist/internal/domain/fs/tests/vo-file.test.d.ts +2 -0
  94. package/dist/internal/domain/fs/tests/vo-file.test.d.ts.map +1 -0
  95. package/dist/internal/domain/fs/tests/vo-file.test.js +256 -0
  96. package/dist/internal/domain/fs/tests/vo-file.test.js.map +1 -0
  97. package/dist/internal/domain/fs/tests/vo-fileinfo.test.d.ts +2 -0
  98. package/dist/internal/domain/fs/tests/vo-fileinfo.test.d.ts.map +1 -0
  99. package/dist/internal/domain/fs/tests/vo-fileinfo.test.js +165 -0
  100. package/dist/internal/domain/fs/tests/vo-fileinfo.test.js.map +1 -0
  101. package/dist/internal/domain/fs/tests/vo-filemeta.test.d.ts +2 -0
  102. package/dist/internal/domain/fs/tests/vo-filemeta.test.d.ts.map +1 -0
  103. package/dist/internal/domain/fs/tests/vo-filemeta.test.js +171 -0
  104. package/dist/internal/domain/fs/tests/vo-filemeta.test.js.map +1 -0
  105. package/dist/internal/domain/fs/tests/vo-filesystemscollector.test.d.ts +2 -0
  106. package/dist/internal/domain/fs/tests/vo-filesystemscollector.test.d.ts.map +1 -0
  107. package/dist/internal/domain/fs/tests/vo-filesystemscollector.test.js +298 -0
  108. package/dist/internal/domain/fs/tests/vo-filesystemscollector.test.js.map +1 -0
  109. package/dist/internal/domain/fs/tests/vo-filevitural.test.d.ts +2 -0
  110. package/dist/internal/domain/fs/tests/vo-filevitural.test.d.ts.map +1 -0
  111. package/dist/internal/domain/fs/tests/vo-filevitural.test.js +167 -0
  112. package/dist/internal/domain/fs/tests/vo-filevitural.test.js.map +1 -0
  113. package/dist/internal/domain/fs/tests/vo-incremental-file-collector.test.d.ts +2 -0
  114. package/dist/internal/domain/fs/tests/vo-incremental-file-collector.test.d.ts.map +1 -0
  115. package/dist/internal/domain/fs/tests/vo-incremental-file-collector.test.js +396 -0
  116. package/dist/internal/domain/fs/tests/vo-incremental-file-collector.test.js.map +1 -0
  117. package/dist/internal/domain/fs/tests/vo-osfs.test.d.ts +2 -0
  118. package/dist/internal/domain/fs/tests/vo-osfs.test.d.ts.map +1 -0
  119. package/dist/internal/domain/fs/tests/vo-osfs.test.js +363 -0
  120. package/dist/internal/domain/fs/tests/vo-osfs.test.js.map +1 -0
  121. package/dist/internal/domain/fs/tests/vo-overlayfs-factory.test.d.ts +2 -0
  122. package/dist/internal/domain/fs/tests/vo-overlayfs-factory.test.d.ts.map +1 -0
  123. package/dist/internal/domain/fs/tests/vo-overlayfs-factory.test.js +430 -0
  124. package/dist/internal/domain/fs/tests/vo-overlayfs-factory.test.js.map +1 -0
  125. package/dist/internal/domain/fs/tests/vo-overlayoptions.test.d.ts +2 -0
  126. package/dist/internal/domain/fs/tests/vo-overlayoptions.test.d.ts.map +1 -0
  127. package/dist/internal/domain/fs/tests/vo-overlayoptions.test.js +402 -0
  128. package/dist/internal/domain/fs/tests/vo-overlayoptions.test.js.map +1 -0
  129. package/dist/internal/domain/fs/tests/vo-static-copier.test.d.ts +2 -0
  130. package/dist/internal/domain/fs/tests/vo-static-copier.test.d.ts.map +1 -0
  131. package/dist/internal/domain/fs/tests/vo-static-copier.test.js +320 -0
  132. package/dist/internal/domain/fs/tests/vo-static-copier.test.js.map +1 -0
  133. package/dist/internal/domain/fs/tests/vo-walkway.test.d.ts +2 -0
  134. package/dist/internal/domain/fs/tests/vo-walkway.test.d.ts.map +1 -0
  135. package/dist/internal/domain/fs/tests/vo-walkway.test.js +295 -0
  136. package/dist/internal/domain/fs/tests/vo-walkway.test.js.map +1 -0
  137. package/dist/internal/domain/markdown/entity/markdown.d.ts +0 -21
  138. package/dist/internal/domain/markdown/entity/markdown.d.ts.map +1 -1
  139. package/dist/internal/domain/markdown/entity/markdown.js +2 -35
  140. package/dist/internal/domain/markdown/entity/markdown.js.map +1 -1
  141. package/dist/internal/domain/markdown/factory/markdown.d.ts +2 -38
  142. package/dist/internal/domain/markdown/factory/markdown.d.ts.map +1 -1
  143. package/dist/internal/domain/markdown/factory/markdown.js +2 -70
  144. package/dist/internal/domain/markdown/factory/markdown.js.map +1 -1
  145. package/dist/internal/domain/markdown/index.d.ts +0 -3
  146. package/dist/internal/domain/markdown/index.d.ts.map +1 -1
  147. package/dist/internal/domain/markdown/index.js +0 -3
  148. package/dist/internal/domain/markdown/index.js.map +1 -1
  149. package/dist/internal/domain/markdown/type.d.ts +1 -16
  150. package/dist/internal/domain/markdown/type.d.ts.map +1 -1
  151. package/dist/internal/domain/markdown/type.js.map +1 -1
  152. package/dist/internal/domain/markdown/vo/parserresult.d.ts +1 -60
  153. package/dist/internal/domain/markdown/vo/parserresult.d.ts.map +1 -1
  154. package/dist/internal/domain/markdown/vo/parserresult.js +1 -174
  155. package/dist/internal/domain/markdown/vo/parserresult.js.map +1 -1
  156. package/dist/internal/domain/paths/test/pathoperations.test.js +1 -1
  157. package/dist/internal/domain/paths/test/pathoperations.test.js.map +1 -1
  158. package/dist/internal/domain/template/vo/registry.d.ts.map +1 -1
  159. package/dist/internal/domain/template/vo/registry.js +33 -0
  160. package/dist/internal/domain/template/vo/registry.js.map +1 -1
  161. package/dist/pkg/log/manager.js +1 -1
  162. package/package.json +2 -25
  163. package/dist/internal/application/test-incremental-ssg.d.ts +0 -9
  164. package/dist/internal/application/test-incremental-ssg.d.ts.map +0 -1
  165. package/dist/internal/application/test-incremental-ssg.js +0 -83
  166. package/dist/internal/application/test-incremental-ssg.js.map +0 -1
  167. package/dist/internal/application/test-ssg.d.ts +0 -8
  168. package/dist/internal/application/test-ssg.d.ts.map +0 -1
  169. package/dist/internal/application/test-ssg.js +0 -30
  170. package/dist/internal/application/test-ssg.js.map +0 -1
  171. package/dist/internal/domain/markdown/test/external-adapter.test.d.ts +0 -2
  172. package/dist/internal/domain/markdown/test/external-adapter.test.d.ts.map +0 -1
  173. package/dist/internal/domain/markdown/test/external-adapter.test.js +0 -150
  174. package/dist/internal/domain/markdown/test/external-adapter.test.js.map +0 -1
  175. package/dist/internal/domain/markdown/test/markdown.test.d.ts +0 -2
  176. package/dist/internal/domain/markdown/test/markdown.test.d.ts.map +0 -1
  177. package/dist/internal/domain/markdown/test/markdown.test.js +0 -88
  178. package/dist/internal/domain/markdown/test/markdown.test.js.map +0 -1
  179. package/dist/internal/domain/markdown/vo/externaladapter.d.ts +0 -63
  180. package/dist/internal/domain/markdown/vo/externaladapter.d.ts.map +0 -1
  181. package/dist/internal/domain/markdown/vo/externaladapter.js +0 -194
  182. package/dist/internal/domain/markdown/vo/externaladapter.js.map +0 -1
  183. package/dist/internal/domain/markdown/vo/markdownit.d.ts +0 -33
  184. package/dist/internal/domain/markdown/vo/markdownit.d.ts.map +0 -1
  185. package/dist/internal/domain/markdown/vo/markdownit.js +0 -175
  186. package/dist/internal/domain/markdown/vo/markdownit.js.map +0 -1
  187. package/dist/pkg/web/server/example.d.ts +0 -2
  188. package/dist/pkg/web/server/example.d.ts.map +0 -1
  189. package/dist/pkg/web/server/example.js +0 -43
  190. package/dist/pkg/web/server/example.js.map +0 -1
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const file_1 = require("../vo/file");
4
+ // Mock dependencies
5
+ jest.mock('../vo/filemeta');
6
+ jest.mock('../vo/fileinfo');
7
+ // Mock the factory functions
8
+ jest.mock('../vo/fileinfo', () => ({
9
+ ...jest.requireActual('../vo/fileinfo'),
10
+ newFileInfo: jest.fn(),
11
+ }));
12
+ jest.mock('../vo/filemeta', () => ({
13
+ ...jest.requireActual('../vo/filemeta'),
14
+ newFileMeta: jest.fn(),
15
+ }));
16
+ describe('File Value Object', () => {
17
+ let mockFile;
18
+ let mockFileMeta;
19
+ let mockFs;
20
+ let file;
21
+ beforeEach(() => {
22
+ mockFile = {
23
+ close: jest.fn(),
24
+ read: jest.fn(),
25
+ readAt: jest.fn(),
26
+ seek: jest.fn(),
27
+ write: jest.fn(),
28
+ writeAt: jest.fn(),
29
+ name: jest.fn().mockReturnValue('/test/file.txt'),
30
+ readdir: jest.fn(),
31
+ readdirnames: jest.fn(),
32
+ stat: jest.fn(),
33
+ sync: jest.fn(),
34
+ truncate: jest.fn(),
35
+ writeString: jest.fn(),
36
+ };
37
+ mockFileMeta = {
38
+ fileName: jest.fn().mockReturnValue('/test/file.txt'),
39
+ relativeFilename: jest.fn().mockReturnValue('/file.txt'),
40
+ component: jest.fn().mockReturnValue('content'),
41
+ root: jest.fn().mockReturnValue('/test'),
42
+ };
43
+ mockFs = {
44
+ name: jest.fn().mockReturnValue('MockFs'),
45
+ stat: jest.fn(),
46
+ };
47
+ file = new file_1.File(mockFile, mockFileMeta, mockFs);
48
+ });
49
+ afterEach(() => {
50
+ jest.clearAllMocks();
51
+ });
52
+ describe('constructor', () => {
53
+ it('should initialize with file, metadata, and filesystem', () => {
54
+ expect(file.file).toBe(mockFile);
55
+ expect(file.fileMeta).toBe(mockFileMeta);
56
+ expect(file.fs).toBe(mockFs);
57
+ expect(file._isDir).toBe(false);
58
+ });
59
+ it('should initialize as directory when specified', () => {
60
+ const dirFile = new file_1.File(mockFile, mockFileMeta, mockFs, true);
61
+ expect(dirFile._isDir).toBe(true);
62
+ });
63
+ it('should handle null file (no-op file)', () => {
64
+ const nopFile = new file_1.File(null, mockFileMeta, mockFs);
65
+ expect(nopFile.file).toBeNull();
66
+ });
67
+ });
68
+ describe('isNop', () => {
69
+ it('should return false for regular file', () => {
70
+ expect(file.isNop()).toBe(false);
71
+ });
72
+ it('should return true for null file', () => {
73
+ const nopFile = new file_1.File(null, mockFileMeta, mockFs);
74
+ expect(nopFile.isNop()).toBe(true);
75
+ });
76
+ });
77
+ describe('meta', () => {
78
+ it('should return file metadata', () => {
79
+ const result = file.meta();
80
+ expect(result).toBe(mockFileMeta);
81
+ });
82
+ });
83
+ describe('close', () => {
84
+ it('should close underlying file', async () => {
85
+ await file.close();
86
+ expect(mockFile.close).toHaveBeenCalledTimes(1);
87
+ });
88
+ it('should handle no-op file close', async () => {
89
+ const nopFile = new file_1.File(null, mockFileMeta, mockFs);
90
+ await expect(nopFile.close()).resolves.toBeUndefined();
91
+ });
92
+ });
93
+ describe('readDir', () => {
94
+ it('should read directory entries when file is directory', async () => {
95
+ const dirFile = new file_1.File(mockFile, mockFileMeta, mockFs, true);
96
+ const mockFileInfos = [
97
+ { name: () => 'file1.txt', isDir: () => false },
98
+ { name: () => 'file2.txt', isDir: () => false },
99
+ ];
100
+ const mockWrappedFileInfos = [
101
+ { fileName: () => 'file1.txt', setMeta: jest.fn() },
102
+ { fileName: () => 'file2.txt', setMeta: jest.fn() },
103
+ ];
104
+ const mockNewFileMeta = {
105
+ merge: jest.fn(),
106
+ };
107
+ mockFile.readdir.mockResolvedValue(mockFileInfos);
108
+ const { newFileInfo } = require('../vo/fileinfo');
109
+ const { newFileMeta } = require('../vo/filemeta');
110
+ newFileMeta.mockReturnValue(mockNewFileMeta);
111
+ newFileInfo
112
+ .mockReturnValueOnce(mockWrappedFileInfos[0])
113
+ .mockReturnValueOnce(mockWrappedFileInfos[1]);
114
+ const result = await dirFile.readDir(2);
115
+ expect(mockFile.readdir).toHaveBeenCalledWith(2);
116
+ expect(newFileInfo).toHaveBeenCalledTimes(2);
117
+ expect(mockNewFileMeta.merge).toHaveBeenCalledTimes(2);
118
+ expect(result).toEqual(mockWrappedFileInfos);
119
+ });
120
+ it('should return empty array when not a directory', async () => {
121
+ const result = await file.readDir(2);
122
+ expect(result).toEqual([]);
123
+ });
124
+ it('should return empty array for no-op file', async () => {
125
+ const nopFile = new file_1.File(null, mockFileMeta, mockFs, true);
126
+ const result = await nopFile.readDir(2);
127
+ expect(result).toEqual([]);
128
+ });
129
+ });
130
+ describe('File interface delegation', () => {
131
+ it('should delegate read to underlying file', async () => {
132
+ const buffer = new Uint8Array(10);
133
+ const expectedResult = { bytesRead: 5, buffer };
134
+ mockFile.read.mockResolvedValue(expectedResult);
135
+ const result = await file.read(buffer);
136
+ expect(mockFile.read).toHaveBeenCalledWith(buffer);
137
+ expect(result).toEqual(expectedResult);
138
+ });
139
+ it('should delegate readAt to underlying file', async () => {
140
+ const buffer = new Uint8Array(10);
141
+ const expectedResult = { bytesRead: 5, buffer };
142
+ mockFile.readAt.mockResolvedValue(expectedResult);
143
+ const result = await file.readAt(buffer, 100);
144
+ expect(mockFile.readAt).toHaveBeenCalledWith(buffer, 100);
145
+ expect(result).toEqual(expectedResult);
146
+ });
147
+ it('should delegate seek to underlying file', async () => {
148
+ mockFile.seek.mockResolvedValue(200);
149
+ const result = await file.seek(100, 1);
150
+ expect(mockFile.seek).toHaveBeenCalledWith(100, 1);
151
+ expect(result).toBe(200);
152
+ });
153
+ it('should delegate write to underlying file', async () => {
154
+ const buffer = new Uint8Array([1, 2, 3]);
155
+ const expectedResult = { bytesWritten: 3, buffer };
156
+ mockFile.write.mockResolvedValue(expectedResult);
157
+ const result = await file.write(buffer);
158
+ expect(mockFile.write).toHaveBeenCalledWith(buffer);
159
+ expect(result).toEqual(expectedResult);
160
+ });
161
+ it('should delegate writeAt to underlying file', async () => {
162
+ const buffer = new Uint8Array([1, 2, 3]);
163
+ const expectedResult = { bytesWritten: 3, buffer };
164
+ mockFile.writeAt.mockResolvedValue(expectedResult);
165
+ const result = await file.writeAt(buffer, 100);
166
+ expect(mockFile.writeAt).toHaveBeenCalledWith(buffer, 100);
167
+ expect(result).toEqual(expectedResult);
168
+ });
169
+ it('should get name from file metadata', () => {
170
+ const result = file.name();
171
+ expect(mockFileMeta.fileName).toHaveBeenCalled();
172
+ expect(result).toBe('file.txt'); // basename of '/test/file.txt'
173
+ });
174
+ it('should delegate readdir to readDir method', async () => {
175
+ const mockFileInfos = [{ name: () => 'test.txt' }];
176
+ // Mock the readDir method instead
177
+ const readDirSpy = jest.spyOn(file, 'readDir').mockResolvedValue([]);
178
+ const result = await file.readdir(10);
179
+ expect(readDirSpy).toHaveBeenCalledWith(10);
180
+ readDirSpy.mockRestore();
181
+ });
182
+ it('should delegate readdirnames to underlying file', async () => {
183
+ const expectedNames = ['file1.txt', 'file2.txt'];
184
+ mockFile.readdirnames.mockResolvedValue(expectedNames);
185
+ const result = await file.readdirnames(10);
186
+ expect(mockFile.readdirnames).toHaveBeenCalledWith(10);
187
+ expect(result).toEqual(expectedNames);
188
+ });
189
+ it('should delegate stat to underlying file', async () => {
190
+ const mockFileInfo = { name: () => 'test.txt' };
191
+ mockFile.stat.mockResolvedValue(mockFileInfo);
192
+ const result = await file.stat();
193
+ expect(mockFile.stat).toHaveBeenCalledTimes(1);
194
+ expect(result).toEqual(mockFileInfo);
195
+ });
196
+ it('should delegate sync to underlying file', async () => {
197
+ await file.sync();
198
+ expect(mockFile.sync).toHaveBeenCalledTimes(1);
199
+ });
200
+ it('should delegate truncate to underlying file', async () => {
201
+ await file.truncate(100);
202
+ expect(mockFile.truncate).toHaveBeenCalledWith(100);
203
+ });
204
+ it('should delegate writeString to underlying file', async () => {
205
+ const expectedResult = { bytesWritten: 11 };
206
+ mockFile.writeString.mockResolvedValue(expectedResult);
207
+ const result = await file.writeString('Hello World');
208
+ expect(mockFile.writeString).toHaveBeenCalledWith('Hello World');
209
+ expect(result).toEqual(expectedResult);
210
+ });
211
+ });
212
+ describe('no-op file behavior', () => {
213
+ let nopFile;
214
+ beforeEach(() => {
215
+ nopFile = new file_1.File(null, mockFileMeta, mockFs);
216
+ });
217
+ it('should throw error for read on no-op file', async () => {
218
+ const buffer = new Uint8Array(10);
219
+ await expect(nopFile.read(buffer)).rejects.toThrow('File is null');
220
+ });
221
+ it('should throw error for write on no-op file', async () => {
222
+ const buffer = new Uint8Array([1, 2, 3]);
223
+ await expect(nopFile.write(buffer)).rejects.toThrow('File is null');
224
+ });
225
+ it('should handle name for no-op file', () => {
226
+ const result = nopFile.name();
227
+ expect(result).toBe('file.txt'); // From mockFileMeta.fileName()
228
+ expect(mockFileMeta.fileName).toHaveBeenCalled();
229
+ });
230
+ it('should throw error for stat on no-op file', async () => {
231
+ await expect(nopFile.stat()).rejects.toThrow('File is null');
232
+ });
233
+ });
234
+ describe('factory functions', () => {
235
+ it('should create File with newFile', () => {
236
+ const result = (0, file_1.newFile)(mockFile, '/test/file.txt', mockFs);
237
+ expect(result).toBeInstanceOf(file_1.File);
238
+ });
239
+ it('should create File with newFileWithMeta', () => {
240
+ const result = (0, file_1.newFileWithMeta)(mockFile, mockFileMeta, mockFs);
241
+ expect(result).toBeInstanceOf(file_1.File);
242
+ expect(result.meta()).toBe(mockFileMeta);
243
+ });
244
+ it('should create directory File with newDirFileWithMeta', () => {
245
+ const result = (0, file_1.newDirFileWithMeta)(mockFile, mockFileMeta, mockFs);
246
+ expect(result).toBeInstanceOf(file_1.File);
247
+ expect(result._isDir).toBe(true);
248
+ });
249
+ it('should handle null file in factory functions', () => {
250
+ const result = (0, file_1.newFileWithMeta)(null, mockFileMeta, mockFs);
251
+ expect(result).toBeInstanceOf(file_1.File);
252
+ expect(result.isNop()).toBe(true);
253
+ });
254
+ });
255
+ });
256
+ //# sourceMappingURL=vo-file.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vo-file.test.js","sourceRoot":"","sources":["../../../../../internal/domain/fs/tests/vo-file.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=vo-fileinfo.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vo-fileinfo.test.d.ts","sourceRoot":"","sources":["../../../../../internal/domain/fs/tests/vo-fileinfo.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const fileinfo_1 = require("../vo/fileinfo");
4
+ // Mock dependencies
5
+ jest.mock('../vo/filemeta');
6
+ describe('FileInfo Value Object', () => {
7
+ let mockFileInfo;
8
+ let mockFileMeta;
9
+ let fileInfo;
10
+ beforeEach(() => {
11
+ mockFileInfo = {
12
+ name: jest.fn().mockReturnValue('test.txt'),
13
+ size: jest.fn().mockReturnValue(100),
14
+ mode: jest.fn().mockReturnValue(0o644),
15
+ modTime: jest.fn().mockReturnValue(new Date('2023-01-01')),
16
+ isDir: jest.fn().mockReturnValue(false),
17
+ sys: jest.fn().mockReturnValue(null),
18
+ };
19
+ mockFileMeta = {
20
+ fileName: jest.fn().mockReturnValue('test.txt'),
21
+ relativeFilename: jest.fn().mockReturnValue('/test.txt'),
22
+ component: jest.fn().mockReturnValue('content'),
23
+ root: jest.fn().mockReturnValue('/root'),
24
+ open: jest.fn().mockResolvedValue({}),
25
+ merge: jest.fn(),
26
+ };
27
+ fileInfo = new fileinfo_1.FileInfo(mockFileInfo, mockFileMeta);
28
+ });
29
+ afterEach(() => {
30
+ jest.clearAllMocks();
31
+ });
32
+ describe('constructor', () => {
33
+ it('should initialize with FileInfo and FileMeta', () => {
34
+ expect(fileInfo.fileInfo).toBe(mockFileInfo);
35
+ expect(fileInfo._fileMeta).toBe(mockFileMeta);
36
+ });
37
+ });
38
+ describe('meta', () => {
39
+ it('should return the FileMeta instance', () => {
40
+ const result = fileInfo.meta();
41
+ expect(result).toBe(mockFileMeta);
42
+ });
43
+ });
44
+ describe('type', () => {
45
+ it('should return the file mode from underlying FileInfo', () => {
46
+ const result = fileInfo.type();
47
+ expect(result).toBe(0o644);
48
+ expect(mockFileInfo.mode).toHaveBeenCalledTimes(1);
49
+ });
50
+ });
51
+ describe('info', () => {
52
+ it('should return the underlying FileInfo', () => {
53
+ const result = fileInfo.info();
54
+ expect(result).toBe(mockFileInfo);
55
+ });
56
+ });
57
+ describe('setMeta', () => {
58
+ it('should set the FileMeta instance', () => {
59
+ const newMeta = {};
60
+ fileInfo.setMeta(newMeta);
61
+ expect(fileInfo.meta()).toBe(newMeta);
62
+ });
63
+ });
64
+ describe('FileInfo interface methods', () => {
65
+ it('should delegate name to underlying FileInfo', () => {
66
+ const result = fileInfo.name();
67
+ expect(result).toBe('test.txt');
68
+ expect(mockFileInfo.name).toHaveBeenCalledTimes(1);
69
+ });
70
+ it('should delegate size to underlying FileInfo', () => {
71
+ const result = fileInfo.size();
72
+ expect(result).toBe(100);
73
+ expect(mockFileInfo.size).toHaveBeenCalledTimes(1);
74
+ });
75
+ it('should delegate mode to underlying FileInfo', () => {
76
+ const result = fileInfo.mode();
77
+ expect(result).toBe(0o644);
78
+ expect(mockFileInfo.mode).toHaveBeenCalledTimes(1);
79
+ });
80
+ it('should delegate modTime to underlying FileInfo', () => {
81
+ const result = fileInfo.modTime();
82
+ expect(result).toEqual(new Date('2023-01-01'));
83
+ expect(mockFileInfo.modTime).toHaveBeenCalledTimes(1);
84
+ });
85
+ it('should delegate isDir to underlying FileInfo', () => {
86
+ const result = fileInfo.isDir();
87
+ expect(result).toBe(false);
88
+ expect(mockFileInfo.isDir).toHaveBeenCalledTimes(1);
89
+ });
90
+ it('should delegate sys to underlying FileInfo', () => {
91
+ const result = fileInfo.sys();
92
+ expect(result).toBeNull();
93
+ expect(mockFileInfo.sys).toHaveBeenCalledTimes(1);
94
+ });
95
+ });
96
+ describe('FileMetaInfo interface methods', () => {
97
+ it('should delegate fileName to FileMeta', () => {
98
+ const result = fileInfo.fileName();
99
+ expect(result).toBe('test.txt');
100
+ expect(mockFileMeta.fileName).toHaveBeenCalledTimes(1);
101
+ });
102
+ it('should delegate relativeFilename to FileMeta', () => {
103
+ const result = fileInfo.relativeFilename();
104
+ expect(result).toBe('/test.txt');
105
+ expect(mockFileMeta.relativeFilename).toHaveBeenCalledTimes(1);
106
+ });
107
+ it('should delegate component to FileMeta', () => {
108
+ const result = fileInfo.component();
109
+ expect(result).toBe('content');
110
+ expect(mockFileMeta.component).toHaveBeenCalledTimes(1);
111
+ });
112
+ it('should delegate root to FileMeta', () => {
113
+ const result = fileInfo.root();
114
+ expect(result).toBe('/root');
115
+ expect(mockFileMeta.root).toHaveBeenCalledTimes(1);
116
+ });
117
+ it('should delegate open to FileMeta', async () => {
118
+ const mockFile = {};
119
+ mockFileMeta.open.mockResolvedValue(mockFile);
120
+ const result = await fileInfo.open();
121
+ expect(result).toBe(mockFile);
122
+ expect(mockFileMeta.open).toHaveBeenCalledTimes(1);
123
+ });
124
+ });
125
+ describe('newFileInfo factory function', () => {
126
+ it('should create FileInfo with new FileMeta', () => {
127
+ const mockNewFileMeta = {};
128
+ const { newFileMeta } = require('../vo/filemeta');
129
+ newFileMeta.mockReturnValue(mockNewFileMeta);
130
+ const result = (0, fileinfo_1.newFileInfo)(mockFileInfo, 'test.txt');
131
+ expect(newFileMeta).toHaveBeenCalledWith('test.txt');
132
+ expect(result).toBeInstanceOf(fileinfo_1.FileInfo);
133
+ expect(result.fileInfo).toBe(mockFileInfo);
134
+ expect(result.meta()).toBe(mockNewFileMeta);
135
+ });
136
+ it('should merge meta when FileInfo implements MetaProvider', () => {
137
+ const mockNewFileMeta = { merge: jest.fn() };
138
+ const mockMetaProvider = {
139
+ ...mockFileInfo,
140
+ meta: jest.fn().mockReturnValue({ test: 'meta' }),
141
+ };
142
+ const { newFileMeta } = require('../vo/filemeta');
143
+ newFileMeta.mockReturnValue(mockNewFileMeta);
144
+ const result = (0, fileinfo_1.newFileInfo)(mockMetaProvider, 'test.txt');
145
+ expect(mockNewFileMeta.merge).toHaveBeenCalledWith({ test: 'meta' });
146
+ });
147
+ });
148
+ describe('newFileInfoWithMeta factory function', () => {
149
+ it('should create FileInfo with provided FileMeta', () => {
150
+ const result = (0, fileinfo_1.newFileInfoWithMeta)(mockFileInfo, mockFileMeta);
151
+ expect(result).toBeInstanceOf(fileinfo_1.FileInfo);
152
+ expect(result.fileInfo).toBe(mockFileInfo);
153
+ expect(result.meta()).toBe(mockFileMeta);
154
+ });
155
+ it('should merge meta when FileInfo implements MetaProvider', () => {
156
+ const mockMetaProvider = {
157
+ ...mockFileInfo,
158
+ meta: jest.fn().mockReturnValue({ test: 'meta' }),
159
+ };
160
+ const result = (0, fileinfo_1.newFileInfoWithMeta)(mockMetaProvider, mockFileMeta);
161
+ expect(mockFileMeta.merge).toHaveBeenCalledWith({ test: 'meta' });
162
+ });
163
+ });
164
+ });
165
+ //# sourceMappingURL=vo-fileinfo.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vo-fileinfo.test.js","sourceRoot":"","sources":["../../../../../internal/domain/fs/tests/vo-fileinfo.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=vo-filemeta.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vo-filemeta.test.d.ts","sourceRoot":"","sources":["../../../../../internal/domain/fs/tests/vo-filemeta.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const filemeta_1 = require("../vo/filemeta");
4
+ // Mock dependencies
5
+ jest.mock('@internal/domain/paths', () => ({
6
+ PATH_CONSTANTS: {
7
+ SYSTEM_PATH_SEPARATOR: '/',
8
+ },
9
+ }));
10
+ describe('FileMeta Value Object', () => {
11
+ let fileMeta;
12
+ let mockFileOpener;
13
+ beforeEach(() => {
14
+ mockFileOpener = jest.fn().mockResolvedValue({});
15
+ fileMeta = new filemeta_1.FileMeta('/path/to/file.txt', mockFileOpener);
16
+ });
17
+ afterEach(() => {
18
+ jest.clearAllMocks();
19
+ });
20
+ describe('constructor', () => {
21
+ it('should initialize with filename and openFunc', () => {
22
+ expect(fileMeta.fileName()).toBe('/path/to/file.txt');
23
+ expect(fileMeta.openFunc).toBe(mockFileOpener);
24
+ });
25
+ it('should initialize with default values when no parameters provided', () => {
26
+ const emptyMeta = new filemeta_1.FileMeta();
27
+ expect(emptyMeta.fileName()).toBe('');
28
+ expect(emptyMeta.component()).toBe('');
29
+ expect(emptyMeta.root()).toBe('');
30
+ expect(emptyMeta.openFunc).toBeNull();
31
+ });
32
+ });
33
+ describe('fileName', () => {
34
+ it('should return the filename', () => {
35
+ expect(fileMeta.fileName()).toBe('/path/to/file.txt');
36
+ });
37
+ });
38
+ describe('relativeFilename', () => {
39
+ it('should return filename when no component root is set', () => {
40
+ const result = fileMeta.relativeFilename();
41
+ expect(result).toBe('/path/to/file.txt');
42
+ });
43
+ it('should return relative path when component root is set', () => {
44
+ fileMeta.setComponentRoot('/path');
45
+ const result = fileMeta.relativeFilename();
46
+ expect(result).toBe('/to/file.txt');
47
+ });
48
+ it('should add leading separator when relative path does not start with separator', () => {
49
+ fileMeta.setFileName('/path/file.txt');
50
+ fileMeta.setComponentRoot('/path');
51
+ const result = fileMeta.relativeFilename();
52
+ expect(result).toBe('/file.txt');
53
+ });
54
+ it('should throw error when filename has no root', () => {
55
+ fileMeta.setComponentRoot('/different/root');
56
+ expect(() => fileMeta.relativeFilename()).toThrow('filename /path/to/file.txt has no root /different/root');
57
+ });
58
+ });
59
+ describe('component', () => {
60
+ it('should return the component directory', () => {
61
+ fileMeta.setComponentDir('content');
62
+ expect(fileMeta.component()).toBe('content');
63
+ });
64
+ });
65
+ describe('root', () => {
66
+ it('should return the component root', () => {
67
+ fileMeta.setComponentRoot('/root');
68
+ expect(fileMeta.root()).toBe('/root');
69
+ });
70
+ });
71
+ describe('open', () => {
72
+ it('should call openFunc when set', async () => {
73
+ const mockFile = {};
74
+ mockFileOpener.mockResolvedValue(mockFile);
75
+ const result = await fileMeta.open();
76
+ expect(mockFileOpener).toHaveBeenCalledTimes(1);
77
+ expect(result).toBe(mockFile);
78
+ });
79
+ it('should throw error when openFunc is not set', async () => {
80
+ const metaWithoutOpener = new filemeta_1.FileMeta('/test.txt', null);
81
+ await expect(metaWithoutOpener.open()).rejects.toThrow('OpenFunc not set');
82
+ });
83
+ });
84
+ describe('setter methods', () => {
85
+ it('should set filename', () => {
86
+ fileMeta.setFileName('/new/file.txt');
87
+ expect(fileMeta.fileName()).toBe('/new/file.txt');
88
+ });
89
+ it('should set component root', () => {
90
+ fileMeta.setComponentRoot('/new/root');
91
+ expect(fileMeta.root()).toBe('/new/root');
92
+ });
93
+ it('should set component directory', () => {
94
+ fileMeta.setComponentDir('layouts');
95
+ expect(fileMeta.component()).toBe('layouts');
96
+ });
97
+ it('should set open function', async () => {
98
+ const newOpener = jest.fn().mockResolvedValue({});
99
+ fileMeta.setOpenFunc(newOpener);
100
+ await fileMeta.open();
101
+ expect(newOpener).toHaveBeenCalledTimes(1);
102
+ expect(mockFileOpener).not.toHaveBeenCalled();
103
+ });
104
+ });
105
+ describe('merge', () => {
106
+ let targetMeta;
107
+ let sourceMeta;
108
+ beforeEach(() => {
109
+ targetMeta = new filemeta_1.FileMeta();
110
+ sourceMeta = new filemeta_1.FileMeta('/source/file.txt');
111
+ sourceMeta.setComponentRoot('/source');
112
+ sourceMeta.setComponentDir('content');
113
+ sourceMeta.setOpenFunc(mockFileOpener);
114
+ });
115
+ it('should merge non-empty values from source to empty target', () => {
116
+ targetMeta.merge(sourceMeta);
117
+ expect(targetMeta.fileName()).toBe('/source/file.txt');
118
+ expect(targetMeta.root()).toBe('/source');
119
+ expect(targetMeta.component()).toBe('content');
120
+ expect(targetMeta.openFunc).toBe(mockFileOpener);
121
+ });
122
+ it('should not overwrite existing values in target', () => {
123
+ targetMeta.setFileName('/target/file.txt');
124
+ targetMeta.setComponentRoot('/target');
125
+ targetMeta.setComponentDir('layouts');
126
+ const targetOpener = jest.fn();
127
+ targetMeta.setOpenFunc(targetOpener);
128
+ targetMeta.merge(sourceMeta);
129
+ expect(targetMeta.fileName()).toBe('/target/file.txt');
130
+ expect(targetMeta.root()).toBe('/target');
131
+ expect(targetMeta.component()).toBe('layouts');
132
+ expect(targetMeta.openFunc).toBe(targetOpener);
133
+ });
134
+ it('should handle null/undefined source gracefully', () => {
135
+ const originalFilename = targetMeta.fileName();
136
+ targetMeta.merge(null);
137
+ targetMeta.merge(undefined);
138
+ expect(targetMeta.fileName()).toBe(originalFilename);
139
+ });
140
+ it('should merge only empty fields from source', () => {
141
+ targetMeta.setFileName('/target/file.txt');
142
+ // Leave other fields empty
143
+ targetMeta.merge(sourceMeta);
144
+ expect(targetMeta.fileName()).toBe('/target/file.txt'); // Not overwritten
145
+ expect(targetMeta.root()).toBe('/source'); // Merged
146
+ expect(targetMeta.component()).toBe('content'); // Merged
147
+ expect(targetMeta.openFunc).toBe(mockFileOpener); // Merged
148
+ });
149
+ });
150
+ describe('newFileMeta factory function', () => {
151
+ it('should create FileMeta with filename and opener', () => {
152
+ const result = (0, filemeta_1.newFileMeta)('/test.txt', mockFileOpener);
153
+ expect(result).toBeInstanceOf(filemeta_1.FileMeta);
154
+ expect(result.fileName()).toBe('/test.txt');
155
+ expect(result.openFunc).toBe(mockFileOpener);
156
+ });
157
+ it('should create FileMeta with only filename', () => {
158
+ const result = (0, filemeta_1.newFileMeta)('/test.txt');
159
+ expect(result).toBeInstanceOf(filemeta_1.FileMeta);
160
+ expect(result.fileName()).toBe('/test.txt');
161
+ expect(result.openFunc).toBeNull();
162
+ });
163
+ it('should create empty FileMeta when no parameters provided', () => {
164
+ const result = (0, filemeta_1.newFileMeta)();
165
+ expect(result).toBeInstanceOf(filemeta_1.FileMeta);
166
+ expect(result.fileName()).toBe('');
167
+ expect(result.openFunc).toBeNull();
168
+ });
169
+ });
170
+ });
171
+ //# sourceMappingURL=vo-filemeta.test.js.map