@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,155 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ function _legacy() {
8
+ const data = require("@teambit/legacy.constants");
9
+ _legacy = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _legacy2() {
15
+ const data = require("@teambit/legacy.utils");
16
+ _legacy2 = function () {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
21
+ function _legacy3() {
22
+ const data = require("@teambit/legacy.scope");
23
+ _legacy3 = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
28
+ function _lodash() {
29
+ const data = require("lodash");
30
+ _lodash = function () {
31
+ return data;
32
+ };
33
+ return data;
34
+ }
35
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
36
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
37
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
38
+ class BitRawObject {
39
+ constructor(buffer, ref, type, content,
40
+ // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
41
+ parsedContent) {
42
+ _defineProperty(this, "headers", void 0);
43
+ _defineProperty(this, "type", void 0);
44
+ _defineProperty(this, "content", void 0);
45
+ // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
46
+ _defineProperty(this, "parsedContent", void 0);
47
+ _defineProperty(this, "_ref", void 0);
48
+ let headers;
49
+ let contentFromBuffer;
50
+ if (buffer) {
51
+ const firstNullByteLocation = buffer.indexOf(_legacy().NULL_BYTE);
52
+ headers = buffer.slice(0, firstNullByteLocation).toString();
53
+ contentFromBuffer = buffer.slice(firstNullByteLocation + 1, buffer.length);
54
+ }
55
+ this.content = content || contentFromBuffer;
56
+ this.headers = headers ? headers.split(_legacy().SPACE_DELIMITER) : undefined;
57
+ const typeFromHeader = this.headers ? this.headers[0] : undefined;
58
+ // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
59
+ this.type = type || typeFromHeader;
60
+ // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
61
+ this._ref = ref;
62
+ this.parsedContent = parsedContent || this.getParsedContent();
63
+ }
64
+ getParsedContent() {
65
+ if (this.parsedContent) return this.parsedContent;
66
+ let parsedContent;
67
+ switch (this.type) {
68
+ case 'Version':
69
+ case 'Component':
70
+ case 'Symlink':
71
+ case 'ScopeMeta':
72
+ case 'VersionHistory':
73
+ parsedContent = JSON.parse(this.content.toString());
74
+ break;
75
+ default:
76
+ parsedContent = this.content;
77
+ }
78
+ return parsedContent;
79
+ }
80
+ getString(pretty) {
81
+ const args = (0, _legacy2().getStringifyArgs)(pretty);
82
+ switch (this.type) {
83
+ case 'Version':
84
+ case 'Component':
85
+ case 'Symlink':
86
+ case 'ScopeMeta':
87
+ case 'VersionHistory':
88
+ return JSON.stringify(this.parsedContent, ...args);
89
+ case 'Source':
90
+ return pretty ? JSON.stringify(JSON.parse(this.content.toString()), ...args) : this.content;
91
+ default:
92
+ return this.content;
93
+ }
94
+ }
95
+
96
+ // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
97
+ set ref(ref) {
98
+ this._ref = ref;
99
+ }
100
+
101
+ // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
102
+ get ref() {
103
+ return this._ref;
104
+ }
105
+
106
+ // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
107
+ get id() {
108
+ switch (this.type) {
109
+ case 'Version':
110
+ return 'component version';
111
+ case 'Component':
112
+ return this.parsedContent.scope ? [this.parsedContent.scope, this.parsedContent.name].join('/') : this.parsedContent.name;
113
+ case 'Symlink':
114
+ return this.parsedContent.name;
115
+ case 'ScopeMeta':
116
+ return this.parsedContent.name;
117
+ default:
118
+ return 'component source file';
119
+ }
120
+ }
121
+ refs() {
122
+ if (this.type === 'Component') {
123
+ return Object.values(this.parsedContent.versions);
124
+ }
125
+ if (this.type === 'Version') {
126
+ const files = this.parsedContent.files ? this.parsedContent.files.map(file => file.file) : [];
127
+ const dists = this.parsedContent.dists ? this.parsedContent.dists.map(dist => dist.file) : [];
128
+ return [...dists, ...files].filter(ref => ref);
129
+ }
130
+ return [];
131
+ }
132
+ static async fromDeflatedBuffer(fileContents, ref) {
133
+ // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
134
+ return (0, _legacy2().inflate)(fileContents).then(buffer => new BitRawObject(buffer, ref));
135
+ }
136
+
137
+ /**
138
+ * Build a real object (model) from a parsed content (can be the original parsed conents or a provided one)
139
+ * We use the provided version during the migration process when we change the parsed content outside
140
+ * @param {Any} parsedContent
141
+ */
142
+ toRealObject() {
143
+ // @ts-ignore
144
+ return _legacy3().typesObj[this.type].from(this.parsedContent || this.getParsedContent(), this.headers[1]);
145
+ }
146
+ clone() {
147
+ const parsedContent = this.parsedContent ? (0, _lodash().clone)(this.parsedContent) : undefined;
148
+ // TODO: Should also clone the buffers (content)
149
+ // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
150
+ return new BitRawObject(undefined, this._ref, this.type, this.content, parsedContent);
151
+ }
152
+ }
153
+ exports.default = BitRawObject;
154
+
155
+ //# sourceMappingURL=raw-object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_legacy","data","require","_legacy2","_legacy3","_lodash","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","BitRawObject","constructor","buffer","ref","type","content","parsedContent","headers","contentFromBuffer","firstNullByteLocation","indexOf","NULL_BYTE","slice","toString","length","split","SPACE_DELIMITER","undefined","typeFromHeader","_ref","getParsedContent","JSON","parse","getString","pretty","args","getStringifyArgs","stringify","id","scope","name","join","refs","values","versions","files","map","file","dists","dist","filter","fromDeflatedBuffer","fileContents","inflate","then","toRealObject","types","from","clone","exports","default"],"sources":["raw-object.ts"],"sourcesContent":["import { NULL_BYTE, SPACE_DELIMITER } from '@teambit/legacy.constants';\nimport { getStringifyArgs, inflate } from '@teambit/legacy.utils';\nimport { typesObj as types } from '@teambit/legacy.scope';\nimport BitObject from './object';\nimport { clone } from 'lodash';\n\nexport default class BitRawObject {\n headers: string[];\n type: string;\n content: Buffer;\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n parsedContent: any;\n _ref: string;\n\n constructor(\n buffer: Buffer,\n ref: string | null | undefined,\n type: string | null | undefined,\n content: Buffer | null | undefined,\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n parsedContent: any | null | undefined\n ) {\n let headers;\n let contentFromBuffer;\n if (buffer) {\n const firstNullByteLocation = buffer.indexOf(NULL_BYTE);\n headers = buffer.slice(0, firstNullByteLocation).toString();\n contentFromBuffer = buffer.slice(firstNullByteLocation + 1, buffer.length);\n }\n this.content = content || contentFromBuffer;\n this.headers = headers ? headers.split(SPACE_DELIMITER) : undefined;\n const typeFromHeader = this.headers ? this.headers[0] : undefined;\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n this.type = type || typeFromHeader;\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n this._ref = ref;\n this.parsedContent = parsedContent || this.getParsedContent();\n }\n\n getParsedContent() {\n if (this.parsedContent) return this.parsedContent;\n let parsedContent;\n switch (this.type) {\n case 'Version':\n case 'Component':\n case 'Symlink':\n case 'ScopeMeta':\n case 'VersionHistory':\n parsedContent = JSON.parse(this.content.toString());\n break;\n\n default:\n parsedContent = this.content;\n }\n return parsedContent;\n }\n\n getString(pretty: boolean) {\n const args = getStringifyArgs(pretty);\n switch (this.type) {\n case 'Version':\n case 'Component':\n case 'Symlink':\n case 'ScopeMeta':\n case 'VersionHistory':\n return JSON.stringify(this.parsedContent, ...args);\n case 'Source':\n return pretty ? JSON.stringify(JSON.parse(this.content.toString()), ...args) : this.content;\n\n default:\n return this.content;\n }\n }\n\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n set ref(ref: string) {\n this._ref = ref;\n }\n\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n get ref(): string {\n return this._ref;\n }\n\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n get id(): string {\n switch (this.type) {\n case 'Version':\n return 'component version';\n case 'Component':\n return this.parsedContent.scope\n ? [this.parsedContent.scope, this.parsedContent.name].join('/')\n : this.parsedContent.name;\n case 'Symlink':\n return this.parsedContent.name;\n case 'ScopeMeta':\n return this.parsedContent.name;\n\n default:\n return 'component source file';\n }\n }\n\n refs(): string[] {\n if (this.type === 'Component') {\n return Object.values(this.parsedContent.versions);\n }\n if (this.type === 'Version') {\n const files = this.parsedContent.files ? this.parsedContent.files.map((file) => file.file) : [];\n const dists = this.parsedContent.dists ? this.parsedContent.dists.map((dist) => dist.file) : [];\n return [...dists, ...files].filter((ref) => ref);\n }\n\n return [];\n }\n\n static async fromDeflatedBuffer(\n fileContents: Buffer,\n ref: string | null | undefined\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n ): Promise<BitObject> {\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n return inflate(fileContents).then((buffer) => new BitRawObject(buffer, ref));\n }\n\n /**\n * Build a real object (model) from a parsed content (can be the original parsed conents or a provided one)\n * We use the provided version during the migration process when we change the parsed content outside\n * @param {Any} parsedContent\n */\n toRealObject() {\n // @ts-ignore\n return types[this.type].from(this.parsedContent || this.getParsedContent(), this.headers[1]);\n }\n\n clone() {\n const parsedContent = this.parsedContent ? clone(this.parsedContent) : undefined;\n // TODO: Should also clone the buffers (content)\n // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!\n return new BitRawObject(undefined, this._ref, this.type, this.content, parsedContent);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ import BitObject from './object';
2
+ import Repository from './repository';
3
+ export default class Ref {
4
+ hash: string;
5
+ constructor(hash: string);
6
+ toString(): string;
7
+ toShortString(numOfChars?: number): string;
8
+ load(repository: Repository, throws?: boolean): Promise<BitObject>;
9
+ loadSync(repo: Repository, throws?: boolean): BitObject;
10
+ loadRaw(repo: Repository): Promise<Buffer>;
11
+ isEqual(ref: Ref): boolean;
12
+ clone(): Ref;
13
+ static from(hash: string): Ref;
14
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
8
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
9
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
10
+ class Ref {
11
+ constructor(hash) {
12
+ _defineProperty(this, "hash", void 0);
13
+ if (!hash) throw new Error('failed creating a Ref object, the hash argument is empty');
14
+ this.hash = hash;
15
+ }
16
+ toString() {
17
+ // reason for hash.toString() is when working with short hash, it's possible that all characters are numbers
18
+ // so it's needed to convert it to string
19
+ return this.hash.toString();
20
+ }
21
+ toShortString(numOfChars = 9) {
22
+ return this.hash.substring(0, numOfChars).toString();
23
+ }
24
+ load(repository, throws = false) {
25
+ return repository.load(this, throws);
26
+ }
27
+ loadSync(repo, throws = true) {
28
+ return repo.loadSync(this, throws);
29
+ }
30
+ loadRaw(repo) {
31
+ return repo.loadRaw(this);
32
+ }
33
+ isEqual(ref) {
34
+ return this.toString() === ref.toString();
35
+ }
36
+ clone() {
37
+ return new Ref(this.hash);
38
+ }
39
+ static from(hash) {
40
+ return new Ref(hash);
41
+ }
42
+ }
43
+ exports.default = Ref;
44
+
45
+ //# sourceMappingURL=ref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Ref","constructor","hash","_defineProperty","Error","toString","toShortString","numOfChars","substring","load","repository","throws","loadSync","repo","loadRaw","isEqual","ref","clone","from","exports","default"],"sources":["ref.ts"],"sourcesContent":["import BitObject from './object';\nimport Repository from './repository';\n\nexport default class Ref {\n hash: string;\n\n constructor(hash: string) {\n if (!hash) throw new Error('failed creating a Ref object, the hash argument is empty');\n this.hash = hash;\n }\n\n toString() {\n // reason for hash.toString() is when working with short hash, it's possible that all characters are numbers\n // so it's needed to convert it to string\n return this.hash.toString();\n }\n\n toShortString(numOfChars = 9) {\n return this.hash.substring(0, numOfChars).toString();\n }\n\n load(repository: Repository, throws = false): Promise<BitObject> {\n return repository.load(this, throws);\n }\n\n loadSync(repo: Repository, throws = true): BitObject {\n return repo.loadSync(this, throws);\n }\n\n loadRaw(repo: Repository): Promise<Buffer> {\n return repo.loadRaw(this);\n }\n\n isEqual(ref: Ref): boolean {\n return this.toString() === ref.toString();\n }\n\n clone() {\n return new Ref(this.hash);\n }\n\n static from(hash: string): Ref {\n return new Ref(hash);\n }\n}\n"],"mappings":";;;;;;;;;AAGe,MAAMA,GAAG,CAAC;EAGvBC,WAAWA,CAACC,IAAY,EAAE;IAAAC,eAAA;IACxB,IAAI,CAACD,IAAI,EAAE,MAAM,IAAIE,KAAK,CAAC,0DAA0D,CAAC;IACtF,IAAI,CAACF,IAAI,GAAGA,IAAI;EAClB;EAEAG,QAAQA,CAAA,EAAG;IACT;IACA;IACA,OAAO,IAAI,CAACH,IAAI,CAACG,QAAQ,CAAC,CAAC;EAC7B;EAEAC,aAAaA,CAACC,UAAU,GAAG,CAAC,EAAE;IAC5B,OAAO,IAAI,CAACL,IAAI,CAACM,SAAS,CAAC,CAAC,EAAED,UAAU,CAAC,CAACF,QAAQ,CAAC,CAAC;EACtD;EAEAI,IAAIA,CAACC,UAAsB,EAAEC,MAAM,GAAG,KAAK,EAAsB;IAC/D,OAAOD,UAAU,CAACD,IAAI,CAAC,IAAI,EAAEE,MAAM,CAAC;EACtC;EAEAC,QAAQA,CAACC,IAAgB,EAAEF,MAAM,GAAG,IAAI,EAAa;IACnD,OAAOE,IAAI,CAACD,QAAQ,CAAC,IAAI,EAAED,MAAM,CAAC;EACpC;EAEAG,OAAOA,CAACD,IAAgB,EAAmB;IACzC,OAAOA,IAAI,CAACC,OAAO,CAAC,IAAI,CAAC;EAC3B;EAEAC,OAAOA,CAACC,GAAQ,EAAW;IACzB,OAAO,IAAI,CAACX,QAAQ,CAAC,CAAC,KAAKW,GAAG,CAACX,QAAQ,CAAC,CAAC;EAC3C;EAEAY,KAAKA,CAAA,EAAG;IACN,OAAO,IAAIjB,GAAG,CAAC,IAAI,CAACE,IAAI,CAAC;EAC3B;EAEA,OAAOgB,IAAIA,CAAChB,IAAY,EAAO;IAC7B,OAAO,IAAIF,GAAG,CAACE,IAAI,CAAC;EACtB;AACF;AAACiB,OAAA,CAAAC,OAAA,GAAApB,GAAA","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ import { ScopeJson } from '@teambit/legacy.scope';
2
+ export type ContentTransformer = (content: Buffer) => Buffer;
3
+ export declare function onPersist(scopePath: string, scopeJson: ScopeJson): ContentTransformer;
4
+ export declare function onRead(scopePath: string, scopeJson: ScopeJson): ContentTransformer;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.onPersist = onPersist;
7
+ exports.onRead = onRead;
8
+ function _isRelativePath() {
9
+ const data = _interopRequireDefault(require("is-relative-path"));
10
+ _isRelativePath = function () {
11
+ return data;
12
+ };
13
+ return data;
14
+ }
15
+ function _path() {
16
+ const data = _interopRequireDefault(require("path"));
17
+ _path = function () {
18
+ return data;
19
+ };
20
+ return data;
21
+ }
22
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
+ function loadHooks(scopePath, scopeJson) {
24
+ const hooksPath = scopeJson.hooksPath;
25
+ if (hooksPath) {
26
+ const hooksFinalPath = (0, _isRelativePath().default)(hooksPath) ? _path().default.join(scopePath, hooksPath) : hooksPath;
27
+ // eslint-disable-next-line global-require, import/no-dynamic-require
28
+ const hooks = require(hooksFinalPath);
29
+ return hooks;
30
+ }
31
+ return undefined;
32
+ }
33
+ function onPersist(scopePath, scopeJson) {
34
+ const defaultFunc = content => content;
35
+ const hooks = loadHooks(scopePath, scopeJson);
36
+ if (hooks) {
37
+ const onReadFunction = hooks.onPersist;
38
+ if (onReadFunction) {
39
+ return onReadFunction;
40
+ }
41
+ }
42
+ return defaultFunc;
43
+ }
44
+ function onRead(scopePath, scopeJson) {
45
+ const defaultFunc = content => content;
46
+ const hooks = loadHooks(scopePath, scopeJson);
47
+ if (hooks) {
48
+ const onReadFunction = hooks.onRead;
49
+ if (onReadFunction) {
50
+ return onReadFunction;
51
+ }
52
+ }
53
+ return defaultFunc;
54
+ }
55
+
56
+ //# sourceMappingURL=repository-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_isRelativePath","data","_interopRequireDefault","require","_path","e","__esModule","default","loadHooks","scopePath","scopeJson","hooksPath","hooksFinalPath","isRelative","path","join","hooks","undefined","onPersist","defaultFunc","content","onReadFunction","onRead"],"sources":["repository-hooks.ts"],"sourcesContent":["import isRelative from 'is-relative-path';\nimport path from 'path';\n\nimport { ScopeJson } from '@teambit/legacy.scope';\n\nexport type ContentTransformer = (content: Buffer) => Buffer;\n\nfunction loadHooks(scopePath: string, scopeJson: ScopeJson): any | undefined {\n const hooksPath = scopeJson.hooksPath;\n if (hooksPath) {\n const hooksFinalPath = isRelative(hooksPath) ? path.join(scopePath, hooksPath) : hooksPath;\n // eslint-disable-next-line global-require, import/no-dynamic-require\n const hooks = require(hooksFinalPath);\n return hooks;\n }\n return undefined;\n}\n\nexport function onPersist(scopePath: string, scopeJson: ScopeJson): ContentTransformer {\n const defaultFunc = (content) => content;\n const hooks = loadHooks(scopePath, scopeJson);\n if (hooks) {\n const onReadFunction = hooks.onPersist;\n if (onReadFunction) {\n return onReadFunction;\n }\n }\n return defaultFunc;\n}\n\nexport function onRead(scopePath: string, scopeJson: ScopeJson): ContentTransformer {\n const defaultFunc = (content) => content;\n\n const hooks = loadHooks(scopePath, scopeJson);\n if (hooks) {\n const onReadFunction = hooks.onRead;\n if (onReadFunction) {\n return onReadFunction;\n }\n }\n return defaultFunc;\n}\n"],"mappings":";;;;;;;AAAA,SAAAA,gBAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,eAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,MAAA;EAAA,MAAAH,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAC,KAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAwB,SAAAC,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAMxB,SAASG,SAASA,CAACC,SAAiB,EAAEC,SAAoB,EAAmB;EAC3E,MAAMC,SAAS,GAAGD,SAAS,CAACC,SAAS;EACrC,IAAIA,SAAS,EAAE;IACb,MAAMC,cAAc,GAAG,IAAAC,yBAAU,EAACF,SAAS,CAAC,GAAGG,eAAI,CAACC,IAAI,CAACN,SAAS,EAAEE,SAAS,CAAC,GAAGA,SAAS;IAC1F;IACA,MAAMK,KAAK,GAAGb,OAAO,CAACS,cAAc,CAAC;IACrC,OAAOI,KAAK;EACd;EACA,OAAOC,SAAS;AAClB;AAEO,SAASC,SAASA,CAACT,SAAiB,EAAEC,SAAoB,EAAsB;EACrF,MAAMS,WAAW,GAAIC,OAAO,IAAKA,OAAO;EACxC,MAAMJ,KAAK,GAAGR,SAAS,CAACC,SAAS,EAAEC,SAAS,CAAC;EAC7C,IAAIM,KAAK,EAAE;IACT,MAAMK,cAAc,GAAGL,KAAK,CAACE,SAAS;IACtC,IAAIG,cAAc,EAAE;MAClB,OAAOA,cAAc;IACvB;EACF;EACA,OAAOF,WAAW;AACpB;AAEO,SAASG,MAAMA,CAACb,SAAiB,EAAEC,SAAoB,EAAsB;EAClF,MAAMS,WAAW,GAAIC,OAAO,IAAKA,OAAO;EAExC,MAAMJ,KAAK,GAAGR,SAAS,CAACC,SAAS,EAAEC,SAAS,CAAC;EAC7C,IAAIM,KAAK,EAAE;IACT,MAAMK,cAAc,GAAGL,KAAK,CAACM,MAAM;IACnC,IAAID,cAAc,EAAE;MAClB,OAAOA,cAAc;IACvB;EACF;EACA,OAAOF,WAAW;AACpB","ignoreList":[]}
@@ -0,0 +1,148 @@
1
+ import { Mutex } from 'async-mutex';
2
+ import { ComponentID } from '@teambit/component-id';
3
+ import { PathOsBasedAbsolute } from '@teambit/legacy.utils';
4
+ import { Types, ScopeJson, UnmergedComponents, RemoteLanes } from '@teambit/legacy.scope';
5
+ import { ScopeIndex, IndexType } from './scope-index';
6
+ import BitObject from './object';
7
+ import { ObjectItem, ObjectList } from './object-list';
8
+ import BitRawObject from './raw-object';
9
+ import Ref from './ref';
10
+ import { ContentTransformer } from './repository-hooks';
11
+ import { InMemoryCache } from '@teambit/harmony.modules.in-memory-cache';
12
+ export default class Repository {
13
+ objects: {
14
+ [key: string]: BitObject;
15
+ };
16
+ objectsToRemove: Ref[];
17
+ scopeJson: ScopeJson;
18
+ onRead: ContentTransformer;
19
+ onPersist: ContentTransformer;
20
+ scopePath: string;
21
+ scopeIndex: ScopeIndex;
22
+ protected cache: InMemoryCache<BitObject>;
23
+ remoteLanes: RemoteLanes;
24
+ unmergedComponents: UnmergedComponents;
25
+ persistMutex: Mutex;
26
+ constructor(scopePath: string, scopeJson: ScopeJson);
27
+ static load({ scopePath, scopeJson }: {
28
+ scopePath: string;
29
+ scopeJson: ScopeJson;
30
+ }): Promise<Repository>;
31
+ init(): Promise<void>;
32
+ static create({ scopePath, scopeJson }: {
33
+ scopePath: string;
34
+ scopeJson: ScopeJson;
35
+ }): Promise<Repository>;
36
+ static reset(scopePath: string): Promise<void>;
37
+ static getPathByScopePath(scopePath: string): string;
38
+ static onPostObjectsPersist: () => Promise<void>;
39
+ reLoadScopeIndex(): Promise<void>;
40
+ /**
41
+ * current scope index difference with <scope_folder>/index.json content, reload it
42
+ * @deprecated use Scope aspect `watchSystemFiles` instead, it's way more efficient.
43
+ */
44
+ reloadScopeIndexIfNeed(force?: boolean): Promise<void>;
45
+ ensureDir(): Promise<void>;
46
+ getPath(): string;
47
+ getBackupPath(dirName?: string): string;
48
+ getTrashDir(): string;
49
+ getLicense(): Promise<string>;
50
+ getScopeMetaObject(): Promise<ObjectItem>;
51
+ objectPath(ref: Ref): string;
52
+ has(ref: Ref): Promise<boolean>;
53
+ hasMultiple(refs: Ref[]): Promise<Ref[]>;
54
+ load(ref: Ref, throws?: boolean): Promise<BitObject>;
55
+ /**
56
+ * this is restricted to provide objects according to the given types. Otherwise, big scopes (>1GB) could crush.
57
+ * example usage: `this.list([ModelComponent, Symlink, Lane])`
58
+ */
59
+ list(types: Types): Promise<BitObject[]>;
60
+ loadRefDeleteIfInvalid(ref: Ref): Promise<BitObject | undefined>;
61
+ loadRefOnlyIfType(ref: Ref, types: Types): Promise<BitObject | null>;
62
+ listRefs(cwd?: string): Promise<Array<Ref>>;
63
+ listRefsStartWith(shortHash: Ref): Promise<Array<Ref>>;
64
+ listRawObjects(): Promise<any>;
65
+ listObjectsFromIndex(indexType: IndexType, filter?: Function): Promise<BitObject[]>;
66
+ getHashFromIndex(indexType: IndexType, filter: Function): string | null;
67
+ _getBitObjectsByHashes(hashes: string[]): Promise<BitObject[]>;
68
+ loadOptionallyCreateScopeIndex(): Promise<ScopeIndex>;
69
+ loadRaw(ref: Ref): Promise<Buffer>;
70
+ getFullRefFromShortHash(ref: Ref): Promise<Ref>;
71
+ loadManyRaw(refs: Ref[]): Promise<ObjectItem[]>;
72
+ loadManyRawIgnoreMissing(refs: Ref[]): Promise<ObjectItem[]>;
73
+ loadRawObject(ref: Ref): Promise<BitRawObject>;
74
+ /**
75
+ * prefer using `this.load()` for an async version, which also writes to the cache
76
+ */
77
+ loadSync(ref: Ref, throws?: boolean): BitObject;
78
+ setCache(object: BitObject): this;
79
+ getCache(ref: Ref): BitObject | undefined;
80
+ removeFromCache(ref: Ref): void;
81
+ clearCache(): Promise<void>;
82
+ clearObjectsFromCache(): void;
83
+ backup(dirName?: string): void;
84
+ add(object: BitObject | null | undefined): Repository;
85
+ addMany(objects: BitObject[]): Repository;
86
+ removeObject(ref: Ref): void;
87
+ removeManyObjects(refs: Ref[]): void;
88
+ findMany(refs: Ref[]): Promise<BitObject[]>;
89
+ /**
90
+ * important! use this method only for commands that are non running on an http server.
91
+ *
92
+ * it's better to remove/delete objects directly and not using the `objects` member.
93
+ * it helps to avoid multiple processes running concurrently on an http server.
94
+ *
95
+ * persist objects changes (added and removed) into the filesystem
96
+ * do not call this function multiple times in parallel, otherwise, it'll damage the index.json file.
97
+ * call this function only once after you added and removed all applicable objects.
98
+ */
99
+ persist(validate?: boolean): Promise<void>;
100
+ writeRemoteLanes(): Promise<void>;
101
+ /**
102
+ * this is especially critical for http server, where one process lives long and serves multiple
103
+ * exports. without this, the objects get accumulated over time and being rewritten over and over
104
+ * again.
105
+ */
106
+ private clearObjects;
107
+ /**
108
+ * normally, the validation step takes place just before the acutal writing of the file.
109
+ * however, this can be an issue where a component has an invalid version. the component could
110
+ * be saved before validating the version (see #1727). that's why we validate here before writing
111
+ * anything to the filesystem.
112
+ * the open question here is whether should we validate again before the actual writing or it
113
+ * should be enough to validate here?
114
+ * for now, it does validate again before saving, only to be 100% sure nothing happens in a few
115
+ * lines of code until the actual writing. however, if the performance penalty is noticeable, we
116
+ * can easily revert it by changing `bitObject.validateBeforePersist = false` line run regardless
117
+ * the `validate` argument.
118
+ */
119
+ validateObjects(validate: boolean, objects: BitObject[]): void;
120
+ deleteObjectsFromFS(refs: Ref[]): Promise<void>;
121
+ moveObjectsToDir(refs: Ref[], dir: string): Promise<void>;
122
+ moveObjectsToTrash(refs: Ref[]): Promise<void>;
123
+ listTrash(): Promise<Ref[]>;
124
+ getFromTrash(refs: Ref[]): Promise<BitObject[]>;
125
+ restoreFromTrash(refs: Ref[]): Promise<void>;
126
+ restoreFromDir(dir: string, overwrite?: boolean): Promise<void>;
127
+ private moveOneObjectToDir;
128
+ private moveOneObjectToTrash;
129
+ deleteRecordsFromUnmergedComponents(compIds: ComponentID[]): Promise<void>;
130
+ /**
131
+ * write all objects to the FS and index the components/lanes/symlink objects
132
+ */
133
+ writeObjectsToTheFS(objects: BitObject[]): Promise<void>;
134
+ /**
135
+ * do not call this method directly. always call this.removeObject() and once done with all objects,
136
+ * call this.persist()
137
+ */
138
+ _deleteOne(ref: Ref): Promise<boolean>;
139
+ /**
140
+ * always prefer this.persist() or this.writeObjectsToTheFS()
141
+ * this method doesn't write to scopeIndex. so using this method for ModelComponent or
142
+ * Symlink makes the index outdated.
143
+ */
144
+ _writeOne(object: BitObject): Promise<boolean>;
145
+ writeObjectsToPendingDir(objectList: ObjectList, pendingDir: PathOsBasedAbsolute): Promise<void>;
146
+ readObjectsFromPendingDir(pendingDir: PathOsBasedAbsolute): Promise<ObjectList>;
147
+ private hashPath;
148
+ }