@teambit/stash 1.0.107 → 1.0.108
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.
- package/dist/stash-data.d.ts +2 -2
- package/dist/stash.main.runtime.d.ts +1 -1
- package/dist/stash.main.runtime.js +2 -2
- package/dist/stash.main.runtime.js.map +1 -1
- package/index.ts +5 -0
- package/package.json +14 -23
- package/stash-data.ts +35 -0
- package/stash-files.ts +53 -0
- package/stash.aspect.ts +5 -0
- package/stash.cmd.ts +75 -0
- package/stash.main.runtime.ts +108 -0
- package/tsconfig.json +16 -21
- package/types/asset.d.ts +15 -3
- /package/dist/{preview-1703590665075.js → preview-1703647408454.js} +0 -0
package/dist/stash-data.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ComponentID } from '@teambit/component-id';
|
|
2
2
|
import { Ref } from '@teambit/legacy/dist/scope/objects';
|
|
3
3
|
import { Workspace } from '@teambit/workspace';
|
|
4
|
-
export
|
|
4
|
+
export type StashCompData = {
|
|
5
5
|
id: ComponentID;
|
|
6
6
|
hash: Ref;
|
|
7
7
|
};
|
|
8
|
-
export
|
|
8
|
+
export type StashMetadata = {
|
|
9
9
|
message?: string;
|
|
10
10
|
};
|
|
11
11
|
export declare class StashData {
|
|
@@ -15,7 +15,7 @@ export declare class StashMain {
|
|
|
15
15
|
}): Promise<ComponentID[]>;
|
|
16
16
|
loadLatest(): Promise<ComponentID[]>;
|
|
17
17
|
private addComponentDataToRepo;
|
|
18
|
-
static slots:
|
|
18
|
+
static slots: any[];
|
|
19
19
|
static dependencies: import("@teambit/harmony").Aspect[];
|
|
20
20
|
static runtime: import("@teambit/harmony").RuntimeDefinition;
|
|
21
21
|
static provider([cli, workspace, checkout, snapping]: [CLIMain, Workspace, CheckoutMain, SnappingMain]): Promise<StashMain>;
|
|
@@ -87,7 +87,7 @@ class StashMain {
|
|
|
87
87
|
this.stashFiles = new (_stashFiles().StashFiles)(workspace);
|
|
88
88
|
}
|
|
89
89
|
async save(options) {
|
|
90
|
-
const compIds = options
|
|
90
|
+
const compIds = options?.pattern ? await this.workspace.idsByPattern(options?.pattern) : await this.workspace.listIds();
|
|
91
91
|
const comps = await this.workspace.getMany(compIds);
|
|
92
92
|
const modifiedComps = (0, _lodash().compact)(await Promise.all(comps.map(async comp => {
|
|
93
93
|
if (!comp.head) return undefined; // it's new
|
|
@@ -109,7 +109,7 @@ class StashMain {
|
|
|
109
109
|
}));
|
|
110
110
|
await this.workspace.scope.legacyScope.objects.persist();
|
|
111
111
|
const stashData = new (_stashData().StashData)({
|
|
112
|
-
message: options
|
|
112
|
+
message: options?.message
|
|
113
113
|
}, hashPerId);
|
|
114
114
|
await this.stashFiles.saveStashData(stashData);
|
|
115
115
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_workspace","data","_interopRequireDefault","require","_snapping","_bitError","_lodash","_cli","_checkout","_stash","_stash2","_stashData","_stashFiles","obj","__esModule","default","_defineProperty","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","t","i","_toPrimitive","String","r","e","Symbol","toPrimitive","call","TypeError","Number","StashMain","constructor","workspace","checkout","snapping","stashFiles","StashFiles","save","options","compIds","pattern","idsByPattern","listIds","comps","getMany","modifiedComps","compact","Promise","all","map","comp","head","undefined","isModified","length","consumeComponents","state","_consumer","_addFlattenedDependenciesToComponents","hashPerId","versionObj","addComponentDataToRepo","id","hash","scope","legacyScope","objects","persist","stashData","StashData","message","saveStashData","modifiedCompIds","c","ids","skipNpmInstall","reset","loadLatest","stashFile","getLatestStashFile","BitError","getStashData","stashCompsData","versionPerId","changeVersion","toString","skipUpdatingBitmap","deleteStashFile","component","consumerComponent","clone","setNewVersion","version","files","sources","consumerComponentToVersion","repo","add","forEach","file","provider","cli","stashMain","stashCmd","StashCmd","commands","StashSaveCmd","StashLoadCmd","register","exports","CLIAspect","WorkspaceAspect","CheckoutAspect","SnappingAspect","MainRuntime","StashAspect","addRuntime","_default"],"sources":["stash.main.runtime.ts"],"sourcesContent":["import WorkspaceAspect, { Workspace } from '@teambit/workspace';\nimport SnappingAspect, { SnappingMain } from '@teambit/snapping';\nimport { Component, ComponentID } from '@teambit/component';\nimport { BitError } from '@teambit/bit-error';\nimport ConsumerComponent from '@teambit/legacy/dist/consumer/component';\nimport { compact } from 'lodash';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport CheckoutAspect, { CheckoutMain } from '@teambit/checkout';\nimport { StashAspect } from './stash.aspect';\nimport { StashCmd, StashLoadCmd, StashSaveCmd } from './stash.cmd';\nimport { StashData } from './stash-data';\nimport { StashFiles } from './stash-files';\n\nexport class StashMain {\n private stashFiles: StashFiles;\n constructor(private workspace: Workspace, private checkout: CheckoutMain, private snapping: SnappingMain) {\n this.stashFiles = new StashFiles(workspace);\n }\n\n async save(options: { message?: string; pattern?: string }): Promise<ComponentID[]> {\n const compIds = options?.pattern\n ? await this.workspace.idsByPattern(options?.pattern)\n : await this.workspace.listIds();\n const comps = await this.workspace.getMany(compIds);\n const modifiedComps = compact(\n await Promise.all(\n comps.map(async (comp) => {\n if (!comp.head) return undefined; // it's new\n const isModified = await this.workspace.isModified(comp);\n if (isModified) return comp;\n return undefined;\n })\n )\n );\n if (!modifiedComps.length) return [];\n\n // per comp: create Version object, save it in the local scope and return the hash. don't save anything in the .bitmap\n const consumeComponents = modifiedComps.map((comp) => comp.state._consumer);\n await this.snapping._addFlattenedDependenciesToComponents(consumeComponents);\n const hashPerId = await Promise.all(\n modifiedComps.map(async (comp) => {\n const versionObj = await this.addComponentDataToRepo(comp);\n return { id: comp.id, hash: versionObj.hash() };\n })\n );\n await this.workspace.scope.legacyScope.objects.persist();\n const stashData = new StashData({ message: options?.message }, hashPerId);\n await this.stashFiles.saveStashData(stashData);\n\n // reset all modified components\n const modifiedCompIds = modifiedComps.map((c) => c.id);\n await this.checkout.checkout({\n ids: modifiedCompIds,\n skipNpmInstall: true,\n reset: true,\n });\n\n return modifiedCompIds;\n }\n\n async loadLatest() {\n const stashFile = await this.stashFiles.getLatestStashFile();\n if (!stashFile) {\n throw new BitError('no stashed components found');\n }\n const stashData = await this.stashFiles.getStashData(stashFile);\n const compIds = stashData.stashCompsData.map((c) => c.id);\n const versionPerId = stashData.stashCompsData.map((c) => c.id.changeVersion(c.hash.toString()));\n\n await this.checkout.checkout({\n ids: compIds,\n skipNpmInstall: true,\n versionPerId,\n skipUpdatingBitmap: true,\n });\n\n await this.stashFiles.deleteStashFile(stashFile);\n\n return compIds;\n }\n\n private async addComponentDataToRepo(component: Component) {\n const consumerComponent = component.state._consumer.clone() as ConsumerComponent;\n consumerComponent.setNewVersion();\n const { version, files } = await this.workspace.scope.legacyScope.sources.consumerComponentToVersion(\n consumerComponent\n );\n const repo = this.workspace.scope.legacyScope.objects;\n repo.add(version);\n files.forEach((file) => repo.add(file.file));\n return version;\n }\n\n static slots = [];\n static dependencies = [CLIAspect, WorkspaceAspect, CheckoutAspect, SnappingAspect];\n static runtime = MainRuntime;\n static async provider([cli, workspace, checkout, snapping]: [CLIMain, Workspace, CheckoutMain, SnappingMain]) {\n const stashMain = new StashMain(workspace, checkout, snapping);\n const stashCmd = new StashCmd(stashMain);\n stashCmd.commands = [new StashSaveCmd(stashMain), new StashLoadCmd(stashMain)];\n cli.register(stashCmd);\n return stashMain;\n }\n}\n\nStashAspect.addRuntime(StashMain);\n\nexport default StashMain;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_workspace","data","_interopRequireDefault","require","_snapping","_bitError","_lodash","_cli","_checkout","_stash","_stash2","_stashData","_stashFiles","obj","__esModule","default","_defineProperty","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","t","i","_toPrimitive","String","r","e","Symbol","toPrimitive","call","TypeError","Number","StashMain","constructor","workspace","checkout","snapping","stashFiles","StashFiles","save","options","compIds","pattern","idsByPattern","listIds","comps","getMany","modifiedComps","compact","Promise","all","map","comp","head","undefined","isModified","length","consumeComponents","state","_consumer","_addFlattenedDependenciesToComponents","hashPerId","versionObj","addComponentDataToRepo","id","hash","scope","legacyScope","objects","persist","stashData","StashData","message","saveStashData","modifiedCompIds","c","ids","skipNpmInstall","reset","loadLatest","stashFile","getLatestStashFile","BitError","getStashData","stashCompsData","versionPerId","changeVersion","toString","skipUpdatingBitmap","deleteStashFile","component","consumerComponent","clone","setNewVersion","version","files","sources","consumerComponentToVersion","repo","add","forEach","file","provider","cli","stashMain","stashCmd","StashCmd","commands","StashSaveCmd","StashLoadCmd","register","exports","CLIAspect","WorkspaceAspect","CheckoutAspect","SnappingAspect","MainRuntime","StashAspect","addRuntime","_default"],"sources":["stash.main.runtime.ts"],"sourcesContent":["import WorkspaceAspect, { Workspace } from '@teambit/workspace';\nimport SnappingAspect, { SnappingMain } from '@teambit/snapping';\nimport { Component, ComponentID } from '@teambit/component';\nimport { BitError } from '@teambit/bit-error';\nimport ConsumerComponent from '@teambit/legacy/dist/consumer/component';\nimport { compact } from 'lodash';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport CheckoutAspect, { CheckoutMain } from '@teambit/checkout';\nimport { StashAspect } from './stash.aspect';\nimport { StashCmd, StashLoadCmd, StashSaveCmd } from './stash.cmd';\nimport { StashData } from './stash-data';\nimport { StashFiles } from './stash-files';\n\nexport class StashMain {\n private stashFiles: StashFiles;\n constructor(private workspace: Workspace, private checkout: CheckoutMain, private snapping: SnappingMain) {\n this.stashFiles = new StashFiles(workspace);\n }\n\n async save(options: { message?: string; pattern?: string }): Promise<ComponentID[]> {\n const compIds = options?.pattern\n ? await this.workspace.idsByPattern(options?.pattern)\n : await this.workspace.listIds();\n const comps = await this.workspace.getMany(compIds);\n const modifiedComps = compact(\n await Promise.all(\n comps.map(async (comp) => {\n if (!comp.head) return undefined; // it's new\n const isModified = await this.workspace.isModified(comp);\n if (isModified) return comp;\n return undefined;\n })\n )\n );\n if (!modifiedComps.length) return [];\n\n // per comp: create Version object, save it in the local scope and return the hash. don't save anything in the .bitmap\n const consumeComponents = modifiedComps.map((comp) => comp.state._consumer);\n await this.snapping._addFlattenedDependenciesToComponents(consumeComponents);\n const hashPerId = await Promise.all(\n modifiedComps.map(async (comp) => {\n const versionObj = await this.addComponentDataToRepo(comp);\n return { id: comp.id, hash: versionObj.hash() };\n })\n );\n await this.workspace.scope.legacyScope.objects.persist();\n const stashData = new StashData({ message: options?.message }, hashPerId);\n await this.stashFiles.saveStashData(stashData);\n\n // reset all modified components\n const modifiedCompIds = modifiedComps.map((c) => c.id);\n await this.checkout.checkout({\n ids: modifiedCompIds,\n skipNpmInstall: true,\n reset: true,\n });\n\n return modifiedCompIds;\n }\n\n async loadLatest() {\n const stashFile = await this.stashFiles.getLatestStashFile();\n if (!stashFile) {\n throw new BitError('no stashed components found');\n }\n const stashData = await this.stashFiles.getStashData(stashFile);\n const compIds = stashData.stashCompsData.map((c) => c.id);\n const versionPerId = stashData.stashCompsData.map((c) => c.id.changeVersion(c.hash.toString()));\n\n await this.checkout.checkout({\n ids: compIds,\n skipNpmInstall: true,\n versionPerId,\n skipUpdatingBitmap: true,\n });\n\n await this.stashFiles.deleteStashFile(stashFile);\n\n return compIds;\n }\n\n private async addComponentDataToRepo(component: Component) {\n const consumerComponent = component.state._consumer.clone() as ConsumerComponent;\n consumerComponent.setNewVersion();\n const { version, files } = await this.workspace.scope.legacyScope.sources.consumerComponentToVersion(\n consumerComponent\n );\n const repo = this.workspace.scope.legacyScope.objects;\n repo.add(version);\n files.forEach((file) => repo.add(file.file));\n return version;\n }\n\n static slots = [];\n static dependencies = [CLIAspect, WorkspaceAspect, CheckoutAspect, SnappingAspect];\n static runtime = MainRuntime;\n static async provider([cli, workspace, checkout, snapping]: [CLIMain, Workspace, CheckoutMain, SnappingMain]) {\n const stashMain = new StashMain(workspace, checkout, snapping);\n const stashCmd = new StashCmd(stashMain);\n stashCmd.commands = [new StashSaveCmd(stashMain), new StashLoadCmd(stashMain)];\n cli.register(stashCmd);\n return stashMain;\n }\n}\n\nStashAspect.addRuntime(StashMain);\n\nexport default StashMain;\n"],"mappings":"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"}
|
package/index.ts
ADDED
package/package.json
CHANGED
|
@@ -1,43 +1,37 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/stash",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.108",
|
|
4
4
|
"homepage": "https://bit.cloud/teambit/component/stash",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.component",
|
|
8
8
|
"name": "stash",
|
|
9
|
-
"version": "1.0.
|
|
9
|
+
"version": "1.0.108"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"fs-extra": "10.0.0",
|
|
13
13
|
"globby": "11.0.1",
|
|
14
14
|
"chalk": "2.4.2",
|
|
15
15
|
"lodash": "4.17.21",
|
|
16
|
-
"core-js": "^3.0.0",
|
|
17
|
-
"@babel/runtime": "7.20.0",
|
|
18
16
|
"@teambit/component-id": "1.2.0",
|
|
19
17
|
"@teambit/harmony": "0.4.6",
|
|
20
18
|
"@teambit/bit-error": "0.0.404",
|
|
21
|
-
"@teambit/workspace": "1.0.
|
|
22
|
-
"@teambit/cli": "0.0.
|
|
23
|
-
"@teambit/checkout": "1.0.
|
|
24
|
-
"@teambit/component": "1.0.
|
|
25
|
-
"@teambit/snapping": "1.0.
|
|
19
|
+
"@teambit/workspace": "1.0.108",
|
|
20
|
+
"@teambit/cli": "0.0.840",
|
|
21
|
+
"@teambit/checkout": "1.0.108",
|
|
22
|
+
"@teambit/component": "1.0.108",
|
|
23
|
+
"@teambit/snapping": "1.0.108"
|
|
26
24
|
},
|
|
27
25
|
"devDependencies": {
|
|
28
26
|
"@types/fs-extra": "9.0.7",
|
|
29
27
|
"@types/lodash": "4.14.165",
|
|
30
28
|
"@types/mocha": "9.1.0",
|
|
31
|
-
"@types/
|
|
32
|
-
"@types/
|
|
33
|
-
"@
|
|
34
|
-
"@types/jest": "^26.0.0",
|
|
35
|
-
"@types/testing-library__jest-dom": "5.9.5"
|
|
29
|
+
"@types/jest": "^29.2.2",
|
|
30
|
+
"@types/testing-library__jest-dom": "^5.9.5",
|
|
31
|
+
"@teambit/harmony.envs.core-aspect-env": "0.0.13"
|
|
36
32
|
},
|
|
37
33
|
"peerDependencies": {
|
|
38
|
-
"@teambit/legacy": "1.0.624"
|
|
39
|
-
"react": "^16.8.0 || ^17.0.0",
|
|
40
|
-
"react-dom": "^16.8.0 || ^17.0.0"
|
|
34
|
+
"@teambit/legacy": "1.0.624"
|
|
41
35
|
},
|
|
42
36
|
"license": "Apache-2.0",
|
|
43
37
|
"optionalDependencies": {},
|
|
@@ -51,7 +45,7 @@
|
|
|
51
45
|
},
|
|
52
46
|
"private": false,
|
|
53
47
|
"engines": {
|
|
54
|
-
"node": ">=
|
|
48
|
+
"node": ">=16.0.0"
|
|
55
49
|
},
|
|
56
50
|
"repository": {
|
|
57
51
|
"type": "git",
|
|
@@ -60,12 +54,9 @@
|
|
|
60
54
|
"keywords": [
|
|
61
55
|
"bit",
|
|
62
56
|
"bit-aspect",
|
|
57
|
+
"bit-core-aspect",
|
|
63
58
|
"components",
|
|
64
59
|
"collaboration",
|
|
65
|
-
"web"
|
|
66
|
-
"react",
|
|
67
|
-
"react-components",
|
|
68
|
-
"angular",
|
|
69
|
-
"angular-components"
|
|
60
|
+
"web"
|
|
70
61
|
]
|
|
71
62
|
}
|
package/stash-data.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ComponentID } from '@teambit/component-id';
|
|
2
|
+
import { Ref } from '@teambit/legacy/dist/scope/objects';
|
|
3
|
+
import { Workspace } from '@teambit/workspace';
|
|
4
|
+
|
|
5
|
+
export type StashCompData = { id: ComponentID; hash: Ref };
|
|
6
|
+
export type StashMetadata = { message?: string };
|
|
7
|
+
|
|
8
|
+
export class StashData {
|
|
9
|
+
constructor(readonly metadata: StashMetadata, readonly stashCompsData: StashCompData[]) {}
|
|
10
|
+
|
|
11
|
+
toObject() {
|
|
12
|
+
return {
|
|
13
|
+
metadata: this.metadata,
|
|
14
|
+
stashCompsData: this.stashCompsData.map(({ id, hash }) => ({
|
|
15
|
+
// id: { scope: id.scope, name: id.fullName },
|
|
16
|
+
id: id.changeVersion(undefined).toObject(),
|
|
17
|
+
hash: hash.toString(),
|
|
18
|
+
})),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static async fromObject(obj: Record<string, any>, workspace: Workspace): Promise<StashData> {
|
|
23
|
+
const stashCompsData = await Promise.all(
|
|
24
|
+
obj.stashCompsData.map(async (compData) => {
|
|
25
|
+
const id = ComponentID.fromObject(compData.id);
|
|
26
|
+
const resolved = await workspace.resolveComponentId(id);
|
|
27
|
+
return {
|
|
28
|
+
id: resolved,
|
|
29
|
+
hash: Ref.from(compData.hash),
|
|
30
|
+
};
|
|
31
|
+
})
|
|
32
|
+
);
|
|
33
|
+
return new StashData(obj.metadata, stashCompsData);
|
|
34
|
+
}
|
|
35
|
+
}
|
package/stash-files.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Workspace } from '@teambit/workspace';
|
|
2
|
+
import globby from 'globby';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import fs from 'fs-extra';
|
|
5
|
+
import { StashData } from './stash-data';
|
|
6
|
+
|
|
7
|
+
const STASH_DIR = 'stash';
|
|
8
|
+
const STASH_FILE_PREFIX = 'stash';
|
|
9
|
+
|
|
10
|
+
export class StashFiles {
|
|
11
|
+
constructor(private workspace: Workspace) {}
|
|
12
|
+
|
|
13
|
+
getPath() {
|
|
14
|
+
return path.join(this.workspace.scope.path, STASH_DIR);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async getStashFiles(): Promise<string[]> {
|
|
18
|
+
const stashPath = this.getPath();
|
|
19
|
+
const files = await globby(`${STASH_FILE_PREFIX}-*`, { cwd: stashPath });
|
|
20
|
+
return files;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async getLatestStashFile(): Promise<string | undefined> {
|
|
24
|
+
const files = await this.getStashFiles();
|
|
25
|
+
const latest = files.sort().pop();
|
|
26
|
+
return latest;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async getNextStashFileName(): Promise<string> {
|
|
30
|
+
const latest = await this.getLatestStashFile();
|
|
31
|
+
const latestIndex = latest ? parseInt(latest.split('-')[1]) : 0;
|
|
32
|
+
return `${STASH_FILE_PREFIX}-${latestIndex + 1}.json`;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
async deleteStashFile(filename: string) {
|
|
36
|
+
await fs.remove(path.join(this.getPath(), filename));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async saveStashData(stashData: StashData) {
|
|
40
|
+
const nextStashFile = await this.getNextStashFileName();
|
|
41
|
+
const stashPath = this.getPath();
|
|
42
|
+
const filePath = path.join(stashPath, nextStashFile);
|
|
43
|
+
await fs.outputFile(filePath, JSON.stringify(stashData.toObject(), undefined, 4));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async getStashData(filename: string): Promise<StashData> {
|
|
47
|
+
const stashPath = this.getPath();
|
|
48
|
+
const filePath = path.join(stashPath, filename);
|
|
49
|
+
const content = await fs.readFile(filePath, 'utf8');
|
|
50
|
+
const data = JSON.parse(content);
|
|
51
|
+
return StashData.fromObject(data, this.workspace);
|
|
52
|
+
}
|
|
53
|
+
}
|
package/stash.aspect.ts
ADDED
package/stash.cmd.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// eslint-disable-next-line max-classes-per-file
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { Command, CommandOptions } from '@teambit/cli';
|
|
4
|
+
import { COMPONENT_PATTERN_HELP } from '@teambit/legacy/dist/constants';
|
|
5
|
+
import { StashMain } from './stash.main.runtime';
|
|
6
|
+
|
|
7
|
+
export class StashSaveCmd implements Command {
|
|
8
|
+
name = 'save';
|
|
9
|
+
description = 'stash modified components';
|
|
10
|
+
group = 'development';
|
|
11
|
+
options = [
|
|
12
|
+
['p', 'pattern', COMPONENT_PATTERN_HELP],
|
|
13
|
+
['m', 'message <string>', 'message to be attached to the stashed components'],
|
|
14
|
+
] as CommandOptions;
|
|
15
|
+
loader = true;
|
|
16
|
+
|
|
17
|
+
constructor(private stash: StashMain) {}
|
|
18
|
+
|
|
19
|
+
async report(
|
|
20
|
+
_arg: any,
|
|
21
|
+
{
|
|
22
|
+
pattern,
|
|
23
|
+
message,
|
|
24
|
+
}: {
|
|
25
|
+
pattern?: string;
|
|
26
|
+
message?: string;
|
|
27
|
+
}
|
|
28
|
+
) {
|
|
29
|
+
const compIds = await this.stash.save({ pattern, message });
|
|
30
|
+
return chalk.green(`stashed ${compIds.length} components`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export class StashLoadCmd implements Command {
|
|
35
|
+
name = 'load';
|
|
36
|
+
description = 'load latest stash, checkout components and delete stash';
|
|
37
|
+
group = 'development';
|
|
38
|
+
options = [] as CommandOptions;
|
|
39
|
+
loader = true;
|
|
40
|
+
|
|
41
|
+
constructor(private stash: StashMain) {}
|
|
42
|
+
|
|
43
|
+
async report() {
|
|
44
|
+
const compIds = await this.stash.loadLatest();
|
|
45
|
+
return chalk.green(`checked out ${compIds.length} components according to the latest stash`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export class StashCmd implements Command {
|
|
50
|
+
name = 'stash [sub-command]';
|
|
51
|
+
description = 'EXPERIMENTAL (more like a POC). stash modified components';
|
|
52
|
+
group = 'development';
|
|
53
|
+
private = true; // too early to make it public. it's still in a POC mode.
|
|
54
|
+
options = [
|
|
55
|
+
['p', 'pattern', COMPONENT_PATTERN_HELP],
|
|
56
|
+
['m', 'message <string>', 'message to be attached to the stashed components'],
|
|
57
|
+
] as CommandOptions;
|
|
58
|
+
loader = true;
|
|
59
|
+
commands: Command[] = [];
|
|
60
|
+
|
|
61
|
+
constructor(private stash: StashMain) {}
|
|
62
|
+
|
|
63
|
+
async report(
|
|
64
|
+
_arg: any,
|
|
65
|
+
{
|
|
66
|
+
pattern,
|
|
67
|
+
message,
|
|
68
|
+
}: {
|
|
69
|
+
pattern?: string;
|
|
70
|
+
message?: string;
|
|
71
|
+
}
|
|
72
|
+
) {
|
|
73
|
+
return new StashSaveCmd(this.stash).report(undefined, { pattern, message });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import WorkspaceAspect, { Workspace } from '@teambit/workspace';
|
|
2
|
+
import SnappingAspect, { SnappingMain } from '@teambit/snapping';
|
|
3
|
+
import { Component, ComponentID } from '@teambit/component';
|
|
4
|
+
import { BitError } from '@teambit/bit-error';
|
|
5
|
+
import ConsumerComponent from '@teambit/legacy/dist/consumer/component';
|
|
6
|
+
import { compact } from 'lodash';
|
|
7
|
+
import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';
|
|
8
|
+
import CheckoutAspect, { CheckoutMain } from '@teambit/checkout';
|
|
9
|
+
import { StashAspect } from './stash.aspect';
|
|
10
|
+
import { StashCmd, StashLoadCmd, StashSaveCmd } from './stash.cmd';
|
|
11
|
+
import { StashData } from './stash-data';
|
|
12
|
+
import { StashFiles } from './stash-files';
|
|
13
|
+
|
|
14
|
+
export class StashMain {
|
|
15
|
+
private stashFiles: StashFiles;
|
|
16
|
+
constructor(private workspace: Workspace, private checkout: CheckoutMain, private snapping: SnappingMain) {
|
|
17
|
+
this.stashFiles = new StashFiles(workspace);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async save(options: { message?: string; pattern?: string }): Promise<ComponentID[]> {
|
|
21
|
+
const compIds = options?.pattern
|
|
22
|
+
? await this.workspace.idsByPattern(options?.pattern)
|
|
23
|
+
: await this.workspace.listIds();
|
|
24
|
+
const comps = await this.workspace.getMany(compIds);
|
|
25
|
+
const modifiedComps = compact(
|
|
26
|
+
await Promise.all(
|
|
27
|
+
comps.map(async (comp) => {
|
|
28
|
+
if (!comp.head) return undefined; // it's new
|
|
29
|
+
const isModified = await this.workspace.isModified(comp);
|
|
30
|
+
if (isModified) return comp;
|
|
31
|
+
return undefined;
|
|
32
|
+
})
|
|
33
|
+
)
|
|
34
|
+
);
|
|
35
|
+
if (!modifiedComps.length) return [];
|
|
36
|
+
|
|
37
|
+
// per comp: create Version object, save it in the local scope and return the hash. don't save anything in the .bitmap
|
|
38
|
+
const consumeComponents = modifiedComps.map((comp) => comp.state._consumer);
|
|
39
|
+
await this.snapping._addFlattenedDependenciesToComponents(consumeComponents);
|
|
40
|
+
const hashPerId = await Promise.all(
|
|
41
|
+
modifiedComps.map(async (comp) => {
|
|
42
|
+
const versionObj = await this.addComponentDataToRepo(comp);
|
|
43
|
+
return { id: comp.id, hash: versionObj.hash() };
|
|
44
|
+
})
|
|
45
|
+
);
|
|
46
|
+
await this.workspace.scope.legacyScope.objects.persist();
|
|
47
|
+
const stashData = new StashData({ message: options?.message }, hashPerId);
|
|
48
|
+
await this.stashFiles.saveStashData(stashData);
|
|
49
|
+
|
|
50
|
+
// reset all modified components
|
|
51
|
+
const modifiedCompIds = modifiedComps.map((c) => c.id);
|
|
52
|
+
await this.checkout.checkout({
|
|
53
|
+
ids: modifiedCompIds,
|
|
54
|
+
skipNpmInstall: true,
|
|
55
|
+
reset: true,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
return modifiedCompIds;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async loadLatest() {
|
|
62
|
+
const stashFile = await this.stashFiles.getLatestStashFile();
|
|
63
|
+
if (!stashFile) {
|
|
64
|
+
throw new BitError('no stashed components found');
|
|
65
|
+
}
|
|
66
|
+
const stashData = await this.stashFiles.getStashData(stashFile);
|
|
67
|
+
const compIds = stashData.stashCompsData.map((c) => c.id);
|
|
68
|
+
const versionPerId = stashData.stashCompsData.map((c) => c.id.changeVersion(c.hash.toString()));
|
|
69
|
+
|
|
70
|
+
await this.checkout.checkout({
|
|
71
|
+
ids: compIds,
|
|
72
|
+
skipNpmInstall: true,
|
|
73
|
+
versionPerId,
|
|
74
|
+
skipUpdatingBitmap: true,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
await this.stashFiles.deleteStashFile(stashFile);
|
|
78
|
+
|
|
79
|
+
return compIds;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
private async addComponentDataToRepo(component: Component) {
|
|
83
|
+
const consumerComponent = component.state._consumer.clone() as ConsumerComponent;
|
|
84
|
+
consumerComponent.setNewVersion();
|
|
85
|
+
const { version, files } = await this.workspace.scope.legacyScope.sources.consumerComponentToVersion(
|
|
86
|
+
consumerComponent
|
|
87
|
+
);
|
|
88
|
+
const repo = this.workspace.scope.legacyScope.objects;
|
|
89
|
+
repo.add(version);
|
|
90
|
+
files.forEach((file) => repo.add(file.file));
|
|
91
|
+
return version;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
static slots = [];
|
|
95
|
+
static dependencies = [CLIAspect, WorkspaceAspect, CheckoutAspect, SnappingAspect];
|
|
96
|
+
static runtime = MainRuntime;
|
|
97
|
+
static async provider([cli, workspace, checkout, snapping]: [CLIMain, Workspace, CheckoutMain, SnappingMain]) {
|
|
98
|
+
const stashMain = new StashMain(workspace, checkout, snapping);
|
|
99
|
+
const stashCmd = new StashCmd(stashMain);
|
|
100
|
+
stashCmd.commands = [new StashSaveCmd(stashMain), new StashLoadCmd(stashMain)];
|
|
101
|
+
cli.register(stashCmd);
|
|
102
|
+
return stashMain;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
StashAspect.addRuntime(StashMain);
|
|
107
|
+
|
|
108
|
+
export default StashMain;
|
package/tsconfig.json
CHANGED
|
@@ -1,38 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
3
|
"lib": [
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"DOM.Iterable",
|
|
8
|
-
"ScriptHost"
|
|
4
|
+
"esnext",
|
|
5
|
+
"dom",
|
|
6
|
+
"dom.Iterable"
|
|
9
7
|
],
|
|
10
|
-
"target": "
|
|
11
|
-
"module": "
|
|
12
|
-
"jsx": "react",
|
|
13
|
-
"allowJs": true,
|
|
14
|
-
"composite": true,
|
|
8
|
+
"target": "es2020",
|
|
9
|
+
"module": "es2020",
|
|
10
|
+
"jsx": "react-jsx",
|
|
15
11
|
"declaration": true,
|
|
16
12
|
"sourceMap": true,
|
|
17
|
-
"skipLibCheck": true,
|
|
18
13
|
"experimentalDecorators": true,
|
|
19
|
-
"
|
|
14
|
+
"skipLibCheck": true,
|
|
20
15
|
"moduleResolution": "node",
|
|
21
16
|
"esModuleInterop": true,
|
|
22
|
-
"rootDir": ".",
|
|
23
17
|
"resolveJsonModule": true,
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"strictPropertyInitialization": false,
|
|
28
|
-
"strict": true,
|
|
29
|
-
"noImplicitAny": false,
|
|
30
|
-
"preserveConstEnums": true
|
|
18
|
+
"allowJs": true,
|
|
19
|
+
"outDir": "dist",
|
|
20
|
+
"emitDeclarationOnly": true
|
|
31
21
|
},
|
|
32
22
|
"exclude": [
|
|
23
|
+
"artifacts",
|
|
24
|
+
"public",
|
|
33
25
|
"dist",
|
|
26
|
+
"node_modules",
|
|
27
|
+
"package.json",
|
|
34
28
|
"esm.mjs",
|
|
35
|
-
"
|
|
29
|
+
"**/*.cjs",
|
|
30
|
+
"./dist"
|
|
36
31
|
],
|
|
37
32
|
"include": [
|
|
38
33
|
"**/*",
|
package/types/asset.d.ts
CHANGED
|
@@ -5,12 +5,12 @@ declare module '*.png' {
|
|
|
5
5
|
declare module '*.svg' {
|
|
6
6
|
import type { FunctionComponent, SVGProps } from 'react';
|
|
7
7
|
|
|
8
|
-
export const ReactComponent: FunctionComponent<
|
|
8
|
+
export const ReactComponent: FunctionComponent<
|
|
9
|
+
SVGProps<SVGSVGElement> & { title?: string }
|
|
10
|
+
>;
|
|
9
11
|
const src: string;
|
|
10
12
|
export default src;
|
|
11
13
|
}
|
|
12
|
-
|
|
13
|
-
// @TODO Gilad
|
|
14
14
|
declare module '*.jpg' {
|
|
15
15
|
const value: any;
|
|
16
16
|
export = value;
|
|
@@ -27,3 +27,15 @@ declare module '*.bmp' {
|
|
|
27
27
|
const value: any;
|
|
28
28
|
export = value;
|
|
29
29
|
}
|
|
30
|
+
declare module '*.otf' {
|
|
31
|
+
const value: any;
|
|
32
|
+
export = value;
|
|
33
|
+
}
|
|
34
|
+
declare module '*.woff' {
|
|
35
|
+
const value: any;
|
|
36
|
+
export = value;
|
|
37
|
+
}
|
|
38
|
+
declare module '*.woff2' {
|
|
39
|
+
const value: any;
|
|
40
|
+
export = value;
|
|
41
|
+
}
|
|
File without changes
|