@teambit/objects 0.0.19

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 (123) hide show
  1. package/artifacts/__bit_junit.xml +68 -0
  2. package/artifacts/preview/teambit_scope_objects-preview.js +1 -0
  3. package/dist/fixtures/version-model-extended.json +48 -0
  4. package/dist/fixtures/version-model-object.json +87 -0
  5. package/dist/index.d.ts +19 -0
  6. package/dist/index.js +371 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/models/dependencies-graph.d.ts +45 -0
  9. package/dist/models/dependencies-graph.js +106 -0
  10. package/dist/models/dependencies-graph.js.map +1 -0
  11. package/dist/models/detach-heads.d.ts +25 -0
  12. package/dist/models/detach-heads.js +84 -0
  13. package/dist/models/detach-heads.js.map +1 -0
  14. package/dist/models/export-metadata.d.ts +24 -0
  15. package/dist/models/export-metadata.js +76 -0
  16. package/dist/models/export-metadata.js.map +1 -0
  17. package/dist/models/index.d.ts +10 -0
  18. package/dist/models/index.js +125 -0
  19. package/dist/models/index.js.map +1 -0
  20. package/dist/models/lane-history.d.ts +40 -0
  21. package/dist/models/lane-history.js +117 -0
  22. package/dist/models/lane-history.js.map +1 -0
  23. package/dist/models/lane.d.ts +124 -0
  24. package/dist/models/lane.js +463 -0
  25. package/dist/models/lane.js.map +1 -0
  26. package/dist/models/model-component.d.ts +317 -0
  27. package/dist/models/model-component.js +1365 -0
  28. package/dist/models/model-component.js.map +1 -0
  29. package/dist/models/model-component.spec.d.ts +1 -0
  30. package/dist/models/model-component.spec.js +71 -0
  31. package/dist/models/model-component.spec.js.map +1 -0
  32. package/dist/models/scopeMeta.d.ts +20 -0
  33. package/dist/models/scopeMeta.js +71 -0
  34. package/dist/models/scopeMeta.js.map +1 -0
  35. package/dist/models/source.d.ts +10 -0
  36. package/dist/models/source.js +43 -0
  37. package/dist/models/source.js.map +1 -0
  38. package/dist/models/symlink.d.ts +30 -0
  39. package/dist/models/symlink.js +91 -0
  40. package/dist/models/symlink.js.map +1 -0
  41. package/dist/models/version-history.d.ts +59 -0
  42. package/dist/models/version-history.js +285 -0
  43. package/dist/models/version-history.js.map +1 -0
  44. package/dist/models/version.d.ts +279 -0
  45. package/dist/models/version.js +777 -0
  46. package/dist/models/version.js.map +1 -0
  47. package/dist/models/version.spec.d.ts +1 -0
  48. package/dist/models/version.spec.js +340 -0
  49. package/dist/models/version.spec.js.map +1 -0
  50. package/dist/objects/bit-object-list.d.ts +24 -0
  51. package/dist/objects/bit-object-list.js +65 -0
  52. package/dist/objects/bit-object-list.js.map +1 -0
  53. package/dist/objects/index.d.ts +5 -0
  54. package/dist/objects/index.js +60 -0
  55. package/dist/objects/index.js.map +1 -0
  56. package/dist/objects/object-list-to-graph.d.ts +13 -0
  57. package/dist/objects/object-list-to-graph.js +93 -0
  58. package/dist/objects/object-list-to-graph.js.map +1 -0
  59. package/dist/objects/object-list.d.ts +52 -0
  60. package/dist/objects/object-list.js +369 -0
  61. package/dist/objects/object-list.js.map +1 -0
  62. package/dist/objects/object.d.ts +35 -0
  63. package/dist/objects/object.js +190 -0
  64. package/dist/objects/object.js.map +1 -0
  65. package/dist/objects/objects-readable-generator.d.ts +31 -0
  66. package/dist/objects/objects-readable-generator.js +192 -0
  67. package/dist/objects/objects-readable-generator.js.map +1 -0
  68. package/dist/objects/raw-object.d.ts +23 -0
  69. package/dist/objects/raw-object.js +155 -0
  70. package/dist/objects/raw-object.js.map +1 -0
  71. package/dist/objects/ref.d.ts +14 -0
  72. package/dist/objects/ref.js +45 -0
  73. package/dist/objects/ref.js.map +1 -0
  74. package/dist/objects/repository-hooks.d.ts +4 -0
  75. package/dist/objects/repository-hooks.js +56 -0
  76. package/dist/objects/repository-hooks.js.map +1 -0
  77. package/dist/objects/repository.d.ts +148 -0
  78. package/dist/objects/repository.js +842 -0
  79. package/dist/objects/repository.js.map +1 -0
  80. package/dist/objects/scope-index.d.ts +73 -0
  81. package/dist/objects/scope-index.js +251 -0
  82. package/dist/objects/scope-index.js.map +1 -0
  83. package/dist/objects/scope-index.spec.d.ts +1 -0
  84. package/dist/objects/scope-index.spec.js +152 -0
  85. package/dist/objects/scope-index.spec.js.map +1 -0
  86. package/dist/objects.aspect.d.ts +2 -0
  87. package/dist/objects.aspect.js +18 -0
  88. package/dist/objects.aspect.js.map +1 -0
  89. package/dist/objects.main.runtime.d.ts +7 -0
  90. package/dist/objects.main.runtime.js +36 -0
  91. package/dist/objects.main.runtime.js.map +1 -0
  92. package/dist/preview-1736824735631.js +7 -0
  93. package/fixtures/version-model-extended.json +48 -0
  94. package/fixtures/version-model-object.json +87 -0
  95. package/models/dependencies-graph.ts +119 -0
  96. package/models/detach-heads.ts +79 -0
  97. package/models/export-metadata.ts +57 -0
  98. package/models/index.ts +11 -0
  99. package/models/lane-history.ts +106 -0
  100. package/models/lane.ts +367 -0
  101. package/models/model-component.spec.ts +55 -0
  102. package/models/model-component.ts +1367 -0
  103. package/models/scopeMeta.ts +60 -0
  104. package/models/source.ts +32 -0
  105. package/models/symlink.ts +66 -0
  106. package/models/version-history.ts +266 -0
  107. package/models/version.spec.ts +288 -0
  108. package/models/version.ts +818 -0
  109. package/objects/bit-object-list.ts +59 -0
  110. package/objects/index.ts +6 -0
  111. package/objects/object-list-to-graph.ts +69 -0
  112. package/objects/object-list.ts +313 -0
  113. package/objects/object.ts +153 -0
  114. package/objects/objects-readable-generator.ts +167 -0
  115. package/objects/raw-object.ts +142 -0
  116. package/objects/ref.ts +45 -0
  117. package/objects/repository-hooks.ts +42 -0
  118. package/objects/repository.ts +753 -0
  119. package/objects/scope-index.spec.ts +95 -0
  120. package/objects/scope-index.ts +192 -0
  121. package/package.json +98 -0
  122. package/types/asset.d.ts +41 -0
  123. package/types/style.d.ts +42 -0
@@ -0,0 +1,288 @@
1
+ import { expect } from 'chai';
2
+
3
+ import versionWithDepsFixture from '../fixtures/version-model-extended.json';
4
+ import versionFixture from '../fixtures/version-model-object.json';
5
+ import { SchemaName } from '@teambit/legacy.consumer-component';
6
+ import Version from './version';
7
+ import { clone } from 'lodash';
8
+
9
+ const getVersionWithDepsFixture = () => {
10
+ return Version.parse(JSON.stringify(clone(versionWithDepsFixture)), '12c830ed25854dc731b58e014c6b4960ccb59092');
11
+ };
12
+
13
+ describe('Version', () => {
14
+ describe('id()', () => {
15
+ describe('simple version', () => {
16
+ let version;
17
+ let idRaw;
18
+ let idParsed;
19
+ before(() => {
20
+ // @ts-ignore
21
+ version = new Version(versionFixture);
22
+ idRaw = version.id();
23
+ idParsed = JSON.parse(idRaw);
24
+ });
25
+ it('should have mainFile property', () => {
26
+ expect(idParsed).to.haveOwnProperty('mainFile');
27
+ });
28
+ it('should have files property', () => {
29
+ expect(idParsed).to.haveOwnProperty('files');
30
+ });
31
+ it('should have log property', () => {
32
+ expect(idParsed).to.haveOwnProperty('log');
33
+ });
34
+ it('should have dependencies property', () => {
35
+ expect(idParsed).to.haveOwnProperty('dependencies');
36
+ });
37
+ it('should have packageDependencies property', () => {
38
+ expect(idParsed).to.haveOwnProperty('packageDependencies');
39
+ });
40
+ it('should have bindingPrefix property', () => {
41
+ expect(idParsed).to.haveOwnProperty('bindingPrefix');
42
+ });
43
+ it('should not have docs property', () => {
44
+ expect(idParsed).to.not.haveOwnProperty('docs');
45
+ });
46
+ it('should not have devDependencies property', () => {
47
+ expect(idParsed).to.not.haveOwnProperty('devDependencies');
48
+ });
49
+ it('should not have flattenedDependencies property', () => {
50
+ expect(idParsed).to.not.haveOwnProperty('flattenedDependencies');
51
+ });
52
+ it('should not have devPackageDependencies property', () => {
53
+ expect(idParsed).to.not.haveOwnProperty('devPackageDependencies');
54
+ });
55
+ it('should not have peerPackageDependencies property', () => {
56
+ expect(idParsed).to.not.haveOwnProperty('peerPackageDependencies');
57
+ });
58
+ });
59
+ describe('version with dependencies', () => {
60
+ let dependencies;
61
+ before(() => {
62
+ const version = getVersionWithDepsFixture();
63
+ const idRaw = version.id();
64
+ const idParsed = JSON.parse(idRaw);
65
+ dependencies = idParsed.dependencies;
66
+ });
67
+ it('dependencies should be an array', () => {
68
+ expect(dependencies).to.be.an('array').and.have.lengthOf(1);
69
+ });
70
+ it('dependencies should have properties id and relativePaths only', () => {
71
+ expect(dependencies[0]).to.haveOwnProperty('id');
72
+ expect(dependencies[0]).to.haveOwnProperty('relativePaths');
73
+ expect(dependencies[0]).to.not.haveOwnProperty('nonExistProperty');
74
+ expect(Object.keys(dependencies[0])).to.have.lengthOf(2);
75
+ });
76
+ it('relativePaths should be an array', () => {
77
+ expect(dependencies[0].relativePaths).to.be.an('array').and.have.lengthOf(1);
78
+ });
79
+ it('relativePaths should have properties sourceRelativePath and destinationRelativePath only', () => {
80
+ expect(dependencies[0].relativePaths[0]).to.haveOwnProperty('sourceRelativePath');
81
+ expect(dependencies[0].relativePaths[0]).to.haveOwnProperty('destinationRelativePath');
82
+ expect(dependencies[0].relativePaths[0]).to.not.haveOwnProperty('nonExistProperty');
83
+ expect(Object.keys(dependencies[0].relativePaths[0])).to.have.lengthOf(2);
84
+ });
85
+ });
86
+ });
87
+ describe('hash()', () => {
88
+ let version: Version;
89
+ let hash;
90
+ const versionFixtureHash = '4f67925a80b5e1f52dd1177196bf4c003d2f8798';
91
+ before(() => {
92
+ // @ts-ignore
93
+ version = new Version(versionFixture);
94
+ hash = version.calculateHash();
95
+ });
96
+ it('should have a correct hash string', () => {
97
+ expect(hash.toString()).to.equal(versionFixtureHash);
98
+ });
99
+ it('should have a the same hash string also when loading the version from contents', () => {
100
+ const versionFromContent = Version.parse(JSON.stringify(versionFixture), hash.toString());
101
+ expect(versionFromContent.hash().toString()).to.equal(versionFixtureHash);
102
+ });
103
+ });
104
+ describe('validate()', () => {
105
+ let version;
106
+ let validateFunc;
107
+ beforeEach(() => {
108
+ version = getVersionWithDepsFixture();
109
+ validateFunc = () => version.validate();
110
+ });
111
+ it('should not throw when it has a valid version', () => {
112
+ expect(validateFunc).to.not.throw();
113
+ });
114
+ it('should throw when mainFile is empty', () => {
115
+ const errMsg = 'mainFile is missing';
116
+ version.mainFile = null;
117
+ expect(validateFunc).to.throw(errMsg);
118
+ version.mainFile = '';
119
+ expect(validateFunc).to.throw(errMsg);
120
+ version.mainFile = undefined;
121
+ expect(validateFunc).to.throw(errMsg);
122
+ });
123
+ it('should throw when mainFile path is absolute', () => {
124
+ version.mainFile = '/tmp/main.js';
125
+ expect(validateFunc).to.throw(`mainFile ${version.mainFile} is invalid`);
126
+ });
127
+ it('should throw when mainFile path is Windows format', () => {
128
+ version.mainFile = 'a\\tmp.js';
129
+ expect(validateFunc).to.throw(`mainFile ${version.mainFile} is invalid`);
130
+ });
131
+ it('should throw when the files are missing', () => {
132
+ version.files = undefined;
133
+ expect(validateFunc).to.throw('files are missing');
134
+ version.files = null;
135
+ expect(validateFunc).to.throw('files are missing');
136
+ version.files = [];
137
+ expect(validateFunc).to.throw('files are missing');
138
+ });
139
+ it('should throw when the file has no hash', () => {
140
+ version.files[0].file = '';
141
+ expect(validateFunc).to.throw('missing the hash');
142
+ });
143
+ it('should throw when the file has no name', () => {
144
+ version.files[0].name = '';
145
+ expect(validateFunc).to.throw('missing the name');
146
+ });
147
+ it('should throw when the file.name is not a string', () => {
148
+ version.files[0].name = true;
149
+ expect(validateFunc).to.throw('to be string, got boolean');
150
+ });
151
+ it('should throw when the file hash is not a string', () => {
152
+ version.files[0].file.hash = [];
153
+ expect(validateFunc).to.throw('to be string, got object');
154
+ });
155
+ it('should throw when the main file is not in the file lists', () => {
156
+ version.files[0].relativePath = 'anotherFile.js';
157
+ expect(validateFunc).to.throw('unable to find the mainFile');
158
+ });
159
+ it('should throw when the two files have the same name but different letter cases', () => {
160
+ version.files[1] = clone(version.files[0]);
161
+ version.files[1].relativePath = 'bar/Foo.ts';
162
+ expect(validateFunc).to.throw('files are duplicated bar/foo.ts, bar/Foo.ts');
163
+ });
164
+ it('should throw for an invalid package version', () => {
165
+ version.packageDependencies = { lodash: 34 };
166
+ expect(validateFunc).to.throw('expected version of "lodash" to be string, got number');
167
+ });
168
+ it('should not throw for a package version which is a git url', () => {
169
+ version.packageDependencies = { userLib: 'gitreadonly ssh://git@git.bit.io' };
170
+ expect(validateFunc).to.not.throw();
171
+ });
172
+ it('should throw for invalid packageDependencies type', () => {
173
+ version.packageDependencies = 'invalid packages';
174
+ expect(validateFunc).to.throw('to be object, got string');
175
+ });
176
+ it('should throw for invalid devPackageDependencies type', () => {
177
+ version.devPackageDependencies = [1, 2, 3];
178
+ expect(validateFunc).to.throw('to be object, got array');
179
+ });
180
+ it('should throw for invalid peerPackageDependencies type', () => {
181
+ version.peerPackageDependencies = true;
182
+ expect(validateFunc).to.throw('to be object, got boolean');
183
+ });
184
+ it('should throw when dependencies are invalid', () => {
185
+ version.dependencies = {};
186
+ expect(validateFunc).to.throw('dependencies must be an instance of Dependencies, got object');
187
+ });
188
+ it('should throw when devDependencies are invalid', () => {
189
+ version.devDependencies = {};
190
+ expect(validateFunc).to.throw('devDependencies must be an instance of Dependencies, got object');
191
+ });
192
+ it('should throw when there are dependencies and the flattenDependencies are empty', () => {
193
+ version.flattenedDependencies = [];
194
+ expect(validateFunc).to.throw('it has dependencies but its flattenedDependencies is empty');
195
+ });
196
+ it('should throw when a flattenDependency is invalid', () => {
197
+ version.flattenedDependencies = [1234];
198
+ expect(validateFunc).to.throw('expected to be ComponentID, got number');
199
+ });
200
+ it('should throw when a flattenDependency does not have a version', () => {
201
+ version.flattenedDependencies[0] = version.flattenedDependencies[0].changeVersion(null);
202
+ expect(validateFunc).to.throw('does not have a version');
203
+ });
204
+ it('should throw when the log is empty', () => {
205
+ version.log = undefined;
206
+ expect(validateFunc).to.throw('log object is missing');
207
+ });
208
+ it('should throw when the log has an invalid type', () => {
209
+ version.log = [];
210
+ expect(validateFunc).to.throw('to be object, got array');
211
+ });
212
+ it('should throw when the bindingPrefix has an invalid type', () => {
213
+ version.bindingPrefix = {};
214
+ expect(validateFunc).to.throw('to be string, got object');
215
+ });
216
+ it('should throw when packageJsonChangedProps tries to override built-in package.json prop', () => {
217
+ version.packageJsonChangedProps = { main: 'my-new-main.js' };
218
+ expect(validateFunc).to.throw('the packageJsonChangedProps should not override the prop main');
219
+ });
220
+ it('should throw when packageJsonChangedProps is not an object', () => {
221
+ version.packageJsonChangedProps = [1, 2, 3, 4];
222
+ expect(validateFunc).to.throw('expected packageJsonChangedProps to be object, got array');
223
+ });
224
+ it('should throw when packageJsonChangedProps has a non-compliant npm value', () => {
225
+ version.packageJsonChangedProps = { bin: 1234 };
226
+ expect(validateFunc).to.throw('the generated package.json field "bin" is not compliant with npm requirements');
227
+ });
228
+ it('should not throw when packageJsonChangedProps has a compliant npm value', () => {
229
+ version.packageJsonChangedProps = { bin: 'my-file.js' };
230
+ expect(validateFunc).to.not.throw();
231
+ });
232
+ it('should throw when overrides has a "system" field (field that Bit uses internally for consumer overrides)', () => {
233
+ version.overrides = { exclude: ['*'] };
234
+ expect(validateFunc).to.throw('the "overrides" has a forbidden key "exclude"');
235
+ });
236
+ it('should throw when overrides has a package.json field that is non-compliant npm value', () => {
237
+ version.overrides = { bin: 1234 };
238
+ expect(validateFunc).to.throw(
239
+ '"overrides.bin" is a package.json field but is not compliant with npm requirements'
240
+ );
241
+ });
242
+ it('should not throw when overrides has a package.json field that is compliant npm value', () => {
243
+ version.overrides = { bin: 'my-file.js' };
244
+ expect(validateFunc).to.not.throw();
245
+ });
246
+ it('should show the original error from package-json-validator when overrides has a package.json field that is non-compliant npm value', () => {
247
+ version.overrides = { scripts: false };
248
+ expect(validateFunc).to.throw('Type for field scripts, was expected to be object, not boolean');
249
+ });
250
+ describe('Harmony schema', () => {
251
+ beforeEach(() => {
252
+ version.schema = SchemaName.Harmony;
253
+ });
254
+ it('should throw for having relativePaths on Harmony', () => {
255
+ delete version.compiler;
256
+ delete version.dists;
257
+ expect(validateFunc).to.throw('the dependencies should not have relativePaths');
258
+ });
259
+ it('should throw for having relativePaths on any other version other than legacy', () => {
260
+ version.schema = '2.0.0';
261
+ delete version.compiler;
262
+ delete version.dists;
263
+ expect(validateFunc).to.throw('the dependencies should not have relativePaths');
264
+ });
265
+ it('should not throw for having relativePaths on legacy', () => {
266
+ version.schema = SchemaName.Legacy;
267
+ delete version.compiler;
268
+ delete version.dists;
269
+ expect(validateFunc).to.not.throw();
270
+ });
271
+ it('should throw for having customResolvedPaths on Harmony', () => {
272
+ delete version.compiler;
273
+ delete version.dists;
274
+ version.dependencies.dependencies[0].relativePaths = [];
275
+ version.customResolvedPaths = ['something'];
276
+ expect(validateFunc).to.throw(
277
+ 'the customResolvedPaths field is cannot have values according to schema "1.0.0"'
278
+ );
279
+ });
280
+ it('should not throw when all is good', () => {
281
+ delete version.compiler;
282
+ delete version.dists;
283
+ version.dependencies.dependencies[0].relativePaths = [];
284
+ expect(validateFunc).to.not.throw();
285
+ });
286
+ });
287
+ });
288
+ });