@cfp-studio/plugin-react 17.2.1 → 17.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +1 -1
- package/package.json +6 -6
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{createAnalyzer as e}from"@cfp-studio/analyzer-api/analyzer";import{createFileSystemReader as t,createStackedReader as n}from"@cfp-studio/vfs";import r from"node:fs";import i from"node:path";import a from"typescript";import o from"node:url";import{decodePreviewableId as s,defineSpecialTypes as c,generatePreviewableId as l}from"@cfp-studio/analyzer-api";import{parseSerializableValue as u}from"@cfp-studio/serializable-values";import{extractArgs as d,extractCsf3Stories as f,extractStoriesInfo as p,resolvePreviewableId as m}from"@cfp-studio/storybook-helpers";import{EMPTY_OBJECT_TYPE as h,NODE_TYPE as g,UNKNOWN_TYPE as _,arrayType as v,dereferenceType as y,functionType as b,helpers as x,maybeOptionalType as S,objectType as C,stripUnusedTypes as w}from"@cfp-studio/type-analyzer";import T from"@vitejs/plugin-react";import{polyfillNode as E}from"esbuild-plugin-polyfill-node";function D(e,t){for(let n of e.statements)if(a.isExpressionStatement(n)&&a.isBinaryExpression(n.expression)&&n.expression.operatorToken.kind===a.SyntaxKind.EqualsToken&&a.isPropertyAccessExpression(n.expression.left)&&a.isIdentifier(n.expression.left.expression)){if(n.expression.left.expression.text!==t)continue;if(n.expression.left.name.text===`propTypes`)return n.expression.right}else if(a.isClassDeclaration(n)&&n.name){if(n.name.text!==t)continue;for(let e of n.members)if(a.isPropertyDeclaration(e)&&e.initializer&&e.name.getText()===`propTypes`)return e.initializer}return null}function O(e,t,n,r,i){let a=t.sourceFile(n),o=null;a&&(o=D(a,r));let s=null;return s=o?A(t,o):k(e,t,i),{props:s.type,types:{...s.collected}}}function k(e,t,n){let r=n.getParameters()[0];if(!r)return{type:h,collected:{}};if(!r.valueDeclaration)return{type:_,collected:{}};let i=t.checker.getTypeOfSymbolAtLocation(r,r.valueDeclaration);try{let{type:e,collected:n}=t.resolveType(i);if([e]=y(e,n,[]),e.kind===`object`&&a.isParameter(r.valueDeclaration)&&a.isObjectBindingPattern(r.valueDeclaration.name)){let t=r.valueDeclaration.name,n=new Set,i=new Set,o=!1;for(let e of t.elements){if(e.dotDotDotToken){o=!0;break}let t=e.propertyName||e.name;if(!a.isIdentifier(t)){o=!0;break}n.add(t.text),e.initializer&&i.add(t.text)}o||(e=C(Object.fromEntries(Object.entries(e.fields).filter(([e])=>n.has(e)).map(([e,t])=>[e,S(t,i.has(e))]))))}return{type:e,collected:n}}catch(n){e.warn(`Unable to resolve props type for ${t.checker.typeToString(i)}`),e.error(n.toString())}return{type:_,collected:{}}}function A(e,t){let n=e.checker.getTypeAtLocation(t),r={},i={};for(let t of n.getProperties())r[t.name]=(()=>{if(!t.valueDeclaration)return _;let n=e.checker.getTypeAtLocation(t.valueDeclaration),r=e.resolveTypeArguments(n),a=r.types[0];return a?(i={...i,...r.collected},S(a,n.symbol.name===`Requireable`)):_})();let a=C(r);return{type:a,collected:w(i,[a])}}async function j(e,t,n,r){let o=t.sourceFile(r);if(!o)return[];let c=[];for(let e of o.statements)if(a.isExportAssignment(e)){if(a.isIdentifier(e.expression))continue;c.push([`default`,e,e.expression])}else if(a.isVariableStatement(e))for(let t of e.declarationList.declarations)!a.isIdentifier(t.name)||!t.initializer||c.push([t.name.text,e,t.initializer]);else if(a.isFunctionDeclaration(e)){let t=!!e.modifiers?.find(e=>e.kind===a.SyntaxKind.ExportKeyword)&&!!e.modifiers?.find(e=>e.kind===a.SyntaxKind.DefaultKeyword),n=e.name?.text;(t||n)&&c.push([n||`default`,e,e])}else a.isClassDeclaration(e)&&e.name&&c.push([e.name.text,e,e]);let m=p(o);e.debug(`**storiresInfo: ${m}`);let h=[],g=d(o),v=x.extractExportedNames(o);async function y(i,a,o){if(o===`default`&&m)return null;let s=g[o],c=o===`default`||!!v[o],l=N(t.checker,a);if(m&&c&&(s||l?.parameters.length===0)){let r=M(e,t,n,m.component);return{...i,analyze:async()=>({args:s?{sourcePosition:{start:s.getStart(),end:s.getEnd()},value:await u(s)}:null}),associatedComponent:r}}return l?{...i,exported:c,analyze:async()=>O(e,t,r,o,l)}:null}for(let[e,t,a]of c){let o=await y({id:l({filePath:i.relative(n,r),name:e}),sourcePosition:{start:t.getStart(),end:t.getEnd()}},a,e);o&&h.push(o)}return[...h,...await f(n,t,o,async r=>{let{filePath:a}=s(r),o=(await j(e,t,n,i.join(n,a))).find(e=>e.id===r);return!o||!(`exported`in o)?{props:_,types:{}}:o.analyze()})]}function M(e,t,n,r){let a=m(n,t.checker,r);return r&&a?{id:a,analyze:async()=>{let o=N(t.checker,r);if(!o)return{props:_,types:{}};let{filePath:c,name:l}=s(a);return O(e,t,i.join(n,c),l,o)}}:null}function N(e,t){let n=e.getTypeAtLocation(t);if(n.flags===a.TypeFlags.Any&&a.isCallExpression(t)&&a.isPropertyAccessExpression(t.expression)&&a.isIdentifier(t.expression.name)&&t.expression.name.text===`bind`){let r=e.getSymbolAtLocation(t.expression.expression);r?.valueDeclaration&&a.isVariableDeclaration(r.valueDeclaration)&&r.valueDeclaration.initializer&&(n=e.getTypeAtLocation(r.valueDeclaration.initializer))}for(let e of n.getCallSignatures())if(P(e.getReturnType()))return e;if(n.symbol){let r=e.getTypeOfSymbolAtLocation(n.symbol,t);for(let e of r.getConstructSignatures())if(e.getReturnType().getProperty(`render`))return e}return null}function P(e){return!!I(e)}const F=new Set([`Element`,`ReactElement`]);function I(e){if(e.isUnion()){for(let t of e.types)if(I(t))return!0}return F.has(e.symbol?.getEscapedName().toString())}const L=c({Component:g,ComponentClass:b(g),FunctionComponent:b(g),ReactElement:g,ReactNode:g,ReactNodeArray:v(g),ReactPortal:g}),R=e({typeAnalyzerOptions:({reader:e,rootDir:s})=>{let c=o.fileURLToPath(new URL(`.`,import.meta.url)),l=i.join(c,`..`,`types`),u=i.join(c,`..`,`node_modules`),d=r.existsSync(l)?l:u;return{reader:n([e,t({mapping:{from:d,to:i.join(s,`node_modules`)},watch:!1}),...d===l?[t({mapping:{from:l,to:i.join(s,`node_modules`,`@types`)},watch:!1})]:[]]),specialTypes:L,tsCompilerOptions:{jsx:a.JsxEmit.ReactJSX,jsxImportSource:`react`}}},crawlFile:({logger:e,resolver:t,rootDir:n,absoluteFilePath:r})=>j(e,t,n,r)}),z=/import (\* as )?React[ ,]/;function B(){return{name:`previewjs:react-js-imports`,async transform(e,t){return t.includes(`node_modules`)||i.extname(t)!==`.js`||z.test(e)?e:`import React from 'react';${e}`}}}const V={info:{apiVersion:5,name:`@cfp-studio/plugin-react`},isCompatible:async e=>{let t=await e.react?.readInstalledVersion();if(!t)return!1;let[n,r]=t.split(`.`).map(e=>Number.parseInt(e));return Number.isNaN(n)||Number.isNaN(r)?!1:n>=17||n===16&&r>=14},async create({rootDir:e,reader:t,logger:n,dependencies:r}){let a=o.fileURLToPath(new URL(`.`,import.meta.url)),s=R({rootDir:e,reader:t,logger:n});return{defaultWrapperPath:`__previewjs__/Wrapper.tsx`,previewDirPath:i.join(a,`..`,`preview`),...s,viteConfig:e=>{let t=e.find(e=>e.name.startsWith(`vite:react-`));return{optimizeDeps:{esbuildOptions:{plugins:r.next?[E()]:[]}},resolve:{alias:{"react-native":`react-native-web`}},plugins:[B(),...e,...t?[]:[T()],{name:`previewjs:update-react-import`,async transform(e,t){if(!t.endsWith(`__previewjs_internal__/renderer/index.tsx`))return;let n=Number.parseInt(await r.react?.readInstalledVersion()||`0`);return e.replace(/__PREVIEWJS_PLUGIN_REACT_IMPORT_PATH__/g,n>=18?`./render-18`:`./render-16`)}}]}}}}};export{V as default};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cfp-studio/plugin-react",
|
|
3
|
-
"version": "17.
|
|
3
|
+
"version": "17.3.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist",
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
"@vitejs/plugin-react": "4.3.4",
|
|
16
16
|
"esbuild-plugin-polyfill-node": "0.3.0",
|
|
17
17
|
"typescript": "5.9.3",
|
|
18
|
-
"@cfp-studio/analyzer-api": "0.1.
|
|
18
|
+
"@cfp-studio/analyzer-api": "0.1.13",
|
|
19
19
|
"@cfp-studio/type-analyzer": "10.1.8",
|
|
20
|
-
"@cfp-studio/
|
|
20
|
+
"@cfp-studio/serializable-values": "9.0.8",
|
|
21
21
|
"@cfp-studio/storybook-helpers": "6.0.2",
|
|
22
|
-
"@cfp-studio/
|
|
22
|
+
"@cfp-studio/vfs": "2.1.6"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@playwright/test": "1.64.1",
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
"react-dom": "18.3.1",
|
|
34
34
|
"vite": "6.4.5",
|
|
35
35
|
"vitest": "5.0.5",
|
|
36
|
-
"@cfp-studio/
|
|
36
|
+
"@cfp-studio/core": "1.0.6",
|
|
37
37
|
"@cfp-studio/testing": "14.0.1",
|
|
38
|
-
"@cfp-studio/
|
|
38
|
+
"@cfp-studio/iframe": "18.2.0"
|
|
39
39
|
},
|
|
40
40
|
"engines": {
|
|
41
41
|
"node": ">=20"
|