@teambit/refactoring 0.0.10 → 0.0.11

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/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import { RefactoringAspect } from './refactoring.aspect';
2
- export type { RefactoringMain } from './refactoring.main.runtime';
2
+ export type { RefactoringMain, MultipleStringsReplacement } from './refactoring.main.runtime';
3
3
  export default RefactoringAspect;
4
4
  export { RefactoringAspect };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["RefactoringAspect"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;eAGeA,gC","sourcesContent":["import { RefactoringAspect } from './refactoring.aspect';\n\nexport type { RefactoringMain } from './refactoring.main.runtime';\nexport default RefactoringAspect;\nexport { RefactoringAspect };\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":["RefactoringAspect"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;eAGeA,gC","sourcesContent":["import { RefactoringAspect } from './refactoring.aspect';\n\nexport type { RefactoringMain, MultipleStringsReplacement } from './refactoring.main.runtime';\nexport default RefactoringAspect;\nexport { RefactoringAspect };\n"]}
@@ -1,6 +1,10 @@
1
1
  import { CLIMain } from '@teambit/cli';
2
2
  import { Component, ComponentID, ComponentMain } from '@teambit/component';
3
3
  import { PkgMain } from '@teambit/pkg';
4
+ export declare type MultipleStringsReplacement = Array<{
5
+ oldStr: string;
6
+ newStr: string;
7
+ }>;
4
8
  export declare class RefactoringMain {
5
9
  private componentMain;
6
10
  private pkg;
@@ -15,10 +19,18 @@ export declare class RefactoringMain {
15
19
  newPackageName: string;
16
20
  changedComponents: Component[];
17
21
  }>;
22
+ /**
23
+ * rename multiple packages dependencies.
24
+ * this method changes the source code of the component, but doesn't write to the filesystem.
25
+ */
26
+ renameMultiplePackages(components: Component[], oldAndNewPackageNames: MultipleStringsReplacement): Promise<{
27
+ changedComponents: Component[];
28
+ }>;
18
29
  private getPackageNameByUnknownId;
19
30
  private getPackageNameByComponentID;
20
31
  private isValidScopedPackageName;
21
32
  private replaceString;
33
+ private replaceMultipleStrings;
22
34
  static slots: never[];
23
35
  static dependencies: import("@teambit/harmony").Aspect[];
24
36
  static runtime: import("@teambit/harmony").RuntimeDefinition;
@@ -141,6 +141,21 @@ class RefactoringMain {
141
141
  changedComponents: (0, _lodash().compact)(changedComponents)
142
142
  };
143
143
  }
144
+ /**
145
+ * rename multiple packages dependencies.
146
+ * this method changes the source code of the component, but doesn't write to the filesystem.
147
+ */
148
+
149
+
150
+ async renameMultiplePackages(components, oldAndNewPackageNames) {
151
+ const changedComponents = await Promise.all(components.map(async comp => {
152
+ const hasChanged = await this.replaceMultipleStrings(comp, oldAndNewPackageNames);
153
+ return hasChanged ? comp : null;
154
+ }));
155
+ return {
156
+ changedComponents: (0, _lodash().compact)(changedComponents)
157
+ };
158
+ }
144
159
 
145
160
  async getPackageNameByUnknownId(id) {
146
161
  if (id instanceof _component().ComponentID) {
@@ -193,6 +208,30 @@ class RefactoringMain {
193
208
  return changed.some(c => c);
194
209
  }
195
210
 
211
+ async replaceMultipleStrings(comp, stringsToReplace) {
212
+ const changed = await Promise.all(comp.filesystem.files.map(async file => {
213
+ const isBinary = await (0, _isbinaryfile().isBinaryFile)(file.contents);
214
+ if (isBinary) return false;
215
+ const strContent = file.contents.toString();
216
+ let newContent = strContent;
217
+ stringsToReplace.forEach(({
218
+ oldStr,
219
+ newStr
220
+ }) => {
221
+ const oldStringRegex = new RegExp(oldStr, 'g');
222
+ newContent = strContent.replace(oldStringRegex, newStr);
223
+ });
224
+
225
+ if (strContent !== newContent) {
226
+ file.contents = Buffer.from(newContent);
227
+ return true;
228
+ }
229
+
230
+ return false;
231
+ }));
232
+ return changed.some(c => c);
233
+ }
234
+
196
235
  static async provider([componentMain, pkg, cli]) {
197
236
  const refactoringMain = new RefactoringMain(componentMain, pkg);
198
237
  const subCommands = [new (_refactor().DependencyNameRefactorCmd)(refactoringMain, componentMain)];
@@ -1 +1 @@
1
- {"version":3,"sources":["refactoring.main.runtime.ts"],"names":["RefactoringMain","constructor","componentMain","pkg","refactorDependencyName","components","oldId","newId","oldPackageName","getPackageNameByUnknownId","newPackageName","BitError","changedComponents","Promise","all","map","comp","hasChanged","replaceString","id","ComponentID","getPackageNameByComponentID","Error","host","getHost","componentID","resolveComponentId","err","isValidScopedPackageName","get","toString","getPackageName","name","startsWith","includes","length","oldString","newString","changed","filesystem","files","file","isBinary","contents","strContent","oldStringRegex","RegExp","newContent","replace","Buffer","from","some","c","provider","cli","refactoringMain","subCommands","DependencyNameRefactorCmd","refactorCmd","RefactorCmd","commands","register","ComponentAspect","PkgAspect","CLIAspect","MainRuntime","RefactoringAspect","addRuntime"],"mappings":"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","sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { isBinaryFile } from 'isbinaryfile';\nimport { compact } from 'lodash';\nimport ComponentAspect, { Component, ComponentID, ComponentMain } from '@teambit/component';\nimport { BitError } from '@teambit/bit-error';\nimport PkgAspect, { PkgMain } from '@teambit/pkg';\nimport { RefactoringAspect } from './refactoring.aspect';\nimport { DependencyNameRefactorCmd, RefactorCmd } from './refactor.cmd';\n\nexport class RefactoringMain {\n constructor(private componentMain: ComponentMain, private pkg: PkgMain) {}\n\n /**\n * refactor the dependency name of a component.\n * oldId and newId can be either a component-id or a package-name.\n * this method changes the source code of the component, but doesn't write to the filesystem.\n */\n async refactorDependencyName(\n components: Component[],\n oldId: ComponentID | string,\n newId: ComponentID | string\n ): Promise<{ oldPackageName: string; newPackageName: string; changedComponents: Component[] }> {\n const oldPackageName = await this.getPackageNameByUnknownId(oldId);\n const newPackageName = await this.getPackageNameByUnknownId(newId);\n if (oldPackageName === newPackageName) {\n throw new BitError(`refactoring: the old package-name and the new package-name are the same: ${oldPackageName}`);\n }\n const changedComponents = await Promise.all(\n components.map(async (comp) => {\n const hasChanged = await this.replaceString(comp, oldPackageName, newPackageName);\n return hasChanged ? comp : null;\n })\n );\n return { oldPackageName, newPackageName, changedComponents: compact(changedComponents) };\n }\n\n private async getPackageNameByUnknownId(id: ComponentID | string): Promise<string> {\n if (id instanceof ComponentID) {\n return this.getPackageNameByComponentID(id);\n }\n if (typeof id !== 'string') {\n throw new Error(`getPackageNameByUnknownId expects id to be either string or ComponentID, got ${typeof id}`);\n }\n try {\n const host = this.componentMain.getHost();\n const componentID = await host.resolveComponentId(id);\n return await this.getPackageNameByComponentID(componentID);\n } catch (err) {\n if (this.isValidScopedPackageName(id)) {\n return id; // assume this is a package-name\n }\n throw new BitError(\n `refactoring: the id \"${id}\" is neither a valid scoped-package-name nor an existing component-id`\n );\n }\n }\n\n private async getPackageNameByComponentID(id: ComponentID) {\n const host = this.componentMain.getHost();\n const comp = await host.get(id);\n if (!comp) throw new Error(`unable to find a component: \"${id.toString()}\"`);\n return this.pkg.getPackageName(comp);\n }\n\n private isValidScopedPackageName(name: string) {\n return (\n name.startsWith('@') && name.includes('/') && name.length <= 214 && !name.includes('\\\\') && !name.includes('..')\n );\n }\n\n private async replaceString(comp: Component, oldString: string, newString: string): Promise<boolean> {\n const changed = await Promise.all(\n comp.filesystem.files.map(async (file) => {\n const isBinary = await isBinaryFile(file.contents);\n if (isBinary) return false;\n const strContent = file.contents.toString();\n if (strContent.includes(oldString)) {\n const oldStringRegex = new RegExp(oldString, 'g');\n const newContent = strContent.replace(oldStringRegex, newString);\n file.contents = Buffer.from(newContent);\n return true;\n }\n return false;\n })\n );\n return changed.some((c) => c);\n }\n\n static slots = [];\n static dependencies = [ComponentAspect, PkgAspect, CLIAspect];\n static runtime = MainRuntime;\n static async provider([componentMain, pkg, cli]: [ComponentMain, PkgMain, CLIMain]) {\n const refactoringMain = new RefactoringMain(componentMain, pkg);\n const subCommands = [new DependencyNameRefactorCmd(refactoringMain, componentMain)];\n const refactorCmd = new RefactorCmd();\n refactorCmd.commands = subCommands;\n cli.register(refactorCmd);\n return refactoringMain;\n }\n}\n\nRefactoringAspect.addRuntime(RefactoringMain);\n"]}
1
+ {"version":3,"sources":["refactoring.main.runtime.ts"],"names":["RefactoringMain","constructor","componentMain","pkg","refactorDependencyName","components","oldId","newId","oldPackageName","getPackageNameByUnknownId","newPackageName","BitError","changedComponents","Promise","all","map","comp","hasChanged","replaceString","renameMultiplePackages","oldAndNewPackageNames","replaceMultipleStrings","id","ComponentID","getPackageNameByComponentID","Error","host","getHost","componentID","resolveComponentId","err","isValidScopedPackageName","get","toString","getPackageName","name","startsWith","includes","length","oldString","newString","changed","filesystem","files","file","isBinary","contents","strContent","oldStringRegex","RegExp","newContent","replace","Buffer","from","some","c","stringsToReplace","forEach","oldStr","newStr","provider","cli","refactoringMain","subCommands","DependencyNameRefactorCmd","refactorCmd","RefactorCmd","commands","register","ComponentAspect","PkgAspect","CLIAspect","MainRuntime","RefactoringAspect","addRuntime"],"mappings":"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","sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { isBinaryFile } from 'isbinaryfile';\nimport { compact } from 'lodash';\nimport ComponentAspect, { Component, ComponentID, ComponentMain } from '@teambit/component';\nimport { BitError } from '@teambit/bit-error';\nimport PkgAspect, { PkgMain } from '@teambit/pkg';\nimport { RefactoringAspect } from './refactoring.aspect';\nimport { DependencyNameRefactorCmd, RefactorCmd } from './refactor.cmd';\n\nexport type MultipleStringsReplacement = Array<{ oldStr: string; newStr: string }>;\n\nexport class RefactoringMain {\n constructor(private componentMain: ComponentMain, private pkg: PkgMain) {}\n\n /**\n * refactor the dependency name of a component.\n * oldId and newId can be either a component-id or a package-name.\n * this method changes the source code of the component, but doesn't write to the filesystem.\n */\n async refactorDependencyName(\n components: Component[],\n oldId: ComponentID | string,\n newId: ComponentID | string\n ): Promise<{ oldPackageName: string; newPackageName: string; changedComponents: Component[] }> {\n const oldPackageName = await this.getPackageNameByUnknownId(oldId);\n const newPackageName = await this.getPackageNameByUnknownId(newId);\n if (oldPackageName === newPackageName) {\n throw new BitError(`refactoring: the old package-name and the new package-name are the same: ${oldPackageName}`);\n }\n const changedComponents = await Promise.all(\n components.map(async (comp) => {\n const hasChanged = await this.replaceString(comp, oldPackageName, newPackageName);\n return hasChanged ? comp : null;\n })\n );\n return { oldPackageName, newPackageName, changedComponents: compact(changedComponents) };\n }\n\n /**\n * rename multiple packages dependencies.\n * this method changes the source code of the component, but doesn't write to the filesystem.\n */\n async renameMultiplePackages(\n components: Component[],\n oldAndNewPackageNames: MultipleStringsReplacement\n ): Promise<{\n changedComponents: Component[];\n }> {\n const changedComponents = await Promise.all(\n components.map(async (comp) => {\n const hasChanged = await this.replaceMultipleStrings(comp, oldAndNewPackageNames);\n return hasChanged ? comp : null;\n })\n );\n return { changedComponents: compact(changedComponents) };\n }\n\n private async getPackageNameByUnknownId(id: ComponentID | string): Promise<string> {\n if (id instanceof ComponentID) {\n return this.getPackageNameByComponentID(id);\n }\n if (typeof id !== 'string') {\n throw new Error(`getPackageNameByUnknownId expects id to be either string or ComponentID, got ${typeof id}`);\n }\n try {\n const host = this.componentMain.getHost();\n const componentID = await host.resolveComponentId(id);\n return await this.getPackageNameByComponentID(componentID);\n } catch (err) {\n if (this.isValidScopedPackageName(id)) {\n return id; // assume this is a package-name\n }\n throw new BitError(\n `refactoring: the id \"${id}\" is neither a valid scoped-package-name nor an existing component-id`\n );\n }\n }\n\n private async getPackageNameByComponentID(id: ComponentID) {\n const host = this.componentMain.getHost();\n const comp = await host.get(id);\n if (!comp) throw new Error(`unable to find a component: \"${id.toString()}\"`);\n return this.pkg.getPackageName(comp);\n }\n\n private isValidScopedPackageName(name: string) {\n return (\n name.startsWith('@') && name.includes('/') && name.length <= 214 && !name.includes('\\\\') && !name.includes('..')\n );\n }\n\n private async replaceString(comp: Component, oldString: string, newString: string): Promise<boolean> {\n const changed = await Promise.all(\n comp.filesystem.files.map(async (file) => {\n const isBinary = await isBinaryFile(file.contents);\n if (isBinary) return false;\n const strContent = file.contents.toString();\n if (strContent.includes(oldString)) {\n const oldStringRegex = new RegExp(oldString, 'g');\n const newContent = strContent.replace(oldStringRegex, newString);\n file.contents = Buffer.from(newContent);\n return true;\n }\n return false;\n })\n );\n return changed.some((c) => c);\n }\n\n private async replaceMultipleStrings(\n comp: Component,\n stringsToReplace: MultipleStringsReplacement\n ): Promise<boolean> {\n const changed = await Promise.all(\n comp.filesystem.files.map(async (file) => {\n const isBinary = await isBinaryFile(file.contents);\n if (isBinary) return false;\n const strContent = file.contents.toString();\n let newContent = strContent;\n stringsToReplace.forEach(({ oldStr, newStr }) => {\n const oldStringRegex = new RegExp(oldStr, 'g');\n newContent = strContent.replace(oldStringRegex, newStr);\n });\n if (strContent !== newContent) {\n file.contents = Buffer.from(newContent);\n return true;\n }\n return false;\n })\n );\n return changed.some((c) => c);\n }\n\n static slots = [];\n static dependencies = [ComponentAspect, PkgAspect, CLIAspect];\n static runtime = MainRuntime;\n static async provider([componentMain, pkg, cli]: [ComponentMain, PkgMain, CLIMain]) {\n const refactoringMain = new RefactoringMain(componentMain, pkg);\n const subCommands = [new DependencyNameRefactorCmd(refactoringMain, componentMain)];\n const refactorCmd = new RefactorCmd();\n refactorCmd.commands = subCommands;\n cli.register(refactorCmd);\n return refactoringMain;\n }\n}\n\nRefactoringAspect.addRuntime(RefactoringMain);\n"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/refactoring",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "homepage": "https://bit.dev/teambit/component/refactoring",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.component",
8
8
  "name": "refactoring",
9
- "version": "0.0.10"
9
+ "version": "0.0.11"
10
10
  },
11
11
  "dependencies": {
12
12
  "chalk": "2.4.2",
@@ -15,10 +15,10 @@
15
15
  "@babel/runtime": "7.12.18",
16
16
  "core-js": "^3.0.0",
17
17
  "@teambit/harmony": "0.3.3",
18
- "@teambit/cli": "0.0.475",
19
- "@teambit/component": "0.0.713",
18
+ "@teambit/cli": "0.0.476",
19
+ "@teambit/component": "0.0.714",
20
20
  "@teambit/bit-error": "0.0.394",
21
- "@teambit/pkg": "0.0.713"
21
+ "@teambit/pkg": "0.0.714"
22
22
  },
23
23
  "devDependencies": {
24
24
  "@types/lodash": "4.14.165",
@@ -30,7 +30,7 @@
30
30
  "@types/node": "12.20.4"
31
31
  },
32
32
  "peerDependencies": {
33
- "@teambit/legacy": "1.0.255",
33
+ "@teambit/legacy": "1.0.256",
34
34
  "react-dom": "^16.8.0 || ^17.0.0",
35
35
  "react": "^16.8.0 || ^17.0.0"
36
36
  },
@@ -58,7 +58,7 @@
58
58
  "react": "-"
59
59
  },
60
60
  "peerDependencies": {
61
- "@teambit/legacy": "1.0.255",
61
+ "@teambit/legacy": "1.0.256",
62
62
  "react-dom": "^16.8.0 || ^17.0.0",
63
63
  "react": "^16.8.0 || ^17.0.0"
64
64
  }