@storybook/codemod 7.0.0-beta.9 → 7.0.0-rc.1
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +0 -39
- package/dist/index.js +1 -1
- package/dist/transforms/csf-2-to-3.d.ts +5 -4
- package/dist/transforms/csf-2-to-3.js +3 -1
- package/dist/transforms/mdx-to-csf.d.ts +7 -0
- package/dist/transforms/mdx-to-csf.js +55 -0
- package/dist/transforms/storiesof-to-csf.js +1 -1
- package/dist/transforms/upgrade-deprecated-types.d.ts +10 -0
- package/dist/transforms/upgrade-deprecated-types.js +2 -0
- package/jest.config.js +2 -0
- package/package.json +31 -16
- package/project.json +6 -0
- package/src/index.js +30 -4
- package/src/lib/utils.ts +2 -2
- package/src/transforms/__testfixtures__/storiesof-to-csf/decorators.input.js +1 -1
- package/src/transforms/__testfixtures__/storiesof-to-csf/export-function.input.js +1 -1
- package/src/transforms/__testfixtures__/storiesof-to-csf/story-decorators.input.js +1 -1
- package/src/transforms/__testfixtures__/update-addon-info/update-addon-info.input.js +34 -48
- package/src/transforms/__testfixtures__/update-addon-info/update-addon-info.output.snapshot +33 -47
- package/src/transforms/__tests__/csf-2-to-3.test.ts +170 -57
- package/src/transforms/__tests__/mdx-to-csf.test.ts +611 -0
- package/src/transforms/__tests__/upgrade-deprecated-types.test.ts +170 -0
- package/src/transforms/csf-2-to-3.ts +173 -37
- package/src/transforms/mdx-to-csf.ts +342 -0
- package/src/transforms/upgrade-deprecated-types.ts +142 -0
- package/dist/chunk-3OPQTROG.mjs +0 -1
- package/dist/chunk-B5FMQ3BX.mjs +0 -1
- package/dist/chunk-CO6EPEMB.mjs +0 -1
- package/dist/index.mjs +0 -1
- package/dist/transforms/add-component-parameters.mjs +0 -1
- package/dist/transforms/csf-2-to-3.mjs +0 -1
- package/dist/transforms/csf-hoist-story-annotations.mjs +0 -1
- package/dist/transforms/csf-to-mdx.d.ts +0 -29
- package/dist/transforms/csf-to-mdx.js +0 -3
- package/dist/transforms/csf-to-mdx.mjs +0 -3
- package/dist/transforms/move-builtin-addons.mjs +0 -1
- package/dist/transforms/storiesof-to-csf.mjs +0 -1
- package/dist/transforms/update-addon-info.mjs +0 -1
- package/dist/transforms/update-organisation-name.mjs +0 -1
- package/dist/transforms/upgrade-hierarchy-separators.mjs +0 -1
- package/src/transforms/__testfixtures__/csf-to-mdx/basic.input.js +0 -20
- package/src/transforms/__testfixtures__/csf-to-mdx/basic.output.snapshot +0 -18
- package/src/transforms/__testfixtures__/csf-to-mdx/component-id.input.js +0 -9
- package/src/transforms/__testfixtures__/csf-to-mdx/component-id.output.snapshot +0 -10
- package/src/transforms/__testfixtures__/csf-to-mdx/decorators.input.js +0 -13
- package/src/transforms/__testfixtures__/csf-to-mdx/decorators.output.snapshot +0 -12
- package/src/transforms/__testfixtures__/csf-to-mdx/exclude-stories.input.js +0 -23
- package/src/transforms/__testfixtures__/csf-to-mdx/exclude-stories.output.snapshot +0 -22
- package/src/transforms/__testfixtures__/csf-to-mdx/parameters.input.js +0 -16
- package/src/transforms/__testfixtures__/csf-to-mdx/parameters.output.snapshot +0 -17
- package/src/transforms/__testfixtures__/csf-to-mdx/story-function.input.js +0 -19
- package/src/transforms/__testfixtures__/csf-to-mdx/story-function.output.snapshot +0 -18
- package/src/transforms/__testfixtures__/csf-to-mdx/story-parameters.input.js +0 -24
- package/src/transforms/__testfixtures__/csf-to-mdx/story-parameters.output.snapshot +0 -22
- package/src/transforms/csf-to-mdx.js +0 -190
@@ -1 +1 @@
|
|
1
|
-
var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var storiesof_to_csf_exports={};__export(storiesof_to_csf_exports,{default:()=>transformer});module.exports=__toCommonJS(storiesof_to_csf_exports);var import_prettier=__toESM(require("prettier")),import_node_logger=require("@storybook/node-logger"),import_csf=require("@storybook/csf");var import_camelCase=__toESM(require("lodash/camelCase")),import_upperFirst=__toESM(require("lodash/upperFirst")),sanitizeName=name=>{let key=(0,import_upperFirst.default)((0,import_camelCase.default)(name));return/^\d/.test(key)&&(key=`_${key}`),/^\d/.test(key)&&(key=`_${key}`),key};function jscodeshiftToPrettierParser(parser){let parserMap={babylon:"babel",flow:"flow",ts:"typescript",tsx:"typescript"};return parser&&parserMap[parser]||"babel"}function transformer(file,api,options){let LITERAL=["ts","tsx"].includes(options.parser)?"StringLiteral":"Literal",j=api.jscodeshift,root=j(file.source);function extractDecorators(parameters){if(!parameters)return{};if(!parameters.properties)return{storyParams:parameters};let storyDecorators=parameters.properties.find(p=>p.key.name==="decorators");if(!storyDecorators)return{storyParams:parameters};storyDecorators=storyDecorators.value;let storyParams={...parameters};return storyParams.properties=storyParams.properties.filter(p=>p.key.name!=="decorators"),storyParams.properties.length===0?{storyDecorators}:{storyParams,storyDecorators}}function convertToModuleExports(path,originalExports2){let base=j(path),statements=[],extraExports=[],decorators=[];base.find(j.CallExpression).filter(call=>call.node.callee.property&&call.node.callee.property.name==="addDecorator").forEach(add=>{let decorator=add.node.arguments[0];decorators.push(decorator)}),decorators.length>0&&(decorators.reverse(),extraExports.push(j.property("init",j.identifier("decorators"),j.arrayExpression(decorators))));let parameters=[];base.find(j.CallExpression).filter(call=>call.node.callee.property&&call.node.callee.property.name==="addParameters").forEach(add=>{let params=[...add.node.arguments[0].properties];params.reverse(),params.forEach(prop=>parameters.push(prop))}),parameters.length>0&&(parameters.reverse(),extraExports.push(j.property("init",j.identifier("parameters"),j.objectExpression(parameters)))),originalExports2.length>0&&extraExports.push(j.property("init",j.identifier("excludeStories"),j.arrayExpression(originalExports2.map(exp=>j.literal(exp))))),base.find(j.CallExpression).filter(call=>call.node.callee.name==="storiesOf").filter(call=>call.node.arguments.length>0&&call.node.arguments[0].type===LITERAL).forEach(storiesOf=>{let title=storiesOf.node.arguments[0].value;statements.push(j.exportDefaultDeclaration(j.objectExpression([j.property("init",j.identifier("title"),j.literal(title)),...extraExports])))});let adds=[];base.find(j.CallExpression).filter(add=>add.node.callee.property&&add.node.callee.property.name==="add").filter(add=>add.node.arguments.length>=2&&add.node.arguments[0].type===LITERAL).forEach(add=>adds.push(add)),adds.reverse(),adds.push(path);let identifiers=new Set;root.find(j.Identifier).forEach(({value})=>identifiers.add(value.name)),adds.forEach(add=>{let name=add.node.arguments[0].value,key=sanitizeName(name);for(;identifiers.has(key);)key=`_${key}`;identifiers.add(key),(0,import_csf.storyNameFromExport)(key)===name&&(name=null);let val=add.node.arguments[1];statements.push(j.exportDeclaration(!1,j.variableDeclaration("const",[j.variableDeclarator(j.identifier(key),val)])));let storyAnnotations=[];if(name&&storyAnnotations.push(j.property("init",j.identifier("name"),j.literal(name))),add.node.arguments.length>2){let originalStoryParams=add.node.arguments[2],{storyParams,storyDecorators}=extractDecorators(originalStoryParams);storyParams&&storyAnnotations.push(j.property("init",j.identifier("parameters"),storyParams)),storyDecorators&&storyAnnotations.push(j.property("init",j.identifier("decorators"),storyDecorators))}storyAnnotations.length>0&&statements.push(j.assignmentStatement("=",j.memberExpression(j.identifier(key),j.identifier("story")),j.objectExpression(storyAnnotations)))});let stmt=path.parent.node.type==="VariableDeclarator"?path.parent.parent:path.parent;statements.reverse(),statements.forEach(s=>stmt.insertAfter(s)),j(stmt).remove()}let initialStoriesOf=root.find(j.CallExpression).filter(call=>call.node.callee.name==="storiesOf");if(root.find(j.ExportDefaultDeclaration).size()>0)return initialStoriesOf.size()>0&&import_node_logger.logger.warn(`Found ${initialStoriesOf.size()} 'storiesOf' calls but existing default export, SKIPPING: '${file.path}'`),root.toSource();let originalExports=[];root.find(j.ExportNamedDeclaration).forEach(exp=>{let{declaration,specifiers}=exp.node;if(declaration){let{id,declarations}=declaration;declarations?declarations.forEach(decl=>{let{name,properties}=decl.id;name?originalExports.push(name):properties&&properties.forEach(prop=>originalExports.push(prop.key.name))}):id&&originalExports.push(id.name)}else specifiers&&specifiers.forEach(spec=>originalExports.push(spec.exported.name))}),root.find(j.CallExpression).filter(add=>add.node.callee.property&&add.node.callee.property.name==="add").filter(add=>add.node.arguments.length>=2&&add.node.arguments[0].type===LITERAL).filter(add=>["ExpressionStatement","VariableDeclarator"].includes(add.parentPath.node.type)).forEach(path=>convertToModuleExports(path,originalExports)),root.find(j.ImportSpecifier).filter(spec=>spec.node.imported.name==="storiesOf"&&spec.parent.node.source.value.startsWith("@storybook/")).forEach(spec=>{let toRemove=spec.parent.node.specifiers.length>1?spec:spec.parent;j(toRemove).remove()});let source=root.toSource({trailingComma:!0,quote:"single",tabWidth:2});if(initialStoriesOf.size()>1)return import_node_logger.logger.warn(`Found ${initialStoriesOf.size()} 'storiesOf' calls, PLEASE FIX BY HAND: '${file.path}'`),source;let prettierConfig=import_prettier.default.resolveConfig.sync(".",{editorconfig:!0})||{printWidth:100,tabWidth:2,bracketSpacing:!0,trailingComma:"es5",singleQuote:!0};return import_prettier.default.format(source,{...prettierConfig,parser:jscodeshiftToPrettierParser(options.parser)})}0&&(module.exports={});
|
1
|
+
var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var storiesof_to_csf_exports={};__export(storiesof_to_csf_exports,{default:()=>transformer});module.exports=__toCommonJS(storiesof_to_csf_exports);var import_prettier=__toESM(require("prettier")),import_node_logger=require("@storybook/node-logger"),import_csf=require("@storybook/csf");var import_camelCase=__toESM(require("lodash/camelCase.js")),import_upperFirst=__toESM(require("lodash/upperFirst.js")),sanitizeName=name=>{let key=(0,import_upperFirst.default)((0,import_camelCase.default)(name));return/^\d/.test(key)&&(key=`_${key}`),/^\d/.test(key)&&(key=`_${key}`),key};function jscodeshiftToPrettierParser(parser){let parserMap={babylon:"babel",flow:"flow",ts:"typescript",tsx:"typescript"};return parser&&parserMap[parser]||"babel"}function transformer(file,api,options){let LITERAL=["ts","tsx"].includes(options.parser)?"StringLiteral":"Literal",j=api.jscodeshift,root=j(file.source);function extractDecorators(parameters){if(!parameters)return{};if(!parameters.properties)return{storyParams:parameters};let storyDecorators=parameters.properties.find(p=>p.key.name==="decorators");if(!storyDecorators)return{storyParams:parameters};storyDecorators=storyDecorators.value;let storyParams={...parameters};return storyParams.properties=storyParams.properties.filter(p=>p.key.name!=="decorators"),storyParams.properties.length===0?{storyDecorators}:{storyParams,storyDecorators}}function convertToModuleExports(path,originalExports2){let base=j(path),statements=[],extraExports=[],decorators=[];base.find(j.CallExpression).filter(call=>call.node.callee.property&&call.node.callee.property.name==="addDecorator").forEach(add=>{let decorator=add.node.arguments[0];decorators.push(decorator)}),decorators.length>0&&(decorators.reverse(),extraExports.push(j.property("init",j.identifier("decorators"),j.arrayExpression(decorators))));let parameters=[];base.find(j.CallExpression).filter(call=>call.node.callee.property&&call.node.callee.property.name==="addParameters").forEach(add=>{let params=[...add.node.arguments[0].properties];params.reverse(),params.forEach(prop=>parameters.push(prop))}),parameters.length>0&&(parameters.reverse(),extraExports.push(j.property("init",j.identifier("parameters"),j.objectExpression(parameters)))),originalExports2.length>0&&extraExports.push(j.property("init",j.identifier("excludeStories"),j.arrayExpression(originalExports2.map(exp=>j.literal(exp))))),base.find(j.CallExpression).filter(call=>call.node.callee.name==="storiesOf").filter(call=>call.node.arguments.length>0&&call.node.arguments[0].type===LITERAL).forEach(storiesOf=>{let title=storiesOf.node.arguments[0].value;statements.push(j.exportDefaultDeclaration(j.objectExpression([j.property("init",j.identifier("title"),j.literal(title)),...extraExports])))});let adds=[];base.find(j.CallExpression).filter(add=>add.node.callee.property&&add.node.callee.property.name==="add").filter(add=>add.node.arguments.length>=2&&add.node.arguments[0].type===LITERAL).forEach(add=>adds.push(add)),adds.reverse(),adds.push(path);let identifiers=new Set;root.find(j.Identifier).forEach(({value})=>identifiers.add(value.name)),adds.forEach(add=>{let name=add.node.arguments[0].value,key=sanitizeName(name);for(;identifiers.has(key);)key=`_${key}`;identifiers.add(key),(0,import_csf.storyNameFromExport)(key)===name&&(name=null);let val=add.node.arguments[1];statements.push(j.exportDeclaration(!1,j.variableDeclaration("const",[j.variableDeclarator(j.identifier(key),val)])));let storyAnnotations=[];if(name&&storyAnnotations.push(j.property("init",j.identifier("name"),j.literal(name))),add.node.arguments.length>2){let originalStoryParams=add.node.arguments[2],{storyParams,storyDecorators}=extractDecorators(originalStoryParams);storyParams&&storyAnnotations.push(j.property("init",j.identifier("parameters"),storyParams)),storyDecorators&&storyAnnotations.push(j.property("init",j.identifier("decorators"),storyDecorators))}storyAnnotations.length>0&&statements.push(j.assignmentStatement("=",j.memberExpression(j.identifier(key),j.identifier("story")),j.objectExpression(storyAnnotations)))});let stmt=path.parent.node.type==="VariableDeclarator"?path.parent.parent:path.parent;statements.reverse(),statements.forEach(s=>stmt.insertAfter(s)),j(stmt).remove()}let initialStoriesOf=root.find(j.CallExpression).filter(call=>call.node.callee.name==="storiesOf");if(root.find(j.ExportDefaultDeclaration).size()>0)return initialStoriesOf.size()>0&&import_node_logger.logger.warn(`Found ${initialStoriesOf.size()} 'storiesOf' calls but existing default export, SKIPPING: '${file.path}'`),root.toSource();let originalExports=[];root.find(j.ExportNamedDeclaration).forEach(exp=>{let{declaration,specifiers}=exp.node;if(declaration){let{id,declarations}=declaration;declarations?declarations.forEach(decl=>{let{name,properties}=decl.id;name?originalExports.push(name):properties&&properties.forEach(prop=>originalExports.push(prop.key.name))}):id&&originalExports.push(id.name)}else specifiers&&specifiers.forEach(spec=>originalExports.push(spec.exported.name))}),root.find(j.CallExpression).filter(add=>add.node.callee.property&&add.node.callee.property.name==="add").filter(add=>add.node.arguments.length>=2&&add.node.arguments[0].type===LITERAL).filter(add=>["ExpressionStatement","VariableDeclarator"].includes(add.parentPath.node.type)).forEach(path=>convertToModuleExports(path,originalExports)),root.find(j.ImportSpecifier).filter(spec=>spec.node.imported.name==="storiesOf"&&spec.parent.node.source.value.startsWith("@storybook/")).forEach(spec=>{let toRemove=spec.parent.node.specifiers.length>1?spec:spec.parent;j(toRemove).remove()});let source=root.toSource({trailingComma:!0,quote:"single",tabWidth:2});if(initialStoriesOf.size()>1)return import_node_logger.logger.warn(`Found ${initialStoriesOf.size()} 'storiesOf' calls, PLEASE FIX BY HAND: '${file.path}'`),source;let prettierConfig=import_prettier.default.resolveConfig.sync(".",{editorconfig:!0})||{printWidth:100,tabWidth:2,bracketSpacing:!0,trailingComma:"es5",singleQuote:!0};return import_prettier.default.format(source,{...prettierConfig,parser:jscodeshiftToPrettierParser(options.parser)})}0&&(module.exports={});
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { FileInfo, API } from 'jscodeshift';
|
2
|
+
import { BabelFile } from '@babel/core';
|
3
|
+
|
4
|
+
declare function transform(info: FileInfo, api: API, options: {
|
5
|
+
parser?: string;
|
6
|
+
}): string;
|
7
|
+
declare const parser = "tsx";
|
8
|
+
declare function upgradeDeprecatedTypes(file: BabelFile): void;
|
9
|
+
|
10
|
+
export { transform as default, parser, upgradeDeprecatedTypes };
|
@@ -0,0 +1,2 @@
|
|
1
|
+
var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var upgrade_deprecated_types_exports={};__export(upgrade_deprecated_types_exports,{default:()=>transform,parser:()=>parser,upgradeDeprecatedTypes:()=>upgradeDeprecatedTypes});module.exports=__toCommonJS(upgrade_deprecated_types_exports);var import_prettier=__toESM(require("prettier")),babel=__toESM(require("@babel/core")),import_csf_tools=require("@storybook/csf-tools"),recast=__toESM(require("recast")),t=__toESM(require("@babel/types")),logger=console,deprecatedTypes=["ComponentStory","ComponentStoryFn","ComponentStoryObj","ComponentMeta","Story"];function migrateType(oldType){return oldType==="Story"||oldType==="ComponentStory"?"StoryFn":oldType.replace("Component","")}function transform(info,api,options){let fileNode=(0,import_csf_tools.loadCsf)(info.source,{makeTitle:title=>title})._ast,file=new babel.File({filename:info.path},{code:info.source,ast:fileNode});upgradeDeprecatedTypes(file);let output=recast.print(file.path.node).code;try{let prettierConfig=import_prettier.default.resolveConfig.sync(".",{editorconfig:!0})||{printWidth:100,tabWidth:2,bracketSpacing:!0,trailingComma:"es5",singleQuote:!0};output=import_prettier.default.format(output,{...prettierConfig,filepath:info.path})}catch{logger.log(`Failed applying prettier to ${info.path}.`)}return output}var parser="tsx";function upgradeDeprecatedTypes(file){let importedNamespaces=new Set,typeReferencesToUpdate=new Set,existingImports=[];file.path.traverse({ImportDeclaration:path=>{existingImports.push(...path.get("specifiers").map(specifier=>({name:specifier.node.local.name,isAlias:!(specifier.isImportSpecifier()&&t.isIdentifier(specifier.node.imported)&&specifier.node.local.name===specifier.node.imported.name),path:specifier}))),path.node.source.value.startsWith("@storybook")&&path.get("specifiers").forEach(specifier=>{if(specifier.isImportNamespaceSpecifier()&&importedNamespaces.add(specifier.node.local.name),!specifier.isImportSpecifier())return;let imported=specifier.get("imported");if(imported.isIdentifier()&&deprecatedTypes.includes(imported.node.name)){imported.node.name===specifier.node.local.name&&typeReferencesToUpdate.add(specifier.node.local.name);let newType=migrateType(imported.node.name);if(!existingImports.some(it=>it.name===newType))imported.replaceWith(t.identifier(newType)),existingImports.push({name:newType,isAlias:!1,path:specifier});else{let existingImport=existingImports.find(it=>it.name===newType&&it.isAlias);if(existingImport)throw existingImport.path.buildCodeFrameError(`This codemod does not support local imports that are called the same as a storybook import.
|
2
|
+
Rename this local import and try again.`);specifier.remove()}}})}}),file.path.traverse({TSTypeReference:path=>{let typeName=path.get("typeName");if(typeName.isIdentifier())typeReferencesToUpdate.has(typeName.node.name)&&typeName.replaceWith(t.identifier(migrateType(typeName.node.name)));else if(typeName.isTSQualifiedName()){let namespace=typeName.get("left");if(namespace.isIdentifier()&&importedNamespaces.has(namespace.node.name)){let right=typeName.get("right");deprecatedTypes.includes(right.node.name)&&right.replaceWith(t.identifier(migrateType(right.node.name)))}}}})}0&&(module.exports={parser,upgradeDeprecatedTypes});
|
package/jest.config.js
CHANGED
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@storybook/codemod",
|
3
|
-
"version": "7.0.0-
|
3
|
+
"version": "7.0.0-rc.1",
|
4
4
|
"description": "A collection of codemod scripts written with JSCodeshift",
|
5
5
|
"keywords": [
|
6
6
|
"storybook"
|
@@ -22,65 +22,80 @@
|
|
22
22
|
"sideEffects": false,
|
23
23
|
"exports": {
|
24
24
|
".": {
|
25
|
+
"node": "./dist/index.js",
|
25
26
|
"require": "./dist/index.js",
|
26
|
-
"import": "./dist/index.mjs",
|
27
27
|
"types": "./dist/index.d.ts"
|
28
28
|
},
|
29
29
|
"./dist/transforms/add-component-parameters.js": "./dist/transforms/add-component-parameters.js",
|
30
30
|
"./dist/transforms/csf-2-to-3.js": "./dist/transforms/csf-2-to-3.js",
|
31
31
|
"./dist/transforms/csf-hoist-story-annotations.js": "./dist/transforms/csf-hoist-story-annotations.js",
|
32
|
-
"./dist/transforms/csf-to-mdx.js": "./dist/transforms/csf-to-mdx.js",
|
33
32
|
"./dist/transforms/move-builtin-addons.js": "./dist/transforms/move-builtin-addons.js",
|
33
|
+
"./dist/transforms/mdx-to-csf.js": "./dist/transforms/mdx-to-csf.js",
|
34
34
|
"./dist/transforms/storiesof-to-csf.js": "./dist/transforms/storiesof-to-csf.js",
|
35
35
|
"./dist/transforms/update-addon-info.js": "./dist/transforms/update-addon-info.js",
|
36
36
|
"./dist/transforms/update-organisation-name.js": "./dist/transforms/update-organisation-name.js",
|
37
|
+
"./dist/transforms/upgrade-deprecated-types.js": "./dist/transforms/upgrade-deprecated-types.js",
|
37
38
|
"./dist/transforms/upgrade-hierarchy-separators.js": "./dist/transforms/upgrade-hierarchy-separators.js",
|
38
39
|
"./package.json": "./package.json"
|
39
40
|
},
|
40
41
|
"main": "dist/index.js",
|
41
|
-
"module": "dist/index.mjs",
|
42
42
|
"types": "dist/index.d.ts",
|
43
43
|
"scripts": {
|
44
44
|
"check": "../../../scripts/node_modules/.bin/tsc --noEmit",
|
45
45
|
"prep": "../../../scripts/prepare/bundle.ts"
|
46
46
|
},
|
47
47
|
"dependencies": {
|
48
|
-
"@babel/
|
49
|
-
"@babel/
|
48
|
+
"@babel/core": "~7.21.0",
|
49
|
+
"@babel/preset-env": "~7.20.2",
|
50
|
+
"@babel/types": "~7.21.2",
|
50
51
|
"@storybook/csf": "next",
|
51
|
-
"@storybook/csf-tools": "7.0.0-
|
52
|
-
"@storybook/node-logger": "7.0.0-
|
53
|
-
"@storybook/types": "7.0.0-
|
52
|
+
"@storybook/csf-tools": "7.0.0-rc.1",
|
53
|
+
"@storybook/node-logger": "7.0.0-rc.1",
|
54
|
+
"@storybook/types": "7.0.0-rc.1",
|
54
55
|
"cross-spawn": "^7.0.3",
|
55
56
|
"globby": "^11.0.2",
|
56
|
-
"jscodeshift": "^0.
|
57
|
+
"jscodeshift": "^0.14.0",
|
57
58
|
"lodash": "^4.17.21",
|
58
59
|
"prettier": "^2.8.0",
|
59
|
-
"recast": "^0.
|
60
|
-
"util": "^0.12.4"
|
60
|
+
"recast": "^0.23.1"
|
61
61
|
},
|
62
62
|
"devDependencies": {
|
63
|
+
"@types/jscodeshift": "^0.11.6",
|
64
|
+
"ansi-regex": "^5.0.1",
|
63
65
|
"jest": "^29.3.1",
|
64
66
|
"jest-specific-snapshot": "^7.0.0",
|
65
|
-
"
|
67
|
+
"mdast-util-mdx-jsx": "^2.1.2",
|
68
|
+
"mdast-util-mdxjs-esm": "^1.3.1",
|
69
|
+
"remark": "^14.0.2",
|
70
|
+
"remark-mdx": "^2.2.1",
|
71
|
+
"ts-dedent": "^2.2.0",
|
72
|
+
"typescript": "~4.9.3",
|
73
|
+
"unist-util-is": "^5.2.0",
|
74
|
+
"unist-util-select": "^4.0.3",
|
75
|
+
"unist-util-visit": "^4.1.2",
|
76
|
+
"util": "^0.12.4",
|
77
|
+
"vfile": "^5.3.7"
|
66
78
|
},
|
67
79
|
"publishConfig": {
|
68
80
|
"access": "public"
|
69
81
|
},
|
70
82
|
"bundler": {
|
71
|
-
"platform": "node",
|
72
83
|
"entries": [
|
73
84
|
"./src/index.js",
|
74
85
|
"./src/transforms/add-component-parameters.js",
|
75
86
|
"./src/transforms/csf-2-to-3.ts",
|
76
87
|
"./src/transforms/csf-hoist-story-annotations.js",
|
77
|
-
"./src/transforms/
|
88
|
+
"./src/transforms/mdx-to-csf.ts",
|
78
89
|
"./src/transforms/move-builtin-addons.js",
|
79
90
|
"./src/transforms/storiesof-to-csf.js",
|
80
91
|
"./src/transforms/update-addon-info.js",
|
81
92
|
"./src/transforms/update-organisation-name.js",
|
93
|
+
"./src/transforms/upgrade-deprecated-types.ts",
|
82
94
|
"./src/transforms/upgrade-hierarchy-separators.js"
|
95
|
+
],
|
96
|
+
"formats": [
|
97
|
+
"cjs"
|
83
98
|
]
|
84
99
|
},
|
85
|
-
"gitHead": "
|
100
|
+
"gitHead": "115d69123dc7c4dfab9538d2b273cb0fcc372852"
|
86
101
|
}
|
package/project.json
ADDED
package/src/index.js
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
/* eslint-disable no-param-reassign */
|
1
2
|
/* eslint import/prefer-default-export: "off" */
|
2
3
|
import fs from 'fs';
|
3
4
|
import path from 'path';
|
@@ -55,16 +56,41 @@ export async function runCodemod(codemod, { glob, logger, dryRun, rename, parser
|
|
55
56
|
|
56
57
|
const files = await globby([glob, '!**/node_modules', '!**/dist']);
|
57
58
|
logger.log(`=> Applying ${codemod}: ${files.length} files`);
|
58
|
-
if (
|
59
|
+
if (files.length === 0) {
|
60
|
+
logger.log(`=> No matching files for glob: ${glob}`);
|
61
|
+
return;
|
62
|
+
}
|
63
|
+
|
64
|
+
if (!dryRun && files.length > 0) {
|
59
65
|
const parserArgs = inferredParser ? ['--parser', inferredParser] : [];
|
60
|
-
spawnSync(
|
61
|
-
'
|
62
|
-
[
|
66
|
+
const result = spawnSync(
|
67
|
+
'node',
|
68
|
+
[
|
69
|
+
require.resolve('jscodeshift/bin/jscodeshift'),
|
70
|
+
// this makes sure codeshift doesn't transform our own source code with babel
|
71
|
+
// which is faster, and also makes sure the user won't see babel messages such as:
|
72
|
+
// [BABEL] Note: The code generator has deoptimised the styling of repo/node_modules/prettier/index.js as it exceeds the max of 500KB.
|
73
|
+
'--no-babel',
|
74
|
+
'--fail-on-error',
|
75
|
+
'-t',
|
76
|
+
`${TRANSFORM_DIR}/${codemod}.js`,
|
77
|
+
...parserArgs,
|
78
|
+
...files,
|
79
|
+
],
|
63
80
|
{
|
64
81
|
stdio: 'inherit',
|
65
82
|
shell: true,
|
66
83
|
}
|
67
84
|
);
|
85
|
+
if (result.status === 1) {
|
86
|
+
logger.log('Skipped renaming because of errors.');
|
87
|
+
return;
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
if (!renameParts && codemod === 'mdx-to-csf') {
|
92
|
+
renameParts = ['.stories.mdx', '.mdx'];
|
93
|
+
rename = '.stories.mdx:.mdx;';
|
68
94
|
}
|
69
95
|
|
70
96
|
if (renameParts) {
|
package/src/lib/utils.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
import camelCase from 'lodash/camelCase';
|
2
|
-
import upperFirst from 'lodash/upperFirst';
|
1
|
+
import camelCase from 'lodash/camelCase.js';
|
2
|
+
import upperFirst from 'lodash/upperFirst.js';
|
3
3
|
|
4
4
|
export const sanitizeName = (name: string) => {
|
5
5
|
let key = upperFirst(camelCase(name));
|
@@ -5,5 +5,5 @@ import Button from './Button';
|
|
5
5
|
// This isn't a valid story, but it tests the `import { comp } from ...` case
|
6
6
|
storiesOf('Some.Button', module)
|
7
7
|
.addDecorator(withKnobs)
|
8
|
-
.addDecorator(storyFn => <div className="foo">{storyFn}</div>)
|
8
|
+
.addDecorator((storyFn) => <div className="foo">{storyFn}</div>)
|
9
9
|
.add('with decorator', () => <Button label="The Button" />);
|
@@ -8,5 +8,5 @@ export function someHelper() {
|
|
8
8
|
}
|
9
9
|
|
10
10
|
storiesOf('ComponentItem', module)
|
11
|
-
.addDecorator(storyFn => <div style={{ margin: '1rem' }}>{storyFn()}</div>)
|
11
|
+
.addDecorator((storyFn) => <div style={{ margin: '1rem' }}>{storyFn()}</div>)
|
12
12
|
.add('loading', () => <ComponentItem loading />);
|
@@ -4,7 +4,7 @@ import Button from './Button';
|
|
4
4
|
storiesOf('Some.Button', module)
|
5
5
|
.add('with story params and decorators', () => <Button label="The Button" />, {
|
6
6
|
bar: 1,
|
7
|
-
decorators: [withKnobs, storyFn => <div className="foo">{storyFn}</div>],
|
7
|
+
decorators: [withKnobs, (storyFn) => <div className="foo">{storyFn}</div>],
|
8
8
|
})
|
9
9
|
.add('with story decorators', () => <Button label="The Button" />, {
|
10
10
|
decorators: [withKnobs],
|
@@ -1,25 +1,21 @@
|
|
1
1
|
/* eslint-disable */
|
2
|
-
import React from 'react'
|
3
|
-
import Button from './Button'
|
2
|
+
import React from 'react';
|
3
|
+
import Button from './Button';
|
4
4
|
|
5
|
-
import { storiesOf } from '@storybook/react'
|
6
|
-
import { action } from '@storybook/addon-actions'
|
5
|
+
import { storiesOf } from '@storybook/react';
|
6
|
+
import { action } from '@storybook/addon-actions';
|
7
7
|
|
8
|
-
storiesOf(
|
9
|
-
'Button'
|
10
|
-
).addWithInfo(
|
8
|
+
storiesOf('Button').addWithInfo(
|
11
9
|
'simple usage',
|
12
10
|
'This is the basic usage with the button with providing a label to show the text.',
|
13
11
|
() => (
|
14
12
|
<div>
|
15
13
|
<Button label="The Button" onClick={action('onClick')} />
|
16
14
|
<br />
|
17
|
-
<p>
|
18
|
-
Click the "?" mark at top-right to view the info.
|
19
|
-
</p>
|
15
|
+
<p>Click the "?" mark at top-right to view the info.</p>
|
20
16
|
</div>
|
21
17
|
)
|
22
|
-
)
|
18
|
+
);
|
23
19
|
|
24
20
|
storiesOf('Button').addWithInfo(
|
25
21
|
'simple usage (inline info)',
|
@@ -28,7 +24,7 @@ storiesOf('Button').addWithInfo(
|
|
28
24
|
`,
|
29
25
|
() => <Button label="The Button" onClick={action('onClick')} />,
|
30
26
|
{ inline: true }
|
31
|
-
)
|
27
|
+
);
|
32
28
|
|
33
29
|
storiesOf('Button').addWithInfo(
|
34
30
|
'simple usage (disable source)',
|
@@ -37,7 +33,7 @@ storiesOf('Button').addWithInfo(
|
|
37
33
|
`,
|
38
34
|
() => <Button label="The Button" onClick={action('onClick')} />,
|
39
35
|
{ source: false, inline: true }
|
40
|
-
)
|
36
|
+
);
|
41
37
|
|
42
38
|
storiesOf('Button').addWithInfo(
|
43
39
|
'simple usage (no header)',
|
@@ -46,7 +42,7 @@ storiesOf('Button').addWithInfo(
|
|
46
42
|
`,
|
47
43
|
() => <Button label="The Button" onClick={action('onClick')} />,
|
48
44
|
{ header: false, inline: true }
|
49
|
-
)
|
45
|
+
);
|
50
46
|
|
51
47
|
storiesOf('Button').addWithInfo(
|
52
48
|
'simple usage (no prop tables)',
|
@@ -55,7 +51,7 @@ storiesOf('Button').addWithInfo(
|
|
55
51
|
`,
|
56
52
|
() => <Button label="The Button" onClick={action('onClick')} />,
|
57
53
|
{ propTables: false, inline: true }
|
58
|
-
)
|
54
|
+
);
|
59
55
|
|
60
56
|
storiesOf('Button').addWithInfo(
|
61
57
|
'simple usage (custom propTables)',
|
@@ -80,22 +76,19 @@ storiesOf('Button').addWithInfo(
|
|
80
76
|
</div>
|
81
77
|
),
|
82
78
|
{ inline: true, propTables: [Button] }
|
83
|
-
)
|
79
|
+
);
|
84
80
|
|
85
81
|
storiesOf('Button').addWithInfo(
|
86
82
|
'simple usage (JSX description)',
|
87
83
|
<div>
|
88
84
|
<h2>This is a JSX info section</h2>
|
89
85
|
<p>
|
90
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
91
|
-
|
92
|
-
|
93
|
-
nulla.
|
86
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ornare massa rutrum metus
|
87
|
+
commodo, a mattis velit dignissim. Fusce vestibulum turpis sed massa egestas pharetra. Sed at
|
88
|
+
libero nulla.
|
94
89
|
</p>
|
95
90
|
<p>
|
96
|
-
<a href="https://github.com/storybookjs/react-storybook-addon-info">
|
97
|
-
This is a link
|
98
|
-
</a>
|
91
|
+
<a href="https://github.com/storybookjs/react-storybook-addon-info">This is a link</a>
|
99
92
|
</p>
|
100
93
|
<p>
|
101
94
|
<img src="https://storybook.js.org/images/placeholders/350x150.png" />
|
@@ -105,27 +98,22 @@ storiesOf('Button').addWithInfo(
|
|
105
98
|
<div>
|
106
99
|
<Button label="The Button" onClick={action('onClick')} />
|
107
100
|
<br />
|
108
|
-
<p>
|
109
|
-
Click the "?" mark at top-right to view the info.
|
110
|
-
</p>
|
101
|
+
<p>Click the "?" mark at top-right to view the info.</p>
|
111
102
|
</div>
|
112
103
|
)
|
113
|
-
)
|
104
|
+
);
|
114
105
|
|
115
106
|
storiesOf('Button').addWithInfo(
|
116
107
|
'simple usage (inline JSX description)',
|
117
108
|
<div>
|
118
109
|
<h2>This is a JSX info section</h2>
|
119
110
|
<p>
|
120
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
121
|
-
|
122
|
-
|
123
|
-
nulla.
|
111
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ornare massa rutrum metus
|
112
|
+
commodo, a mattis velit dignissim. Fusce vestibulum turpis sed massa egestas pharetra. Sed at
|
113
|
+
libero nulla.
|
124
114
|
</p>
|
125
115
|
<p>
|
126
|
-
<a href="https://github.com/storybookjs/react-storybook-addon-info">
|
127
|
-
This is a link
|
128
|
-
</a>
|
116
|
+
<a href="https://github.com/storybookjs/react-storybook-addon-info">This is a link</a>
|
129
117
|
</p>
|
130
118
|
<p>
|
131
119
|
<img src="https://storybook.js.org/images/placeholders/350x150.png" />
|
@@ -133,7 +121,7 @@ storiesOf('Button').addWithInfo(
|
|
133
121
|
</div>,
|
134
122
|
() => <Button label="The Button" onClick={action('onClick')} />,
|
135
123
|
{ inline: true }
|
136
|
-
)
|
124
|
+
);
|
137
125
|
|
138
126
|
storiesOf('Button').addWithInfo(
|
139
127
|
'simple usage (maxPropsInLine === 1)',
|
@@ -142,7 +130,7 @@ storiesOf('Button').addWithInfo(
|
|
142
130
|
`,
|
143
131
|
() => <Button label="The Button" onClick={action('onClick')} />,
|
144
132
|
{ inline: true, maxPropsIntoLine: 1 }
|
145
|
-
)
|
133
|
+
);
|
146
134
|
|
147
135
|
storiesOf('Button').addWithInfo(
|
148
136
|
'simple usage (maxPropObjectKeys === 5)',
|
@@ -151,7 +139,7 @@ storiesOf('Button').addWithInfo(
|
|
151
139
|
`,
|
152
140
|
() => <Button label="The Button" object={{ a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 }} />,
|
153
141
|
{ inline: true, maxPropObjectKeys: 5 }
|
154
|
-
)
|
142
|
+
);
|
155
143
|
|
156
144
|
storiesOf('Button').addWithInfo(
|
157
145
|
'simple usage (maxPropArrayLength === 8)',
|
@@ -160,7 +148,7 @@ storiesOf('Button').addWithInfo(
|
|
160
148
|
`,
|
161
149
|
() => <Button label="The Button" array={[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]} />,
|
162
150
|
{ inline: true, maxPropArrayLength: 8 }
|
163
|
-
)
|
151
|
+
);
|
164
152
|
|
165
153
|
storiesOf('Button').addWithInfo(
|
166
154
|
'simple usage (maxPropStringLength === 10)',
|
@@ -169,7 +157,7 @@ storiesOf('Button').addWithInfo(
|
|
169
157
|
`,
|
170
158
|
() => <Button label="The Button" string="1 2 3 4 5 6 7 8" />,
|
171
159
|
{ inline: true, maxPropStringLength: 5 }
|
172
|
-
)
|
160
|
+
);
|
173
161
|
|
174
162
|
storiesOf('Button').addWithInfo(
|
175
163
|
'with custom styles',
|
@@ -180,19 +168,17 @@ storiesOf('Button').addWithInfo(
|
|
180
168
|
() => <Button label="The Button" onClick={action('onClick')} />,
|
181
169
|
{
|
182
170
|
inline: true,
|
183
|
-
styles: stylesheet => {
|
171
|
+
styles: (stylesheet) => {
|
184
172
|
stylesheet.infoPage = {
|
185
|
-
backgroundColor: '#ccc'
|
186
|
-
}
|
187
|
-
return stylesheet
|
188
|
-
}
|
173
|
+
backgroundColor: '#ccc',
|
174
|
+
};
|
175
|
+
return stylesheet;
|
176
|
+
},
|
189
177
|
}
|
190
|
-
)
|
178
|
+
);
|
191
179
|
|
192
180
|
storiesOf('shared/ProgressBar', module)
|
193
181
|
.addDecorator(withKnobs)
|
194
182
|
.addWithInfo('default style', () => (
|
195
|
-
<ProgressBar progress={number('progress', 25)}
|
196
|
-
delay={number('delay', 500)}
|
197
|
-
/>
|
183
|
+
<ProgressBar progress={number('progress', 25)} delay={number('delay', 500)} />
|
198
184
|
));
|