@storybook/codemod 0.0.0-pr-23609-sha-f47ef339
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/README.md +262 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +1 -0
- package/dist/transforms/add-component-parameters.d.ts +22 -0
- package/dist/transforms/add-component-parameters.js +1 -0
- package/dist/transforms/csf-2-to-3.d.ts +8 -0
- package/dist/transforms/csf-2-to-3.js +3 -0
- package/dist/transforms/csf-hoist-story-annotations.d.ts +26 -0
- package/dist/transforms/csf-hoist-story-annotations.js +1 -0
- package/dist/transforms/mdx-to-csf.d.ts +7 -0
- package/dist/transforms/mdx-to-csf.js +61 -0
- package/dist/transforms/move-builtin-addons.d.ts +3 -0
- package/dist/transforms/move-builtin-addons.js +1 -0
- package/dist/transforms/storiesof-to-csf.d.ts +24 -0
- package/dist/transforms/storiesof-to-csf.js +1 -0
- package/dist/transforms/update-addon-info.d.ts +27 -0
- package/dist/transforms/update-addon-info.js +1 -0
- package/dist/transforms/update-organisation-name.d.ts +25 -0
- package/dist/transforms/update-organisation-name.js +1 -0
- package/dist/transforms/upgrade-deprecated-types.d.ts +10 -0
- package/dist/transforms/upgrade-deprecated-types.js +2 -0
- package/dist/transforms/upgrade-hierarchy-separators.d.ts +3 -0
- package/dist/transforms/upgrade-hierarchy-separators.js +1 -0
- package/jest.config.js +9 -0
- package/package.json +102 -0
- package/project.json +6 -0
- package/src/index.ts +103 -0
- package/src/lib/utils.test.js +9 -0
- package/src/lib/utils.ts +29 -0
- package/src/transforms/__testfixtures__/add-component-parameters/add-component-parameters.input.js +44 -0
- package/src/transforms/__testfixtures__/add-component-parameters/add-component-parameters.output.snapshot +68 -0
- package/src/transforms/__testfixtures__/csf-hoist-story-annotations/basic.input.js +25 -0
- package/src/transforms/__testfixtures__/csf-hoist-story-annotations/basic.output.snapshot +27 -0
- package/src/transforms/__testfixtures__/csf-hoist-story-annotations/overrides.input.js +25 -0
- package/src/transforms/__testfixtures__/csf-hoist-story-annotations/overrides.output.snapshot +28 -0
- package/src/transforms/__testfixtures__/csf-hoist-story-annotations/variable.input.js +13 -0
- package/src/transforms/__testfixtures__/csf-hoist-story-annotations/variable.output.snapshot +17 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/basic.input.mdx +18 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/basic.output.snapshot +40 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/component-id.input.mdx +6 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/component-id.output.snapshot +17 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/decorators.input.mdx +8 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/decorators.output.snapshot +18 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/exclude-stories.input.mdx +19 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/exclude-stories.output.snapshot +39 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/parameters.input.mdx +14 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/parameters.output.snapshot +23 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/plaintext.input.mdx +3 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/plaintext.output.snapshot +11 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/story-function.input.mdx +10 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/story-function.output.snapshot +18 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/story-parameters.input.mdx +18 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/story-parameters.output.snapshot +32 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/story-refs.input.mdx +22 -0
- package/src/transforms/__testfixtures__/mdx-to-csf/story-refs.output.snapshot +34 -0
- package/src/transforms/__testfixtures__/move-builtin-addons/default.input.js +2 -0
- package/src/transforms/__testfixtures__/move-builtin-addons/default.output.snapshot +8 -0
- package/src/transforms/__testfixtures__/move-builtin-addons/with-no-change.input.js +3 -0
- package/src/transforms/__testfixtures__/move-builtin-addons/with-no-change.output.snapshot +7 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/basic.input.js +18 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/basic.output.snapshot +45 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/collision.input.js +11 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/collision.output.snapshot +38 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/const.input.js +1 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/const.output.snapshot +13 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/decorators.input.js +9 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/decorators.output.snapshot +18 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/default.input.js +7 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/default.output.snapshot +17 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/digit.input.js +1 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/digit.output.js +5 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/digit.output.snapshot +9 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/export-destructuring.input.js +11 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/export-destructuring.output.snapshot +23 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/export-function.input.js +12 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/export-function.output.snapshot +23 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/export-names.input.js +14 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/export-names.output.snapshot +26 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/exports.input.js +2 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/exports.output.snapshot +16 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/module.input.js +12 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/module.output.snapshot +16 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/multi.input.js +14 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/multi.output.snapshot +39 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/parameters-as-var.input.js +8 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/parameters-as-var.output.snapshot +20 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/parameters.input.js +10 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/parameters.output.snapshot +23 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/storiesof-var.input.js +11 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/storiesof-var.output.snapshot +23 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/story-decorators.input.js +11 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/story-decorators.output.snapshot +29 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/story-parameters.input.js +14 -0
- package/src/transforms/__testfixtures__/storiesof-to-csf/story-parameters.output.snapshot +32 -0
- package/src/transforms/__testfixtures__/update-addon-info/update-addon-info.input.js +184 -0
- package/src/transforms/__testfixtures__/update-addon-info/update-addon-info.output.snapshot +184 -0
- package/src/transforms/__testfixtures__/update-organisation-name/update-organisation-name.input.js +19 -0
- package/src/transforms/__testfixtures__/update-organisation-name/update-organisation-name.output.snapshot +23 -0
- package/src/transforms/__testfixtures__/upgrade-hierarchy-separators/csf.input.js +3 -0
- package/src/transforms/__testfixtures__/upgrade-hierarchy-separators/csf.output.snapshot +7 -0
- package/src/transforms/__testfixtures__/upgrade-hierarchy-separators/dynamic-storiesof.input.js +5 -0
- package/src/transforms/__testfixtures__/upgrade-hierarchy-separators/dynamic-storiesof.output.snapshot +9 -0
- package/src/transforms/__testfixtures__/upgrade-hierarchy-separators/storiesof.input.js +8 -0
- package/src/transforms/__testfixtures__/upgrade-hierarchy-separators/storiesof.output.snapshot +12 -0
- package/src/transforms/__tests__/csf-2-to-3.test.ts +439 -0
- package/src/transforms/__tests__/mdx-to-csf.test.ts +628 -0
- package/src/transforms/__tests__/transforms.tests.js +32 -0
- package/src/transforms/__tests__/upgrade-deprecated-types.test.ts +170 -0
- package/src/transforms/add-component-parameters.js +62 -0
- package/src/transforms/csf-2-to-3.ts +336 -0
- package/src/transforms/csf-hoist-story-annotations.js +97 -0
- package/src/transforms/mdx-to-csf.ts +340 -0
- package/src/transforms/move-builtin-addons.js +32 -0
- package/src/transforms/storiesof-to-csf.js +277 -0
- package/src/transforms/update-addon-info.js +114 -0
- package/src/transforms/update-organisation-name.js +71 -0
- package/src/transforms/upgrade-deprecated-types.ts +142 -0
- package/src/transforms/upgrade-hierarchy-separators.js +39 -0
- package/tsconfig.json +10 -0
@@ -0,0 +1 @@
|
|
1
|
+
var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __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 __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var move_builtin_addons_exports={};__export(move_builtin_addons_exports,{default:()=>transformer});module.exports=__toCommonJS(move_builtin_addons_exports);function transformer(file,api){let j=api.jscodeshift,createImportDeclaration=(specifiers,source)=>j.importDeclaration(specifiers.map(s=>j.importSpecifier(j.identifier(s))),j.literal(source)),deprecates={action:[["action"],"@storybook/addon-actions"],linkTo:[["linkTo"],"@storybook/addon-links"]};return j(file.source).find(j.ImportDeclaration).filter(i=>i.value.source.value==="@storybook/react").forEach(i=>{let importStatement=i.value;importStatement.specifiers=importStatement.specifiers.filter(specifier=>{let item=deprecates[specifier.local.name];if(item){let[specifiers,moduleName]=item;return i.insertAfter(createImportDeclaration(specifiers,moduleName)),!1}return specifier})}).toSource({quote:"single"})}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
/**
|
2
|
+
* Convert a legacy story API to component story format
|
3
|
+
*
|
4
|
+
* For example:
|
5
|
+
*
|
6
|
+
* ```
|
7
|
+
* input { Button } from './Button';
|
8
|
+
* storiesOf('Button', module).add('story', () => <Button label="The Button" />);
|
9
|
+
* ```
|
10
|
+
*
|
11
|
+
* Becomes:
|
12
|
+
*
|
13
|
+
* ```
|
14
|
+
* input { Button } from './Button';
|
15
|
+
* export default {
|
16
|
+
* title: 'Button'
|
17
|
+
* }
|
18
|
+
* export const story = () => <Button label="The Button" />;
|
19
|
+
*
|
20
|
+
* NOTES: only support chained storiesOf() calls
|
21
|
+
*/
|
22
|
+
declare function transformer(file: any, api: any, options: any): any;
|
23
|
+
|
24
|
+
export { transformer as default };
|
@@ -0,0 +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.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,0 +1,27 @@
|
|
1
|
+
/**
|
2
|
+
* Takes the deprecated addon-info API, addWithInfo, and
|
3
|
+
* converts to the new withInfo API.
|
4
|
+
*
|
5
|
+
* Example of deprecated addWithInfo API:
|
6
|
+
*
|
7
|
+
* storiesOf('Button')
|
8
|
+
* .addWithInfo(
|
9
|
+
* 'story name',
|
10
|
+
* 'Story description.',
|
11
|
+
* () => (
|
12
|
+
* <Button label="The Button" />
|
13
|
+
* )
|
14
|
+
* )
|
15
|
+
*
|
16
|
+
* Converts to the new withInfo API:
|
17
|
+
*
|
18
|
+
* storiesOf('Button')
|
19
|
+
* .add('story name', withInfo(
|
20
|
+
* 'Story description.'
|
21
|
+
* )(() => (
|
22
|
+
* <Button label="The Button" />
|
23
|
+
* )))
|
24
|
+
*/
|
25
|
+
declare function transformer(file: any, api: any): any;
|
26
|
+
|
27
|
+
export { transformer as default };
|
@@ -0,0 +1 @@
|
|
1
|
+
var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __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 __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var update_addon_info_exports={};__export(update_addon_info_exports,{default:()=>transformer});module.exports=__toCommonJS(update_addon_info_exports);function transformer(file,api){let j=api.jscodeshift,root=j(file.source),getOptions=args=>args[3]===void 0?args[2]===void 0?[args[0]]:[args[1]]:[j.objectExpression([j.property("init",j.identifier("text"),args[1]),...args[3].properties])],withInfo=addWithInfoExpression=>{let{node}=addWithInfoExpression,args=node.arguments,storyComponent=args[2]?args[2]:args[1];return node.callee.property.name="add",node.arguments=[args[0],j.callExpression(j.callExpression(j.identifier("withInfo"),getOptions(args)),[storyComponent])],node},checkWithInfoImport=()=>{root.find(j.ImportDeclaration).filter(imp=>imp.node.source.value==="@storybook/addon-info").size()||root.find(j.ImportDeclaration).at(-1).insertAfter(j.importDeclaration([j.importSpecifier(j.identifier("withInfo"))],j.literal("@storybook/addon-info")))},addWithInfoExpressions=root.find(j.CallExpression,{callee:{property:{name:"addWithInfo"}}});return addWithInfoExpressions.size()&&(checkWithInfoImport(),addWithInfoExpressions.replaceWith(withInfo)),root.toSource()}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
declare function transformer(file: any, api: any): any;
|
2
|
+
declare const packageNames: {
|
3
|
+
'@kadira/react-storybook-decorator-centered': string;
|
4
|
+
'@kadira/storybook-addons': string;
|
5
|
+
'@kadira/storybook-addon-actions': string;
|
6
|
+
'@kadira/storybook-addon-comments': string;
|
7
|
+
'@kadira/storybook-addon-graphql': string;
|
8
|
+
'@kadira/storybook-addon-info': string;
|
9
|
+
'@kadira/storybook-addon-knobs': string;
|
10
|
+
'@kadira/storybook-addon-links': string;
|
11
|
+
'@kadira/storybook-addon-notes': string;
|
12
|
+
'@kadira/storybook-addon-options': string;
|
13
|
+
'@kadira/storybook-channels': string;
|
14
|
+
'@kadira/storybook-channel-postmsg': string;
|
15
|
+
'@kadira/storybook-channel-websocket': string;
|
16
|
+
'@kadira/storybook-ui': string;
|
17
|
+
'@kadira/react-native-storybook': string;
|
18
|
+
'@kadira/react-storybook': string;
|
19
|
+
'@kadira/getstorybook': string;
|
20
|
+
'@kadira/storybook': string;
|
21
|
+
storyshots: string;
|
22
|
+
getstorybook: string;
|
23
|
+
};
|
24
|
+
|
25
|
+
export { transformer as default, packageNames };
|
@@ -0,0 +1 @@
|
|
1
|
+
var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __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 __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var update_organisation_name_exports={};__export(update_organisation_name_exports,{default:()=>transformer,packageNames:()=>packageNames});module.exports=__toCommonJS(update_organisation_name_exports);var packageNames={"@kadira/react-storybook-decorator-centered":"@storybook/addon-centered","@kadira/storybook-addons":"@storybook/preview-api","@kadira/storybook-addon-actions":"@storybook/addon-actions","@kadira/storybook-addon-comments":"@storybook/addon-comments","@kadira/storybook-addon-graphql":"@storybook/addon-graphql","@kadira/storybook-addon-info":"@storybook/addon-info","@kadira/storybook-addon-knobs":"@storybook/addon-knobs","@kadira/storybook-addon-links":"@storybook/addon-links","@kadira/storybook-addon-notes":"@storybook/addon-notes","@kadira/storybook-addon-options":"@storybook/addon-options","@kadira/storybook-channels":"@storybook/channels","@kadira/storybook-channel-postmsg":"@storybook/channel-postmessage","@kadira/storybook-channel-websocket":"@storybook/channel-websocket","@kadira/storybook-ui":"@storybook/manager","@kadira/react-native-storybook":"@storybook/react-native","@kadira/react-storybook":"@storybook/react","@kadira/getstorybook":"@storybook/cli","@kadira/storybook":"@storybook/react",storyshots:"@storybook/addon-storyshots",getstorybook:"@storybook/cli"};function transformer(file,api){let j=api.jscodeshift,packageNamesKeys=Object.keys(packageNames),getMatch=oldpart=>packageNamesKeys.find(newpart=>oldpart.match(newpart)),getNewPackageName=oldPackageName=>{let match=getMatch(oldPackageName);if(match){let replacement=packageNames[match];return oldPackageName.replace(match,replacement)}return oldPackageName},updatePackageName=declaration=>(declaration.node.source.value=getNewPackageName(declaration.node.source.value),declaration.node);return j(file.source).find(j.ImportDeclaration).replaceWith(updatePackageName).toSource({quote:"single"})}0&&(module.exports={packageNames});
|
@@ -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});
|
@@ -0,0 +1 @@
|
|
1
|
+
var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __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 __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var upgrade_hierarchy_separators_exports={};__export(upgrade_hierarchy_separators_exports,{default:()=>transformer});module.exports=__toCommonJS(upgrade_hierarchy_separators_exports);function upgradeSeparator(path){return path.replace(/[|.]/g,"/")}function transformer(file,api,options){let j=api.jscodeshift,root=j(file.source);return root.find(j.CallExpression).filter(call=>call.node.callee.name==="storiesOf").filter(call=>call.node.arguments.length>0&&["Literal","StringLiteral"].includes(call.node.arguments[0].type)).forEach(call=>{let arg0=call.node.arguments[0];arg0.value=upgradeSeparator(arg0.value)}),root.find(j.ExportDefaultDeclaration).filter(def=>def.node.declaration.properties.map(p=>p.key.name).includes("title")).forEach(def=>{def.node.declaration&&def.node.declaration.properties&&def.node.declaration.properties.forEach(p=>{p.key.name==="title"&&(p.value.value=upgradeSeparator(p.value.value))})}),root.toSource({quote:"single"})}
|
package/jest.config.js
ADDED
package/package.json
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
{
|
2
|
+
"name": "@storybook/codemod",
|
3
|
+
"version": "0.0.0-pr-23609-sha-f47ef339",
|
4
|
+
"description": "A collection of codemod scripts written with JSCodeshift",
|
5
|
+
"keywords": [
|
6
|
+
"storybook"
|
7
|
+
],
|
8
|
+
"homepage": "https://github.com/storybookjs/storybook/tree/next/code/lib/codemod",
|
9
|
+
"bugs": {
|
10
|
+
"url": "https://github.com/storybookjs/storybook/issues"
|
11
|
+
},
|
12
|
+
"repository": {
|
13
|
+
"type": "git",
|
14
|
+
"url": "https://github.com/storybookjs/storybook.git",
|
15
|
+
"directory": "code/lib/codemod"
|
16
|
+
},
|
17
|
+
"funding": {
|
18
|
+
"type": "opencollective",
|
19
|
+
"url": "https://opencollective.com/storybook"
|
20
|
+
},
|
21
|
+
"license": "MIT",
|
22
|
+
"sideEffects": false,
|
23
|
+
"exports": {
|
24
|
+
".": {
|
25
|
+
"types": "./dist/index.d.ts",
|
26
|
+
"node": "./dist/index.js",
|
27
|
+
"require": "./dist/index.js"
|
28
|
+
},
|
29
|
+
"./dist/transforms/add-component-parameters.js": "./dist/transforms/add-component-parameters.js",
|
30
|
+
"./dist/transforms/csf-2-to-3.js": "./dist/transforms/csf-2-to-3.js",
|
31
|
+
"./dist/transforms/csf-hoist-story-annotations.js": "./dist/transforms/csf-hoist-story-annotations.js",
|
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
|
+
"./dist/transforms/storiesof-to-csf.js": "./dist/transforms/storiesof-to-csf.js",
|
35
|
+
"./dist/transforms/update-addon-info.js": "./dist/transforms/update-addon-info.js",
|
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",
|
38
|
+
"./dist/transforms/upgrade-hierarchy-separators.js": "./dist/transforms/upgrade-hierarchy-separators.js",
|
39
|
+
"./package.json": "./package.json"
|
40
|
+
},
|
41
|
+
"main": "dist/index.js",
|
42
|
+
"types": "dist/index.d.ts",
|
43
|
+
"scripts": {
|
44
|
+
"check": "../../../scripts/prepare/check.ts",
|
45
|
+
"prep": "../../../scripts/prepare/bundle.ts"
|
46
|
+
},
|
47
|
+
"dependencies": {
|
48
|
+
"@babel/core": "^7.22.9",
|
49
|
+
"@babel/preset-env": "^7.22.9",
|
50
|
+
"@babel/types": "^7.22.5",
|
51
|
+
"@storybook/csf": "^0.1.0",
|
52
|
+
"@storybook/csf-tools": "0.0.0-pr-23609-sha-f47ef339",
|
53
|
+
"@storybook/node-logger": "0.0.0-pr-23609-sha-f47ef339",
|
54
|
+
"@storybook/types": "0.0.0-pr-23609-sha-f47ef339",
|
55
|
+
"@types/cross-spawn": "^6.0.2",
|
56
|
+
"cross-spawn": "^7.0.3",
|
57
|
+
"globby": "^11.0.2",
|
58
|
+
"jscodeshift": "^0.14.0",
|
59
|
+
"lodash": "^4.17.21",
|
60
|
+
"prettier": "^2.8.0",
|
61
|
+
"recast": "^0.23.1"
|
62
|
+
},
|
63
|
+
"devDependencies": {
|
64
|
+
"@types/jscodeshift": "^0.11.6",
|
65
|
+
"ansi-regex": "^5.0.1",
|
66
|
+
"jest": "^29.3.1",
|
67
|
+
"jest-specific-snapshot": "^8.0.0",
|
68
|
+
"mdast-util-mdx-jsx": "^2.1.2",
|
69
|
+
"mdast-util-mdxjs-esm": "^1.3.1",
|
70
|
+
"remark": "^14.0.2",
|
71
|
+
"remark-mdx": "^2.3.0",
|
72
|
+
"ts-dedent": "^2.2.0",
|
73
|
+
"typescript": "~4.9.3",
|
74
|
+
"unist-util-is": "^5.2.0",
|
75
|
+
"unist-util-select": "^4.0.3",
|
76
|
+
"unist-util-visit": "^4.1.2",
|
77
|
+
"util": "^0.12.4",
|
78
|
+
"vfile": "^5.3.7"
|
79
|
+
},
|
80
|
+
"publishConfig": {
|
81
|
+
"access": "public"
|
82
|
+
},
|
83
|
+
"bundler": {
|
84
|
+
"entries": [
|
85
|
+
"./src/index.ts",
|
86
|
+
"./src/transforms/add-component-parameters.js",
|
87
|
+
"./src/transforms/csf-2-to-3.ts",
|
88
|
+
"./src/transforms/csf-hoist-story-annotations.js",
|
89
|
+
"./src/transforms/mdx-to-csf.ts",
|
90
|
+
"./src/transforms/move-builtin-addons.js",
|
91
|
+
"./src/transforms/storiesof-to-csf.js",
|
92
|
+
"./src/transforms/update-addon-info.js",
|
93
|
+
"./src/transforms/update-organisation-name.js",
|
94
|
+
"./src/transforms/upgrade-deprecated-types.ts",
|
95
|
+
"./src/transforms/upgrade-hierarchy-separators.js"
|
96
|
+
],
|
97
|
+
"formats": [
|
98
|
+
"cjs"
|
99
|
+
]
|
100
|
+
},
|
101
|
+
"gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17"
|
102
|
+
}
|
package/project.json
ADDED
package/src/index.ts
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
/* eslint-disable no-param-reassign */
|
2
|
+
/* eslint import/prefer-default-export: "off" */
|
3
|
+
import fs from 'fs';
|
4
|
+
import path from 'path';
|
5
|
+
import { promisify } from 'util';
|
6
|
+
import globby from 'globby';
|
7
|
+
import { sync as spawnSync } from 'cross-spawn';
|
8
|
+
import { jscodeshiftToPrettierParser } from './lib/utils';
|
9
|
+
|
10
|
+
export {
|
11
|
+
default as updateOrganisationName,
|
12
|
+
packageNames,
|
13
|
+
} from './transforms/update-organisation-name';
|
14
|
+
|
15
|
+
export { default as updateAddonInfo } from './transforms/update-addon-info';
|
16
|
+
|
17
|
+
const TRANSFORM_DIR = `${__dirname}/transforms`;
|
18
|
+
|
19
|
+
export function listCodemods() {
|
20
|
+
return fs
|
21
|
+
.readdirSync(TRANSFORM_DIR)
|
22
|
+
.filter((fname) => fname.endsWith('.js'))
|
23
|
+
.map((fname) => fname.slice(0, -3));
|
24
|
+
}
|
25
|
+
|
26
|
+
const renameAsync = promisify(fs.rename);
|
27
|
+
|
28
|
+
async function renameFile(file: any, from: any, to: any, { logger }: any) {
|
29
|
+
const newFile = file.replace(from, to);
|
30
|
+
logger.log(`Rename: ${file} ${newFile}`);
|
31
|
+
return renameAsync(file, newFile);
|
32
|
+
}
|
33
|
+
|
34
|
+
export async function runCodemod(codemod: any, { glob, logger, dryRun, rename, parser }: any) {
|
35
|
+
const codemods = listCodemods();
|
36
|
+
if (!codemods.includes(codemod)) {
|
37
|
+
throw new Error(`Unknown codemod ${codemod}. Run --list for options.`);
|
38
|
+
}
|
39
|
+
|
40
|
+
let renameParts = null;
|
41
|
+
if (rename) {
|
42
|
+
renameParts = rename.split(':');
|
43
|
+
if (renameParts.length !== 2) {
|
44
|
+
throw new Error(`Codemod rename: expected format "from:to", got "${rename}"`);
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
// jscodeshift/prettier know how to handle .ts/.tsx extensions,
|
49
|
+
// so if the user uses one of those globs, we can auto-infer
|
50
|
+
let inferredParser = parser;
|
51
|
+
if (!parser) {
|
52
|
+
const extension = path.extname(glob).slice(1);
|
53
|
+
const knownParser = jscodeshiftToPrettierParser(extension);
|
54
|
+
if (knownParser !== 'babel') inferredParser = extension;
|
55
|
+
}
|
56
|
+
|
57
|
+
const files = await globby([glob, '!**/node_modules', '!**/dist']);
|
58
|
+
logger.log(`=> Applying ${codemod}: ${files.length} files`);
|
59
|
+
if (files.length === 0) {
|
60
|
+
logger.log(`=> No matching files for glob: ${glob}`);
|
61
|
+
return;
|
62
|
+
}
|
63
|
+
|
64
|
+
if (!dryRun && files.length > 0) {
|
65
|
+
const parserArgs = inferredParser ? ['--parser', inferredParser] : [];
|
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
|
+
],
|
80
|
+
{
|
81
|
+
stdio: 'inherit',
|
82
|
+
shell: true,
|
83
|
+
}
|
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;';
|
94
|
+
}
|
95
|
+
|
96
|
+
if (renameParts) {
|
97
|
+
const [from, to] = renameParts;
|
98
|
+
logger.log(`=> Renaming ${rename}: ${files.length} files`);
|
99
|
+
await Promise.all(
|
100
|
+
files.map((file) => renameFile(file, new RegExp(`${from}$`), to, { logger }))
|
101
|
+
);
|
102
|
+
}
|
103
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { sanitizeName } from './utils';
|
2
|
+
|
3
|
+
it('should sanitize names', () => {
|
4
|
+
expect(sanitizeName('basic')).toMatchInlineSnapshot(`"Basic"`);
|
5
|
+
expect(sanitizeName('with space')).toMatchInlineSnapshot(`"WithSpace"`);
|
6
|
+
expect(sanitizeName('default')).toMatchInlineSnapshot(`"Default"`);
|
7
|
+
expect(sanitizeName('w/punctuation')).toMatchInlineSnapshot(`"WPunctuation"`);
|
8
|
+
expect(sanitizeName('5')).toMatchInlineSnapshot(`"_5"`);
|
9
|
+
});
|
package/src/lib/utils.ts
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
import camelCase from 'lodash/camelCase.js';
|
2
|
+
import upperFirst from 'lodash/upperFirst.js';
|
3
|
+
|
4
|
+
export const sanitizeName = (name: string) => {
|
5
|
+
let key = upperFirst(camelCase(name));
|
6
|
+
// prepend _ if name starts with a digit
|
7
|
+
if (/^\d/.test(key)) {
|
8
|
+
key = `_${key}`;
|
9
|
+
}
|
10
|
+
// prepend _ if name starts with a digit
|
11
|
+
if (/^\d/.test(key)) {
|
12
|
+
key = `_${key}`;
|
13
|
+
}
|
14
|
+
return key;
|
15
|
+
};
|
16
|
+
|
17
|
+
export function jscodeshiftToPrettierParser(parser?: string) {
|
18
|
+
const parserMap: Record<string, string> = {
|
19
|
+
babylon: 'babel',
|
20
|
+
flow: 'flow',
|
21
|
+
ts: 'typescript',
|
22
|
+
tsx: 'typescript',
|
23
|
+
};
|
24
|
+
|
25
|
+
if (!parser) {
|
26
|
+
return 'babel';
|
27
|
+
}
|
28
|
+
return parserMap[parser] || 'babel';
|
29
|
+
}
|
package/src/transforms/__testfixtures__/add-component-parameters/add-component-parameters.input.js
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
/* eslint-disable */
|
2
|
+
import React from 'react';
|
3
|
+
import Button from './Button';
|
4
|
+
|
5
|
+
import { storiesOf, configure } from '@storybook/react';
|
6
|
+
import { action } from '@storybook/addon-actions';
|
7
|
+
|
8
|
+
storiesOf('Button', module).add('basic', () => <Button label="The Button" />);
|
9
|
+
|
10
|
+
storiesOf('Button').add('no module', () => <Button label="The Button" />);
|
11
|
+
|
12
|
+
storiesOf('Button', module).add('with story parameters', () => <Button label="The Button" />, {
|
13
|
+
header: false,
|
14
|
+
inline: true,
|
15
|
+
});
|
16
|
+
|
17
|
+
storiesOf('Button', module)
|
18
|
+
.addParameters({ foo: 1 })
|
19
|
+
.add('with kind parameters', () => <Button label="The Button" />);
|
20
|
+
|
21
|
+
storiesOf('Button', module)
|
22
|
+
.addParameters({ component: Button })
|
23
|
+
.add('with existing component parameters', () => <Button label="The Button" />);
|
24
|
+
|
25
|
+
storiesOf('Button', module).add('complex story', () => (
|
26
|
+
<div>
|
27
|
+
<Button label="The Button" onClick={action('onClick')} />
|
28
|
+
<br />
|
29
|
+
</div>
|
30
|
+
));
|
31
|
+
|
32
|
+
storiesOf('Root|Some/Button', module).add('with path', () => <Button label="The Button" />);
|
33
|
+
|
34
|
+
storiesOf('Some.Button', module).add('with dot-path', () => <Button label="The Button" />);
|
35
|
+
|
36
|
+
storiesOf('Some.Button', module)
|
37
|
+
.addDecorator(withKnobs)
|
38
|
+
.add('with decorator', () => <Button label="The Button" />);
|
39
|
+
|
40
|
+
// This isn't a valid story, but it tests the `import { comp } from ...` case
|
41
|
+
storiesOf('action', module).add('non-default component export', () => <action />);
|
42
|
+
|
43
|
+
// This shouldn't get modified since the story name doesn't match
|
44
|
+
storiesOf('something', module).add('non-matching story', () => <Button label="The Button" />);
|
@@ -0,0 +1,68 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`add-component-parameters transforms correctly using "add-component-parameters.input.js" data 1`] = `
|
4
|
+
"/* eslint-disable */
|
5
|
+
import React from 'react';
|
6
|
+
import Button from './Button';
|
7
|
+
|
8
|
+
import { storiesOf, configure } from '@storybook/react';
|
9
|
+
import { action } from '@storybook/addon-actions';
|
10
|
+
|
11
|
+
storiesOf('Button', module).addParameters({
|
12
|
+
component: Button
|
13
|
+
}).add('basic', () => <Button label=\\"The Button\\" />);
|
14
|
+
|
15
|
+
storiesOf('Button').addParameters({
|
16
|
+
component: Button
|
17
|
+
}).add('no module', () => <Button label=\\"The Button\\" />);
|
18
|
+
|
19
|
+
storiesOf('Button', module).addParameters({
|
20
|
+
component: Button
|
21
|
+
}).add('with story parameters', () => <Button label=\\"The Button\\" />, {
|
22
|
+
header: false,
|
23
|
+
inline: true,
|
24
|
+
});
|
25
|
+
|
26
|
+
storiesOf('Button', module).addParameters({
|
27
|
+
component: Button
|
28
|
+
})
|
29
|
+
.addParameters({ foo: 1 })
|
30
|
+
.add('with kind parameters', () => <Button label=\\"The Button\\" />);
|
31
|
+
|
32
|
+
storiesOf('Button', module).addParameters({
|
33
|
+
component: Button
|
34
|
+
})
|
35
|
+
.addParameters({ component: Button })
|
36
|
+
.add('with existing component parameters', () => <Button label=\\"The Button\\" />);
|
37
|
+
|
38
|
+
storiesOf('Button', module).addParameters({
|
39
|
+
component: Button
|
40
|
+
}).add('complex story', () => (
|
41
|
+
<div>
|
42
|
+
<Button label=\\"The Button\\" onClick={action('onClick')} />
|
43
|
+
<br />
|
44
|
+
</div>
|
45
|
+
));
|
46
|
+
|
47
|
+
storiesOf('Root|Some/Button', module).addParameters({
|
48
|
+
component: Button
|
49
|
+
}).add('with path', () => <Button label=\\"The Button\\" />);
|
50
|
+
|
51
|
+
storiesOf('Some.Button', module).addParameters({
|
52
|
+
component: Button
|
53
|
+
}).add('with dot-path', () => <Button label=\\"The Button\\" />);
|
54
|
+
|
55
|
+
storiesOf('Some.Button', module).addParameters({
|
56
|
+
component: Button
|
57
|
+
})
|
58
|
+
.addDecorator(withKnobs)
|
59
|
+
.add('with decorator', () => <Button label=\\"The Button\\" />);
|
60
|
+
|
61
|
+
// This isn't a valid story, but it tests the \`import { comp } from ...\` case
|
62
|
+
storiesOf('action', module).addParameters({
|
63
|
+
component: action
|
64
|
+
}).add('non-default component export', () => <action />);
|
65
|
+
|
66
|
+
// This shouldn't get modified since the story name doesn't match
|
67
|
+
storiesOf('something', module).add('non-matching story', () => <Button label=\\"The Button\\" />);"
|
68
|
+
`;
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import Button from './Button';
|
3
|
+
import { action } from '@storybook/addon-actions';
|
4
|
+
|
5
|
+
export default {
|
6
|
+
title: 'Button',
|
7
|
+
};
|
8
|
+
|
9
|
+
export const story1 = () => <Button label="Story 1" />;
|
10
|
+
|
11
|
+
export const story2 = () => <Button label="Story 2" onClick={action('click')} />;
|
12
|
+
story2.story = { name: 'second story' };
|
13
|
+
|
14
|
+
export const story3 = () => (
|
15
|
+
<div>
|
16
|
+
<Button label="The Button" onClick={action('onClick')} />
|
17
|
+
<br />
|
18
|
+
</div>
|
19
|
+
);
|
20
|
+
const baz = 17;
|
21
|
+
story3.story = {
|
22
|
+
name: 'complex story',
|
23
|
+
parameters: { foo: { bar: baz } },
|
24
|
+
decorators: [(storyFn) => <bar>{storyFn}</bar>],
|
25
|
+
};
|
@@ -0,0 +1,27 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`csf-hoist-story-annotations transforms correctly using "basic.input.js" data 1`] = `
|
4
|
+
"import React from 'react';
|
5
|
+
import Button from './Button';
|
6
|
+
import { action } from '@storybook/addon-actions';
|
7
|
+
|
8
|
+
export default {
|
9
|
+
title: 'Button',
|
10
|
+
};
|
11
|
+
|
12
|
+
export const story1 = () => <Button label=\\"Story 1\\" />;
|
13
|
+
|
14
|
+
export const story2 = () => <Button label=\\"Story 2\\" onClick={action('click')} />;
|
15
|
+
story2.storyName = 'second story';
|
16
|
+
|
17
|
+
export const story3 = () => (
|
18
|
+
<div>
|
19
|
+
<Button label=\\"The Button\\" onClick={action('onClick')} />
|
20
|
+
<br />
|
21
|
+
</div>
|
22
|
+
);
|
23
|
+
const baz = 17;
|
24
|
+
story3.storyName = 'complex story';
|
25
|
+
story3.parameters = { foo: { bar: baz } };
|
26
|
+
story3.decorators = [(storyFn) => <bar>{storyFn}</bar>];"
|
27
|
+
`;
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import Button from './Button';
|
3
|
+
import { action } from '@storybook/addon-actions';
|
4
|
+
|
5
|
+
export default {
|
6
|
+
title: 'Button',
|
7
|
+
};
|
8
|
+
|
9
|
+
export const story1 = () => <Button label="Story 1" />;
|
10
|
+
|
11
|
+
export const story2 = () => <Button label="Story 2" onClick={action('click')} />;
|
12
|
+
story2.story = { name: 'second story' };
|
13
|
+
story2.story.parameters = { foo: 'bar' };
|
14
|
+
|
15
|
+
export const story3 = () => (
|
16
|
+
<div>
|
17
|
+
<Button label="The Button" onClick={action('onClick')} />
|
18
|
+
<br />
|
19
|
+
</div>
|
20
|
+
);
|
21
|
+
const baz = 17;
|
22
|
+
story3.story = {};
|
23
|
+
story3.story.name = 'complex story';
|
24
|
+
story3.story.parameters = { foo: { bar: baz } };
|
25
|
+
story3.story.decorators = [(storyFn) => <bar>{storyFn}</bar>];
|
@@ -0,0 +1,28 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`csf-hoist-story-annotations transforms correctly using "overrides.input.js" data 1`] = `
|
4
|
+
"import React from 'react';
|
5
|
+
import Button from './Button';
|
6
|
+
import { action } from '@storybook/addon-actions';
|
7
|
+
|
8
|
+
export default {
|
9
|
+
title: 'Button',
|
10
|
+
};
|
11
|
+
|
12
|
+
export const story1 = () => <Button label=\\"Story 1\\" />;
|
13
|
+
|
14
|
+
export const story2 = () => <Button label=\\"Story 2\\" onClick={action('click')} />;
|
15
|
+
story2.storyName = 'second story';
|
16
|
+
story2.parameters = { foo: 'bar' };
|
17
|
+
|
18
|
+
export const story3 = () => (
|
19
|
+
<div>
|
20
|
+
<Button label=\\"The Button\\" onClick={action('onClick')} />
|
21
|
+
<br />
|
22
|
+
</div>
|
23
|
+
);
|
24
|
+
const baz = 17;
|
25
|
+
story3.storyName = 'complex story';
|
26
|
+
story3.parameters = { foo: { bar: baz } };
|
27
|
+
story3.decorators = [(storyFn) => <bar>{storyFn}</bar>];"
|
28
|
+
`;
|