@stencil/react-output-target
Version:
React output target for @stencil/core components.
19 lines (17 loc) • 4.95 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("node:fs/promises"),s=require("node:path");async function N(t,n){try{const{name:o}=JSON.parse(await d.readFile(s.join(t,"package.json"),"utf8"));return typeof o=="string"&&o?o:n}catch{return n}}async function O(t){try{return await d.access(t),!0}catch{return!1}}async function P(t,n,o,p){await d.mkdir(s.join(t,"src"),{recursive:!0});const y={name:n,version:"0.0.1",type:"module",main:"./dist/index.js",types:"./dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"}},scripts:{build:"tsc",dev:"tsc --watch"},peerDependencies:{react:"^18 || ^19","react-dom":"^18 || ^19"},dependencies:{[o]:p},devDependencies:{typescript:">=4 <7"}},m={compilerOptions:{target:"ES2022",module:"esnext",moduleResolution:"bundler",declaration:!0,rootDir:"src",outDir:"dist",strict:!0,skipLibCheck:!0},include:["src/**/*.ts","src/**/*.tsx"]};await Promise.all([d.writeFile(s.join(t,".gitignore"),`dist/
node_modules/
`,"utf8"),d.writeFile(s.join(t,"package.json"),JSON.stringify(y,null,2)+`
`,"utf8"),d.writeFile(s.join(t,"tsconfig.json"),JSON.stringify(m,null,2)+`
`,"utf8"),d.writeFile(s.join(t,"src","index.ts"),`// Re-exports React wrappers generated by @stencil/react-output-target.
// src/components.ts is populated by \`stencil build\` — do not edit manually.
export * from './components.js';
`,"utf8")])}const R={init:{id:"@stencil/react-output-target",displayName:"React",description:"Type-safe React wrappers for your Stencil components",async run({config:t,workspaceRoot:n,prompts:o,nypm:p,openStencilConfig:y}){const{intro:m,outro:T,text:w,confirm:h,spinner:x,isCancel:l,cancel:g,log:u}=o;m("React output target");const r=await y();if(r.outputTargetsContains("reactOutputTarget(")){const e=await h({message:"reactOutputTarget is already in stencil.config.ts — reconfigure?",initialValue:!1});if(l(e)||!e){g("Skipping React setup.");return}}let i;const k=await N(t.rootDir,t.fsNamespace);let c=`${t.fsNamespace}-react`;if(n){const e=await w({message:"Wrapper package name?",placeholder:c,defaultValue:c});if(l(e)){g("Setup cancelled.");return}c=e,i=s.join(s.dirname(t.rootDir),"react")}else{const e=`../${t.fsNamespace}-react`,a=await w({message:"Wrapper package directory? (relative to stencil.config.ts)",placeholder:e,defaultValue:e});if(l(a)){g("Setup cancelled.");return}i=s.join(t.rootDir,a)}const C=s.relative(t.rootDir,s.join(i,"src")).replace(/\\/g,"/"),f=await h({message:"Enable server-side rendering (SSR)?",initialValue:!1});if(l(f)){g("Setup cancelled.");return}if(f&&!n){const e=await w({message:"React wrapper npm package name? (used as clientModule in the SSR config)",placeholder:c,defaultValue:c});if(l(e)){g("Setup cancelled.");return}c=e}const j=!await O(i);if(j){const e=x();e.start(`Scaffolding wrapper package at ${s.relative(n??t.rootDir,i)}`);try{const a=n?await p.detectPackageManager(n):void 0,v=(a==null?void 0:a.name)==="pnpm"||(a==null?void 0:a.name)==="bun"||(a==null?void 0:a.name)==="yarn"&&a.majorVersion!=="1"?"workspace:*":`file:${s.relative(i,t.rootDir).replace(/\\/g,"/")}`;await P(i,c,k,v),e.stop("Wrapper package scaffolded")}catch(a){e.stop("Scaffolding failed — continuing"),u.warn(`Could not scaffold wrapper package: ${a}`)}}const D=t.generateExportMaps===!0?"ssr":"dist/ssr",S=f?`reactOutputTarget({
outDir: '${C}',
hydrateModule: '${k}/${D}',
clientModule: '${c}',
})`:`reactOutputTarget({ outDir: '${C}' })`;try{r.addImport("@stencil/react-output-target",["reactOutputTarget"]),r.outputTargetsContains("type: 'standalone'")||r.outputTargetsContains('type: "standalone"')||r.outputTargetsContains("type: 'dist-custom-elements'")||r.outputTargetsContains('type: "dist-custom-elements"')||r.addOutputTarget("{ type: 'standalone' }"),f&&(r.outputTargetsContains("type: 'ssr'")||r.outputTargetsContains('type: "ssr"')||r.outputTargetsContains("type: 'dist-hydrate-script'")||r.outputTargetsContains('type: "dist-hydrate-script"')||r.addOutputTarget("{ type: 'ssr' }")),r.replaceOutputTarget("reactOutputTarget(",S)||r.addOutputTarget(S),await r.save(),u.success("stencil.config.ts updated")}catch(e){u.warn(`Could not automatically update stencil.config.ts (${e}). Add manually:
import { reactOutputTarget } from '@stencil/react-output-target';
// in outputTargets:
${S}`+(f?`
{ type: 'ssr' }`:""))}u.info("Installing @stencil/react-output-target..."),await p.addDependency(["@stencil/react-output-target"],{cwd:t.rootDir,dev:!0}),u.success("Installed @stencil/react-output-target"),j&&await O(i)&&(u.info("Installing React peer dependencies in wrapper package..."),await p.addDependency(["@stencil/react-output-target"],{cwd:i}),await p.addDependency(["react","react-dom","@types/react","@types/react-dom","typescript"],{cwd:i,dev:!0}),u.success("React peer dependencies installed")),T("React output target configured")}}};exports.wizard=R;
//# sourceMappingURL=wizard.cjs.map