@teambit/refactoring 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.
@@ -16,7 +16,7 @@ export declare class RefactorCmd implements Command {
16
16
  name: string;
17
17
  alias: string;
18
18
  description: string;
19
- options: never[];
19
+ options: any[];
20
20
  group: string;
21
21
  commands: Command[];
22
22
  report([unrecognizedSubcommand]: [string]): Promise<string>;
@@ -4,7 +4,7 @@ import { PkgMain } from '@teambit/pkg';
4
4
  import { EnvsMain } from '@teambit/envs';
5
5
  import { SourceFileTransformer } from '@teambit/typescript';
6
6
  import { PrettierMain } from '@teambit/prettier';
7
- export declare type MultipleStringsReplacement = Array<{
7
+ export type MultipleStringsReplacement = Array<{
8
8
  oldStr: string;
9
9
  newStr: string;
10
10
  }>;
@@ -47,7 +47,7 @@ export declare class RefactoringMain {
47
47
  private replacePackageNameInComponent;
48
48
  private getDefaultFormatter;
49
49
  private replaceMultipleStringsInOneComp;
50
- static slots: never[];
50
+ static slots: any[];
51
51
  static dependencies: import("@teambit/harmony").Aspect[];
52
52
  static runtime: import("@teambit/harmony").RuntimeDefinition;
53
53
  static provider([componentMain, pkg, cli, envMain, prettierMain]: [
@@ -138,7 +138,7 @@ class RefactoringMain {
138
138
  * helpful when renaming/forking an aspect/env where the component-name is used as the class-name and variable-name.
139
139
  */
140
140
  async refactorVariableAndClasses(component, sourceId, targetId, options) {
141
- if (options !== null && options !== void 0 && options.ast) {
141
+ if (options?.ast) {
142
142
  await this.refactorVariableAndClassesUsingAST(component, sourceId, targetId);
143
143
  } else {
144
144
  await this.replaceMultipleStrings([component], [{
@@ -299,7 +299,7 @@ class RefactoringMain {
299
299
  if (isBinary) return false;
300
300
  const strContent = file.contents.toString();
301
301
  let newContent = strContent;
302
- if (transformers !== null && transformers !== void 0 && transformers.length) {
302
+ if (transformers?.length) {
303
303
  const transformerFactories = transformers.map(t => t(updates));
304
304
  newContent = await (0, _typescript().transformSourceFile)(file.path, strContent, transformerFactories, undefined, updates);
305
305
  } else {
@@ -1 +1 @@
1
- {"version":3,"names":["_cli","data","require","_isbinaryfile","_camelcase","_interopRequireDefault","_lodash","_replacePackageName","_component","_interopRequireWildcard","_bitError","_pkg","_envs","_typescript","_prettier","_refactoring","_refactor","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","ownKeys","keys","getOwnPropertySymbols","o","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","key","value","_toPropertyKey","configurable","writable","_toPrimitive","String","Symbol","toPrimitive","TypeError","Number","RefactoringMain","constructor","componentMain","pkg","envs","prettierMain","refactorDependencyName","components","oldId","newId","oldPackageName","getPackageNameByUnknownId","newPackageName","BitError","changedComponents","Promise","all","map","comp","hasChanged","replacePackageNameInComponent","compact","refactorVariableAndClasses","component","sourceId","targetId","options","ast","refactorVariableAndClassesUsingAST","replaceMultipleStrings","oldStr","name","newStr","camelCase","pascalCase","importTransformer","exportTransformer","variableNamesTransformer","functionNamesTransformer","typeReferenceTransformer","typeAliasNamesTransformer","interfaceNamesTransformer","classNamesTransformer","expressionStatementTransformer","refactorFilenames","filesystem","files","file","relative","includes","updatePaths","newRelative","replace","stringsToReplace","transformers","replaceMultipleStringsInOneComp","id","ComponentID","getPackageNameByComponentID","Error","host","getHost","componentID","resolveComponentId","err","isValidScopedPackageName","toString","getPackageName","startsWith","replaceString","oldString","newString","changed","isBinary","isBinaryFile","contents","strContent","oldStringRegex","RegExp","newContent","Buffer","from","some","c","oldPkg","newPkg","newStrContent","replacePackageName","getDefaultFormatter","createFormatter","check","config","parser","trailingComma","tabWidth","singleQuote","updates","reduce","acc","transformerFactories","transformSourceFile","path","undefined","provider","cli","envMain","refactoringMain","subCommands","DependencyNameRefactorCmd","refactorCmd","RefactorCmd","commands","register","exports","ComponentAspect","PkgAspect","CLIAspect","EnvsAspect","PrettierAspect","MainRuntime","RefactoringAspect","addRuntime"],"sources":["refactoring.main.runtime.ts"],"sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { isBinaryFile } from 'isbinaryfile';\nimport camelCase from 'camelcase';\nimport { compact } from 'lodash';\nimport replacePackageName from '@teambit/legacy/dist/utils/string/replace-package-name';\nimport ComponentAspect, { Component, ComponentID, ComponentMain } from '@teambit/component';\nimport { BitError } from '@teambit/bit-error';\nimport PkgAspect, { PkgMain } from '@teambit/pkg';\nimport { EnvsAspect, EnvsMain } from '@teambit/envs';\nimport {\n SourceFileTransformer,\n classNamesTransformer,\n functionNamesTransformer,\n importTransformer,\n exportTransformer,\n interfaceNamesTransformer,\n typeAliasNamesTransformer,\n variableNamesTransformer,\n transformSourceFile,\n expressionStatementTransformer,\n typeReferenceTransformer,\n} from '@teambit/typescript';\nimport PrettierAspect, { PrettierMain } from '@teambit/prettier';\nimport { Formatter } from '@teambit/formatter';\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(\n private componentMain: ComponentMain,\n private pkg: PkgMain,\n private envs: EnvsMain,\n private prettierMain: PrettierMain\n ) {}\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.replacePackageNameInComponent(comp, oldPackageName, newPackageName);\n return hasChanged ? comp : null;\n })\n );\n return { oldPackageName, newPackageName, changedComponents: compact(changedComponents) };\n }\n\n /**\n * replaces the old-name inside the source code of the given component with the new name.\n * helpful when renaming/forking an aspect/env where the component-name is used as the class-name and variable-name.\n */\n async refactorVariableAndClasses(\n component: Component,\n sourceId: ComponentID,\n targetId: ComponentID,\n options?: { ast?: boolean }\n ) {\n if (options?.ast) {\n await this.refactorVariableAndClassesUsingAST(component, sourceId, targetId);\n } else {\n await this.replaceMultipleStrings(\n [component],\n [\n {\n oldStr: sourceId.name,\n newStr: targetId.name,\n },\n {\n oldStr: camelCase(sourceId.name),\n newStr: camelCase(targetId.name),\n },\n {\n oldStr: camelCase(sourceId.name, { pascalCase: true }),\n newStr: camelCase(targetId.name, { pascalCase: true }),\n },\n ]\n );\n }\n }\n\n async refactorVariableAndClassesUsingAST(component: Component, sourceId: ComponentID, targetId: ComponentID) {\n // transform kebabCase importPaths and PascalCase importNames\n await this.replaceMultipleStrings(\n [component],\n [\n {\n oldStr: sourceId.name,\n newStr: targetId.name,\n },\n {\n oldStr: camelCase(sourceId.name, { pascalCase: true }),\n newStr: camelCase(targetId.name, { pascalCase: true }),\n },\n ],\n [importTransformer, exportTransformer]\n );\n\n // transform camelCase variable and function names\n await this.replaceMultipleStrings(\n [component],\n [\n {\n oldStr: camelCase(sourceId.name),\n newStr: camelCase(targetId.name),\n },\n ],\n [variableNamesTransformer, functionNamesTransformer]\n );\n\n // transform PascalCase ClassNames\n await this.replaceMultipleStrings(\n [component],\n [\n {\n oldStr: camelCase(sourceId.name, { pascalCase: true }),\n newStr: camelCase(targetId.name, { pascalCase: true }),\n },\n {\n oldStr: camelCase(`${sourceId.name}Props`, { pascalCase: true }),\n newStr: camelCase(`${targetId.name}Props`, { pascalCase: true }),\n },\n ],\n [\n typeReferenceTransformer,\n typeAliasNamesTransformer,\n functionNamesTransformer,\n interfaceNamesTransformer,\n variableNamesTransformer,\n classNamesTransformer,\n expressionStatementTransformer,\n ]\n );\n }\n\n refactorFilenames(component: Component, sourceId: ComponentID, targetId: ComponentID) {\n component.filesystem.files.forEach((file) => {\n if (file.relative.includes(sourceId.name)) {\n file.updatePaths({ newRelative: file.relative.replace(sourceId.name, targetId.name) });\n }\n });\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 replaceMultipleStrings(\n components: Component[],\n stringsToReplace: MultipleStringsReplacement = [],\n transformers?: SourceFileTransformer[]\n ): Promise<{\n changedComponents: Component[];\n }> {\n const changedComponents = await Promise.all(\n components.map(async (comp) => {\n const hasChanged = await this.replaceMultipleStringsInOneComp(comp, stringsToReplace, transformers);\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 replacePackageNameInComponent(comp: Component, oldPkg: string, newPkg: 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) {\n return false;\n }\n const strContent = file.contents.toString();\n const newStrContent = replacePackageName(strContent, oldPkg, newPkg);\n if (strContent === newStrContent) {\n return false;\n }\n file.contents = Buffer.from(newStrContent);\n return true;\n })\n );\n return changed.some((c) => c);\n }\n\n private getDefaultFormatter(): Formatter {\n return this.prettierMain.createFormatter(\n { check: false },\n {\n config: {\n parser: 'typescript',\n trailingComma: 'es5',\n tabWidth: 2,\n singleQuote: true,\n },\n }\n );\n }\n\n private async replaceMultipleStringsInOneComp(\n comp: Component,\n stringsToReplace: MultipleStringsReplacement,\n transformers?: SourceFileTransformer[]\n ): Promise<boolean> {\n const updates = stringsToReplace.reduce((acc, { oldStr, newStr }) => ({ ...acc, [oldStr]: newStr }), {});\n\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 if (transformers?.length) {\n const transformerFactories = transformers.map((t) => t(updates));\n newContent = await transformSourceFile(file.path, strContent, transformerFactories, undefined, updates);\n } else {\n stringsToReplace.forEach(({ oldStr, newStr }) => {\n const oldStringRegex = new RegExp(oldStr, 'g');\n newContent = newContent.replace(oldStringRegex, newStr);\n });\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, EnvsAspect, PrettierAspect];\n static runtime = MainRuntime;\n static async provider([componentMain, pkg, cli, envMain, prettierMain]: [\n ComponentMain,\n PkgMain,\n CLIMain,\n EnvsMain,\n PrettierMain\n ]) {\n const refactoringMain = new RefactoringMain(componentMain, pkg, envMain, prettierMain);\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"],"mappings":"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"}
1
+ {"version":3,"names":["_cli","data","require","_isbinaryfile","_camelcase","_interopRequireDefault","_lodash","_replacePackageName","_component","_interopRequireWildcard","_bitError","_pkg","_envs","_typescript","_prettier","_refactoring","_refactor","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","ownKeys","keys","getOwnPropertySymbols","o","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","key","value","_toPropertyKey","configurable","writable","_toPrimitive","String","Symbol","toPrimitive","TypeError","Number","RefactoringMain","constructor","componentMain","pkg","envs","prettierMain","refactorDependencyName","components","oldId","newId","oldPackageName","getPackageNameByUnknownId","newPackageName","BitError","changedComponents","Promise","all","map","comp","hasChanged","replacePackageNameInComponent","compact","refactorVariableAndClasses","component","sourceId","targetId","options","ast","refactorVariableAndClassesUsingAST","replaceMultipleStrings","oldStr","name","newStr","camelCase","pascalCase","importTransformer","exportTransformer","variableNamesTransformer","functionNamesTransformer","typeReferenceTransformer","typeAliasNamesTransformer","interfaceNamesTransformer","classNamesTransformer","expressionStatementTransformer","refactorFilenames","filesystem","files","file","relative","includes","updatePaths","newRelative","replace","stringsToReplace","transformers","replaceMultipleStringsInOneComp","id","ComponentID","getPackageNameByComponentID","Error","host","getHost","componentID","resolveComponentId","err","isValidScopedPackageName","toString","getPackageName","startsWith","replaceString","oldString","newString","changed","isBinary","isBinaryFile","contents","strContent","oldStringRegex","RegExp","newContent","Buffer","from","some","c","oldPkg","newPkg","newStrContent","replacePackageName","getDefaultFormatter","createFormatter","check","config","parser","trailingComma","tabWidth","singleQuote","updates","reduce","acc","transformerFactories","transformSourceFile","path","undefined","provider","cli","envMain","refactoringMain","subCommands","DependencyNameRefactorCmd","refactorCmd","RefactorCmd","commands","register","exports","ComponentAspect","PkgAspect","CLIAspect","EnvsAspect","PrettierAspect","MainRuntime","RefactoringAspect","addRuntime"],"sources":["refactoring.main.runtime.ts"],"sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { isBinaryFile } from 'isbinaryfile';\nimport camelCase from 'camelcase';\nimport { compact } from 'lodash';\nimport replacePackageName from '@teambit/legacy/dist/utils/string/replace-package-name';\nimport ComponentAspect, { Component, ComponentID, ComponentMain } from '@teambit/component';\nimport { BitError } from '@teambit/bit-error';\nimport PkgAspect, { PkgMain } from '@teambit/pkg';\nimport { EnvsAspect, EnvsMain } from '@teambit/envs';\nimport {\n SourceFileTransformer,\n classNamesTransformer,\n functionNamesTransformer,\n importTransformer,\n exportTransformer,\n interfaceNamesTransformer,\n typeAliasNamesTransformer,\n variableNamesTransformer,\n transformSourceFile,\n expressionStatementTransformer,\n typeReferenceTransformer,\n} from '@teambit/typescript';\nimport PrettierAspect, { PrettierMain } from '@teambit/prettier';\nimport { Formatter } from '@teambit/formatter';\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(\n private componentMain: ComponentMain,\n private pkg: PkgMain,\n private envs: EnvsMain,\n private prettierMain: PrettierMain\n ) {}\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.replacePackageNameInComponent(comp, oldPackageName, newPackageName);\n return hasChanged ? comp : null;\n })\n );\n return { oldPackageName, newPackageName, changedComponents: compact(changedComponents) };\n }\n\n /**\n * replaces the old-name inside the source code of the given component with the new name.\n * helpful when renaming/forking an aspect/env where the component-name is used as the class-name and variable-name.\n */\n async refactorVariableAndClasses(\n component: Component,\n sourceId: ComponentID,\n targetId: ComponentID,\n options?: { ast?: boolean }\n ) {\n if (options?.ast) {\n await this.refactorVariableAndClassesUsingAST(component, sourceId, targetId);\n } else {\n await this.replaceMultipleStrings(\n [component],\n [\n {\n oldStr: sourceId.name,\n newStr: targetId.name,\n },\n {\n oldStr: camelCase(sourceId.name),\n newStr: camelCase(targetId.name),\n },\n {\n oldStr: camelCase(sourceId.name, { pascalCase: true }),\n newStr: camelCase(targetId.name, { pascalCase: true }),\n },\n ]\n );\n }\n }\n\n async refactorVariableAndClassesUsingAST(component: Component, sourceId: ComponentID, targetId: ComponentID) {\n // transform kebabCase importPaths and PascalCase importNames\n await this.replaceMultipleStrings(\n [component],\n [\n {\n oldStr: sourceId.name,\n newStr: targetId.name,\n },\n {\n oldStr: camelCase(sourceId.name, { pascalCase: true }),\n newStr: camelCase(targetId.name, { pascalCase: true }),\n },\n ],\n [importTransformer, exportTransformer]\n );\n\n // transform camelCase variable and function names\n await this.replaceMultipleStrings(\n [component],\n [\n {\n oldStr: camelCase(sourceId.name),\n newStr: camelCase(targetId.name),\n },\n ],\n [variableNamesTransformer, functionNamesTransformer]\n );\n\n // transform PascalCase ClassNames\n await this.replaceMultipleStrings(\n [component],\n [\n {\n oldStr: camelCase(sourceId.name, { pascalCase: true }),\n newStr: camelCase(targetId.name, { pascalCase: true }),\n },\n {\n oldStr: camelCase(`${sourceId.name}Props`, { pascalCase: true }),\n newStr: camelCase(`${targetId.name}Props`, { pascalCase: true }),\n },\n ],\n [\n typeReferenceTransformer,\n typeAliasNamesTransformer,\n functionNamesTransformer,\n interfaceNamesTransformer,\n variableNamesTransformer,\n classNamesTransformer,\n expressionStatementTransformer,\n ]\n );\n }\n\n refactorFilenames(component: Component, sourceId: ComponentID, targetId: ComponentID) {\n component.filesystem.files.forEach((file) => {\n if (file.relative.includes(sourceId.name)) {\n file.updatePaths({ newRelative: file.relative.replace(sourceId.name, targetId.name) });\n }\n });\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 replaceMultipleStrings(\n components: Component[],\n stringsToReplace: MultipleStringsReplacement = [],\n transformers?: SourceFileTransformer[]\n ): Promise<{\n changedComponents: Component[];\n }> {\n const changedComponents = await Promise.all(\n components.map(async (comp) => {\n const hasChanged = await this.replaceMultipleStringsInOneComp(comp, stringsToReplace, transformers);\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 replacePackageNameInComponent(comp: Component, oldPkg: string, newPkg: 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) {\n return false;\n }\n const strContent = file.contents.toString();\n const newStrContent = replacePackageName(strContent, oldPkg, newPkg);\n if (strContent === newStrContent) {\n return false;\n }\n file.contents = Buffer.from(newStrContent);\n return true;\n })\n );\n return changed.some((c) => c);\n }\n\n private getDefaultFormatter(): Formatter {\n return this.prettierMain.createFormatter(\n { check: false },\n {\n config: {\n parser: 'typescript',\n trailingComma: 'es5',\n tabWidth: 2,\n singleQuote: true,\n },\n }\n );\n }\n\n private async replaceMultipleStringsInOneComp(\n comp: Component,\n stringsToReplace: MultipleStringsReplacement,\n transformers?: SourceFileTransformer[]\n ): Promise<boolean> {\n const updates = stringsToReplace.reduce((acc, { oldStr, newStr }) => ({ ...acc, [oldStr]: newStr }), {});\n\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 if (transformers?.length) {\n const transformerFactories = transformers.map((t) => t(updates));\n newContent = await transformSourceFile(file.path, strContent, transformerFactories, undefined, updates);\n } else {\n stringsToReplace.forEach(({ oldStr, newStr }) => {\n const oldStringRegex = new RegExp(oldStr, 'g');\n newContent = newContent.replace(oldStringRegex, newStr);\n });\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, EnvsAspect, PrettierAspect];\n static runtime = MainRuntime;\n static async provider([componentMain, pkg, cli, envMain, prettierMain]: [\n ComponentMain,\n PkgMain,\n CLIMain,\n EnvsMain,\n PrettierMain\n ]) {\n const refactoringMain = new RefactoringMain(componentMain, pkg, envMain, prettierMain);\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"],"mappings":"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"}
package/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { RefactoringAspect } from './refactoring.aspect';
2
+
3
+ export type { RefactoringMain, MultipleStringsReplacement } from './refactoring.main.runtime';
4
+ export default RefactoringAspect;
5
+ export { RefactoringAspect };
package/package.json CHANGED
@@ -1,43 +1,37 @@
1
1
  {
2
2
  "name": "@teambit/refactoring",
3
- "version": "1.0.107",
3
+ "version": "1.0.108",
4
4
  "homepage": "https://bit.cloud/teambit/component/refactoring",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.component",
8
8
  "name": "refactoring",
9
- "version": "1.0.107"
9
+ "version": "1.0.108"
10
10
  },
11
11
  "dependencies": {
12
12
  "chalk": "2.4.2",
13
13
  "camelcase": "6.2.0",
14
14
  "isbinaryfile": "4.0.6",
15
15
  "lodash": "4.17.21",
16
- "core-js": "^3.0.0",
17
- "@babel/runtime": "7.20.0",
18
16
  "@teambit/harmony": "0.4.6",
19
17
  "@teambit/bit-error": "0.0.404",
20
- "@teambit/cli": "0.0.839",
21
- "@teambit/component": "1.0.107",
22
- "@teambit/envs": "1.0.107",
23
- "@teambit/formatter": "1.0.107",
24
- "@teambit/pkg": "1.0.107",
25
- "@teambit/prettier": "1.0.107",
26
- "@teambit/typescript": "1.0.107"
18
+ "@teambit/cli": "0.0.840",
19
+ "@teambit/component": "1.0.108",
20
+ "@teambit/envs": "1.0.108",
21
+ "@teambit/formatter": "1.0.108",
22
+ "@teambit/pkg": "1.0.108",
23
+ "@teambit/prettier": "1.0.108",
24
+ "@teambit/typescript": "1.0.108"
27
25
  },
28
26
  "devDependencies": {
29
27
  "@types/lodash": "4.14.165",
30
28
  "@types/mocha": "9.1.0",
31
- "@types/node": "12.20.4",
32
- "@types/react": "^17.0.8",
33
- "@types/react-dom": "^17.0.5",
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": ">=12.22.0"
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
  }
@@ -0,0 +1,46 @@
1
+ // eslint-disable-next-line max-classes-per-file
2
+ import { Command, CommandOptions } from '@teambit/cli';
3
+ import { ComponentMain } from '@teambit/component';
4
+ // import { PATTERN_HELP } from '@teambit/legacy/dist/constants';
5
+ import chalk from 'chalk';
6
+ import { RefactoringMain } from './refactoring.main.runtime';
7
+
8
+ export class DependencyNameRefactorCmd implements Command {
9
+ name = 'dependency-name <old-id> <new-id>';
10
+ description = "replace the dependency's old package-name with a new one in the code";
11
+ options = [] as CommandOptions;
12
+ group = 'development';
13
+ // extendedDescription = `${PATTERN_HELP('refactor dependency-name')}`;
14
+ extendedDescription = `the \`<old-id>\` and \`<new-id>\` arguments can be either a component-id or a package-name.`;
15
+
16
+ constructor(private refactoringMain: RefactoringMain, private componentMain: ComponentMain) {}
17
+
18
+ async report([oldId, newId]: [string, string]) {
19
+ const host = this.componentMain.getHost();
20
+ const allComps = await host.list();
21
+ const { changedComponents, oldPackageName, newPackageName } = await this.refactoringMain.refactorDependencyName(
22
+ allComps,
23
+ oldId,
24
+ newId
25
+ );
26
+ await Promise.all(changedComponents.map((comp) => host.write(comp)));
27
+ return `the following components have been changed (${oldPackageName} => ${newPackageName}):\n${changedComponents
28
+ .map((c) => c.id.toString())
29
+ .join('\n')}`;
30
+ }
31
+ }
32
+
33
+ export class RefactorCmd implements Command {
34
+ name = 'refactor <sub-command>';
35
+ alias = '';
36
+ description = 'source code refactoring / codemod';
37
+ options = [];
38
+ group = 'development';
39
+ commands: Command[] = [];
40
+
41
+ async report([unrecognizedSubcommand]: [string]) {
42
+ return chalk.red(
43
+ `"${unrecognizedSubcommand}" is not a subcommand of "refactor", please run "bit refactor --help" to list the subcommands`
44
+ );
45
+ }
46
+ }
@@ -0,0 +1,5 @@
1
+ import { Aspect } from '@teambit/harmony';
2
+
3
+ export const RefactoringAspect = Aspect.create({
4
+ id: 'teambit.component/refactoring',
5
+ });
@@ -0,0 +1,313 @@
1
+ import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';
2
+ import { isBinaryFile } from 'isbinaryfile';
3
+ import camelCase from 'camelcase';
4
+ import { compact } from 'lodash';
5
+ import replacePackageName from '@teambit/legacy/dist/utils/string/replace-package-name';
6
+ import ComponentAspect, { Component, ComponentID, ComponentMain } from '@teambit/component';
7
+ import { BitError } from '@teambit/bit-error';
8
+ import PkgAspect, { PkgMain } from '@teambit/pkg';
9
+ import { EnvsAspect, EnvsMain } from '@teambit/envs';
10
+ import {
11
+ SourceFileTransformer,
12
+ classNamesTransformer,
13
+ functionNamesTransformer,
14
+ importTransformer,
15
+ exportTransformer,
16
+ interfaceNamesTransformer,
17
+ typeAliasNamesTransformer,
18
+ variableNamesTransformer,
19
+ transformSourceFile,
20
+ expressionStatementTransformer,
21
+ typeReferenceTransformer,
22
+ } from '@teambit/typescript';
23
+ import PrettierAspect, { PrettierMain } from '@teambit/prettier';
24
+ import { Formatter } from '@teambit/formatter';
25
+ import { RefactoringAspect } from './refactoring.aspect';
26
+ import { DependencyNameRefactorCmd, RefactorCmd } from './refactor.cmd';
27
+
28
+ export type MultipleStringsReplacement = Array<{ oldStr: string; newStr: string }>;
29
+
30
+ export class RefactoringMain {
31
+ constructor(
32
+ private componentMain: ComponentMain,
33
+ private pkg: PkgMain,
34
+ private envs: EnvsMain,
35
+ private prettierMain: PrettierMain
36
+ ) {}
37
+
38
+ /**
39
+ * refactor the dependency name of a component.
40
+ * oldId and newId can be either a component-id or a package-name.
41
+ * this method changes the source code of the component, but doesn't write to the filesystem.
42
+ */
43
+ async refactorDependencyName(
44
+ components: Component[],
45
+ oldId: ComponentID | string,
46
+ newId: ComponentID | string
47
+ ): Promise<{ oldPackageName: string; newPackageName: string; changedComponents: Component[] }> {
48
+ const oldPackageName = await this.getPackageNameByUnknownId(oldId);
49
+ const newPackageName = await this.getPackageNameByUnknownId(newId);
50
+ if (oldPackageName === newPackageName) {
51
+ throw new BitError(`refactoring: the old package-name and the new package-name are the same: ${oldPackageName}`);
52
+ }
53
+ const changedComponents = await Promise.all(
54
+ components.map(async (comp) => {
55
+ const hasChanged = await this.replacePackageNameInComponent(comp, oldPackageName, newPackageName);
56
+ return hasChanged ? comp : null;
57
+ })
58
+ );
59
+ return { oldPackageName, newPackageName, changedComponents: compact(changedComponents) };
60
+ }
61
+
62
+ /**
63
+ * replaces the old-name inside the source code of the given component with the new name.
64
+ * helpful when renaming/forking an aspect/env where the component-name is used as the class-name and variable-name.
65
+ */
66
+ async refactorVariableAndClasses(
67
+ component: Component,
68
+ sourceId: ComponentID,
69
+ targetId: ComponentID,
70
+ options?: { ast?: boolean }
71
+ ) {
72
+ if (options?.ast) {
73
+ await this.refactorVariableAndClassesUsingAST(component, sourceId, targetId);
74
+ } else {
75
+ await this.replaceMultipleStrings(
76
+ [component],
77
+ [
78
+ {
79
+ oldStr: sourceId.name,
80
+ newStr: targetId.name,
81
+ },
82
+ {
83
+ oldStr: camelCase(sourceId.name),
84
+ newStr: camelCase(targetId.name),
85
+ },
86
+ {
87
+ oldStr: camelCase(sourceId.name, { pascalCase: true }),
88
+ newStr: camelCase(targetId.name, { pascalCase: true }),
89
+ },
90
+ ]
91
+ );
92
+ }
93
+ }
94
+
95
+ async refactorVariableAndClassesUsingAST(component: Component, sourceId: ComponentID, targetId: ComponentID) {
96
+ // transform kebabCase importPaths and PascalCase importNames
97
+ await this.replaceMultipleStrings(
98
+ [component],
99
+ [
100
+ {
101
+ oldStr: sourceId.name,
102
+ newStr: targetId.name,
103
+ },
104
+ {
105
+ oldStr: camelCase(sourceId.name, { pascalCase: true }),
106
+ newStr: camelCase(targetId.name, { pascalCase: true }),
107
+ },
108
+ ],
109
+ [importTransformer, exportTransformer]
110
+ );
111
+
112
+ // transform camelCase variable and function names
113
+ await this.replaceMultipleStrings(
114
+ [component],
115
+ [
116
+ {
117
+ oldStr: camelCase(sourceId.name),
118
+ newStr: camelCase(targetId.name),
119
+ },
120
+ ],
121
+ [variableNamesTransformer, functionNamesTransformer]
122
+ );
123
+
124
+ // transform PascalCase ClassNames
125
+ await this.replaceMultipleStrings(
126
+ [component],
127
+ [
128
+ {
129
+ oldStr: camelCase(sourceId.name, { pascalCase: true }),
130
+ newStr: camelCase(targetId.name, { pascalCase: true }),
131
+ },
132
+ {
133
+ oldStr: camelCase(`${sourceId.name}Props`, { pascalCase: true }),
134
+ newStr: camelCase(`${targetId.name}Props`, { pascalCase: true }),
135
+ },
136
+ ],
137
+ [
138
+ typeReferenceTransformer,
139
+ typeAliasNamesTransformer,
140
+ functionNamesTransformer,
141
+ interfaceNamesTransformer,
142
+ variableNamesTransformer,
143
+ classNamesTransformer,
144
+ expressionStatementTransformer,
145
+ ]
146
+ );
147
+ }
148
+
149
+ refactorFilenames(component: Component, sourceId: ComponentID, targetId: ComponentID) {
150
+ component.filesystem.files.forEach((file) => {
151
+ if (file.relative.includes(sourceId.name)) {
152
+ file.updatePaths({ newRelative: file.relative.replace(sourceId.name, targetId.name) });
153
+ }
154
+ });
155
+ }
156
+
157
+ /**
158
+ * rename multiple packages dependencies.
159
+ * this method changes the source code of the component, but doesn't write to the filesystem.
160
+ */
161
+ async replaceMultipleStrings(
162
+ components: Component[],
163
+ stringsToReplace: MultipleStringsReplacement = [],
164
+ transformers?: SourceFileTransformer[]
165
+ ): Promise<{
166
+ changedComponents: Component[];
167
+ }> {
168
+ const changedComponents = await Promise.all(
169
+ components.map(async (comp) => {
170
+ const hasChanged = await this.replaceMultipleStringsInOneComp(comp, stringsToReplace, transformers);
171
+ return hasChanged ? comp : null;
172
+ })
173
+ );
174
+ return { changedComponents: compact(changedComponents) };
175
+ }
176
+
177
+ private async getPackageNameByUnknownId(id: ComponentID | string): Promise<string> {
178
+ if (id instanceof ComponentID) {
179
+ return this.getPackageNameByComponentID(id);
180
+ }
181
+ if (typeof id !== 'string') {
182
+ throw new Error(`getPackageNameByUnknownId expects id to be either string or ComponentID, got ${typeof id}`);
183
+ }
184
+ try {
185
+ const host = this.componentMain.getHost();
186
+ const componentID = await host.resolveComponentId(id);
187
+ return await this.getPackageNameByComponentID(componentID);
188
+ } catch (err) {
189
+ if (this.isValidScopedPackageName(id)) {
190
+ return id; // assume this is a package-name
191
+ }
192
+ throw new BitError(
193
+ `refactoring: the id "${id}" is neither a valid scoped-package-name nor an existing component-id`
194
+ );
195
+ }
196
+ }
197
+
198
+ private async getPackageNameByComponentID(id: ComponentID) {
199
+ const host = this.componentMain.getHost();
200
+ const comp = await host.get(id);
201
+ if (!comp) throw new Error(`unable to find a component: "${id.toString()}"`);
202
+ return this.pkg.getPackageName(comp);
203
+ }
204
+
205
+ private isValidScopedPackageName(name: string) {
206
+ return (
207
+ name.startsWith('@') && name.includes('/') && name.length <= 214 && !name.includes('\\') && !name.includes('..')
208
+ );
209
+ }
210
+
211
+ private async replaceString(comp: Component, oldString: string, newString: string): Promise<boolean> {
212
+ const changed = await Promise.all(
213
+ comp.filesystem.files.map(async (file) => {
214
+ const isBinary = await isBinaryFile(file.contents);
215
+ if (isBinary) return false;
216
+ const strContent = file.contents.toString();
217
+ if (strContent.includes(oldString)) {
218
+ const oldStringRegex = new RegExp(oldString, 'g');
219
+ const newContent = strContent.replace(oldStringRegex, newString);
220
+ file.contents = Buffer.from(newContent);
221
+ return true;
222
+ }
223
+ return false;
224
+ })
225
+ );
226
+ return changed.some((c) => c);
227
+ }
228
+
229
+ private async replacePackageNameInComponent(comp: Component, oldPkg: string, newPkg: string): Promise<boolean> {
230
+ const changed = await Promise.all(
231
+ comp.filesystem.files.map(async (file) => {
232
+ const isBinary = await isBinaryFile(file.contents);
233
+ if (isBinary) {
234
+ return false;
235
+ }
236
+ const strContent = file.contents.toString();
237
+ const newStrContent = replacePackageName(strContent, oldPkg, newPkg);
238
+ if (strContent === newStrContent) {
239
+ return false;
240
+ }
241
+ file.contents = Buffer.from(newStrContent);
242
+ return true;
243
+ })
244
+ );
245
+ return changed.some((c) => c);
246
+ }
247
+
248
+ private getDefaultFormatter(): Formatter {
249
+ return this.prettierMain.createFormatter(
250
+ { check: false },
251
+ {
252
+ config: {
253
+ parser: 'typescript',
254
+ trailingComma: 'es5',
255
+ tabWidth: 2,
256
+ singleQuote: true,
257
+ },
258
+ }
259
+ );
260
+ }
261
+
262
+ private async replaceMultipleStringsInOneComp(
263
+ comp: Component,
264
+ stringsToReplace: MultipleStringsReplacement,
265
+ transformers?: SourceFileTransformer[]
266
+ ): Promise<boolean> {
267
+ const updates = stringsToReplace.reduce((acc, { oldStr, newStr }) => ({ ...acc, [oldStr]: newStr }), {});
268
+
269
+ const changed = await Promise.all(
270
+ comp.filesystem.files.map(async (file) => {
271
+ const isBinary = await isBinaryFile(file.contents);
272
+ if (isBinary) return false;
273
+ const strContent = file.contents.toString();
274
+ let newContent = strContent;
275
+ if (transformers?.length) {
276
+ const transformerFactories = transformers.map((t) => t(updates));
277
+ newContent = await transformSourceFile(file.path, strContent, transformerFactories, undefined, updates);
278
+ } else {
279
+ stringsToReplace.forEach(({ oldStr, newStr }) => {
280
+ const oldStringRegex = new RegExp(oldStr, 'g');
281
+ newContent = newContent.replace(oldStringRegex, newStr);
282
+ });
283
+ }
284
+ if (strContent !== newContent) {
285
+ file.contents = Buffer.from(newContent);
286
+ return true;
287
+ }
288
+ return false;
289
+ })
290
+ );
291
+ return changed.some((c) => c);
292
+ }
293
+
294
+ static slots = [];
295
+ static dependencies = [ComponentAspect, PkgAspect, CLIAspect, EnvsAspect, PrettierAspect];
296
+ static runtime = MainRuntime;
297
+ static async provider([componentMain, pkg, cli, envMain, prettierMain]: [
298
+ ComponentMain,
299
+ PkgMain,
300
+ CLIMain,
301
+ EnvsMain,
302
+ PrettierMain
303
+ ]) {
304
+ const refactoringMain = new RefactoringMain(componentMain, pkg, envMain, prettierMain);
305
+ const subCommands = [new DependencyNameRefactorCmd(refactoringMain, componentMain)];
306
+ const refactorCmd = new RefactorCmd();
307
+ refactorCmd.commands = subCommands;
308
+ cli.register(refactorCmd);
309
+ return refactoringMain;
310
+ }
311
+ }
312
+
313
+ RefactoringAspect.addRuntime(RefactoringMain);
package/tsconfig.json CHANGED
@@ -1,38 +1,33 @@
1
1
  {
2
2
  "compilerOptions": {
3
3
  "lib": [
4
- "es2019",
5
- "DOM",
6
- "ES6",
7
- "DOM.Iterable",
8
- "ScriptHost"
4
+ "esnext",
5
+ "dom",
6
+ "dom.Iterable"
9
7
  ],
10
- "target": "es2015",
11
- "module": "CommonJS",
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
- "outDir": "dist",
14
+ "skipLibCheck": true,
20
15
  "moduleResolution": "node",
21
16
  "esModuleInterop": true,
22
- "rootDir": ".",
23
17
  "resolveJsonModule": true,
24
- "emitDeclarationOnly": true,
25
- "emitDecoratorMetadata": true,
26
- "allowSyntheticDefaultImports": true,
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
- "package.json"
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<SVGProps<SVGSVGElement> & { title?: string }>;
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
+ }