@knapsack/renderer-react 4.68.5 → 4.68.6--canary.4549.dbe7f16.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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/renderer-react.ts","../src/utils.ts","../src/react-creators.ts"],"sourcesContent":["export * from './renderer-react';\n","import sleep from 'sleep-promise';\nimport { KnapsackRendererWebpackBase } from '@knapsack/renderer-webpack-base';\nimport { pascalCase, Except, isFirstLetterCapital } from '@knapsack/utils';\nimport { knapsackEvents, log, KnapsackRendererBase } from '@knapsack/app';\nimport {\n KsRendererClientGlobal,\n KnapsackFile,\n KsJsImport,\n isSlottedText,\n isSlottedTemplateReference,\n isSlottedTemplateDemo,\n KnapsackPatternTemplate,\n KsTemplateSpec,\n TemplateSuggestion,\n rendererIds,\n RendererId,\n} from '@knapsack/types';\nimport type {\n KnapsackRenderParams,\n KnapsackTemplateRenderer,\n KnapsackTemplateRendererBase,\n KnapsackTemplateRendererResults,\n Patterns,\n} from '@knapsack/app/types';\nimport {\n exists,\n findUpPkgJson,\n getJsExportNames,\n readFile,\n formatCode,\n} from '@knapsack/file-utils';\nimport type { ReactNode } from 'react';\nimport { join, relative, parse } from 'path';\nimport {\n clearInferSpecCache,\n copyReactAssets,\n getDemoAppUsage,\n getReactDocs,\n getUsage,\n} from './utils';\nimport { createReactPattern } from './react-creators';\n\nconst { pkg } = findUpPkgJson(__dirname);\n// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\nlog.setupUpdateNotifier({ ...pkg, name: pkg.name!, version: pkg.version! });\n\n// static methods only\nconst { createSlotOptionsHtmlTags } = KnapsackRendererBase;\n\nexport type DemoWrapperProps = {\n children: React.ReactNode;\n patternsUsed: {\n patternId: string;\n templateId: string;\n demoId?: string;\n }[];\n} & Except<KnapsackRenderParams, 'patternManifest'>;\n\nexport class KnapsackReactRenderer\n extends KnapsackRendererWebpackBase\n implements KnapsackTemplateRenderer\n{\n /**\n * `react.js` & `react-dom.js` root relative paths\n */\n assets: string[];\n babelConfig: Record<string, unknown>;\n creators: KnapsackTemplateRenderer['creators'];\n private demoWrapperPath: string;\n\n private disableReactStrictMode?: boolean;\n\n constructor({\n webpackConfig,\n demoWrapperPath = join(__dirname, './demo-wrapper.mjs'),\n id = rendererIds.react,\n disableReactStrictMode,\n }: {\n webpackConfig?: ConstructorParameters<\n typeof KnapsackRendererWebpackBase\n >[0]['webpackConfig'];\n demoWrapperPath?: string;\n /** When using React v18+, this option allows a workspace to _disable_ React's Strict Mode from running in Knapsack's React Renderer (StrictMode is enabled by default).\n *\n * See https://reactjs.org/docs/strict-mode.html for more info\n * */\n disableReactStrictMode?: boolean;\n /** Don't set if calling from `knapsack.config.js`, only use if creating a new Renderer based on the React Renderer */\n id?: RendererId;\n } = {}) {\n super({\n id,\n extension: '.jsx',\n language: 'jsx',\n webpackConfig,\n });\n this.language = 'jsx';\n this.assets = [];\n this.demoWrapperPath = demoWrapperPath;\n\n // Half-borrowing the API Synax for this from the latest version of Next.js\n this.disableReactStrictMode = disableReactStrictMode;\n this.creators = [createReactPattern];\n }\n\n async init(opt: { patterns: Patterns; cacheDir: string }): Promise<void> {\n await super.init(opt);\n this.assets = await copyReactAssets(this.outputDir, this.publicPath);\n if (!(await exists(this.demoWrapperPath))) {\n throw new Error(\n `Could not find demo wrapper at: \"${this.demoWrapperPath}\"`,\n );\n }\n }\n\n getMeta: KnapsackTemplateRenderer['getMeta'] = () => ({\n id: this.id,\n title: 'React',\n aliasUse: 'optional',\n aliasTitle: 'Named Export',\n aliasIsJsNamedExport: true,\n aliasDescription:\n 'If `export X` was used instead of `export default`, then provide X.',\n enableDataDemos: true,\n enableTemplateDemos: true,\n hasSlotsSupport: true,\n hasSlotOptionsSupport: true,\n version: pkg.version,\n hasInferSpecSupport: true,\n syntaxHighlightingLanguage: 'jsx',\n hasTemplateSuggestionsSupport: true,\n prototypingTemplate: {\n path: '@knapsack/renderer-react/prototype-template',\n spec: {\n isInferred: false,\n props: {\n type: 'object',\n properties: {},\n },\n slots: {\n children: { title: 'Children' },\n },\n },\n },\n });\n\n changeCase(str: string): string {\n return pascalCase(str);\n }\n\n createWebpackConfig(): ReturnType<\n KnapsackRendererWebpackBase['createWebpackConfig']\n > {\n const config = super.createWebpackConfig();\n\n config.externals = {\n react: 'React',\n 'react-dom': 'ReactDOM',\n };\n\n return config;\n }\n\n getJsImports(): ReturnType<KnapsackRendererWebpackBase['getJsImports']> {\n const imports = super.getJsImports();\n imports.push(\n {\n type: 'extra',\n importInfo: {\n type: 'default',\n path: this.demoWrapperPath,\n name: 'DemoWrapper',\n },\n },\n {\n type: 'extra',\n importInfo: {\n type: 'default',\n path: join(__dirname, './error-catcher.mjs'),\n name: 'ErrorCatcher',\n },\n },\n );\n return imports;\n }\n\n async prepClientRenderResults({\n usage,\n demoApp,\n imports: xImports,\n renderOptions: { pattern, template, demo },\n }: {\n usage: string;\n demoApp: string;\n imports: KsJsImport[];\n renderOptions: KnapsackRenderParams;\n }): Promise<KnapsackTemplateRendererResults> {\n const extraImportNames = this.getJsImports().flatMap((imp) =>\n imp.type === 'extra' ? [imp.importInfo.name] : [],\n );\n const { imports, isDeclaredVarsUnique, nameCollisions } =\n this.makeKsJsImportsUnique({ imports: xImports });\n\n if (!isDeclaredVarsUnique) {\n log.error(`${nameCollisions.join(', ')} are declared multiple times`, {\n imports,\n });\n }\n\n // import names; i.e. `KsButton`\n const importNames = [\n ...imports.map(({ importInfo: { name } }) => name),\n ...extraImportNames,\n ];\n\n const patternsUsed: {\n patternId: string;\n templateId: string;\n demoId?: string;\n }[] = imports.flatMap((imp) => {\n if (imp.type === 'pattern-template') {\n return [\n {\n patternId: imp.patternId,\n templateId: imp.templateId,\n },\n ];\n }\n if (imp.type === 'pattern-template-demo') {\n return [\n {\n patternId: imp.patternId,\n templateId: imp.templateId,\n demoId: imp.demoId,\n },\n ];\n }\n return [];\n });\n\n const demoWrapperProps: Omit<DemoWrapperProps, 'children'> = {\n patternsUsed,\n pattern,\n template,\n demo,\n };\n const demoWrapperCode = await getUsage({\n templateName: 'DemoWrapper',\n props: demoWrapperProps,\n children: `<DemoApp />`,\n // extraProps,\n });\n\n /**\n * IMPORTANT: this function is stringified and then executed in the browser - it cannot use anything in scope (other functions, vars, etc)\n */\n async function renderReact({\n patterns,\n theExtraImportNames,\n ksGlobal,\n }: {\n patterns: typeof patternsUsed;\n theExtraImportNames: typeof extraImportNames;\n ksGlobal: KsRendererClientGlobal<ReactNode>;\n }): Promise<Record<string, ReactNode>> {\n if (!ksGlobal) {\n throw new Error('\"window.knapsack\" is null');\n }\n const components = await ksGlobal.getAllImports({\n patterns,\n extras: theExtraImportNames.map((name) => ({ name })),\n });\n return components;\n }\n\n let code = `\n\n${renderReact.toString()}\n${renderReact.name}({\n ksGlobal: window.knapsack,\n patterns: ${JSON.stringify(patternsUsed)},\n theExtraImportNames: ${JSON.stringify(extraImportNames)},\n}).then((components) => {\n const { ${importNames.join(', ')} } = components;\n const root = document.getElementById('render-root');\n\n ${demoApp}\n\n const reactDomVersion = parseInt(ReactDOM.version.split('.')[0], 10);\n\n const ReactRendererResult = () => {\n if (reactDomVersion < 17 || ${this.disableReactStrictMode}){\n return (\n <ErrorCatcher>\n ${demoWrapperCode}\n </ErrorCatcher>\n )\n }\n\n return (\n <React.StrictMode>\n <ErrorCatcher>\n ${demoWrapperCode}\n </ErrorCatcher>\n </React.StrictMode>\n )\n };\n\n\n if (reactDomVersion > 17){\n ReactDOM.createRoot(root).render(\n <ReactRendererResult />\n )\n } else {\n ReactDOM.render(\n <ReactRendererResult />,\n root\n );\n }\n}).catch((err) => {\n console.error(err);\n const root = document.getElementById('render-root');\n // Create a new <div> element to contain the error message\n const errorMsgDiv = document.createElement('div');\n // Insert the new <div> element before the existing element\n root.parentNode.insertBefore(errorMsgDiv, root);\n // add error message so users can see it\n errorMsgDiv.innerHTML = '<h1>Component Error</h1><p>' + err.message + '</p>';\n});\n `;\n\n let codeHadError = false;\n let errorHtmlMsg = '';\n\n try {\n code = await this.babelCodeForBrowser({\n code,\n });\n } catch (e) {\n codeHadError = true;\n console.log(code);\n console.log('---original code before babel error ^---');\n console.trace(e.message);\n code = `console.error(${JSON.stringify(e.message)});`;\n errorHtmlMsg = `<pre><code>${e.message}</code></pre>`;\n }\n\n if (!codeHadError) {\n try {\n code = await formatCode({\n contents: code,\n path: 'x.tsx', // doing this to set format language\n });\n } catch (e) {\n codeHadError = true;\n console.log(code);\n console.log('---original code before prettier error ^---');\n console.trace(e.message);\n code = `console.error(${JSON.stringify(e.message)});`;\n errorHtmlMsg = `<pre><code>${e.message}</code></pre>`;\n }\n }\n\n const html = `\n ${this.assets.map((asset) => `<script src=\"${asset}\"></script>`).join('\\n')}\n\n ${this.createHtmlTagsForAssetPaths({\n assets: this.getWebpackAssetPaths(),\n // we need the scripts to finish adding methods to the global knapsack object synchronously before the client-side code runs that is in the <script> tag below\n scriptTagsAreAsync: false,\n })}\n\n <div id=\"render-root\" class=\"knapsack-pattern-direct-parent\" data-dev-note=\"Knapsack React Template Wrapper\"></div>\n <script type=\"application/javascript\">${code}</script>\n${errorHtmlMsg}\n\n `;\n\n return {\n ok: !codeHadError,\n html: await formatCode({\n contents: html,\n path: 'x.html', // doing this to set format language\n }),\n usage,\n templateLanguage: this.language,\n };\n }\n\n async render(\n opt: KnapsackRenderParams,\n ): Promise<KnapsackTemplateRendererResults> {\n if (KnapsackReactRenderer.isTemplateDemo(opt.demo)) {\n // when getting a template demos path sometimes we have a race condition where the client asks for it before the server knows about it.\n // so we try several times in a row to get it\n /** The amount of time in ms to wait between attempts; when we run out of array items, we give up and throw the error */\n const waits = [5, 10, 20, 50, 100, 1000, 1000];\n let templateDemoPath: string;\n let attempt = 0;\n\n while (true) {\n try {\n templateDemoPath = opt.patternManifest.getTemplateDemoAbsolutePath({\n patternId: opt.pattern.id,\n templateId: opt.template.id,\n demoId: opt.demo.id,\n });\n // got it!\n break;\n } catch (e) {\n const waitTime = waits[attempt];\n if (!waitTime) {\n throw new Error(e);\n }\n attempt += 1;\n // eslint-disable-next-line no-await-in-loop\n await sleep(waitTime);\n }\n }\n\n const [templateFileContents, { usage, imports }] = await Promise.all([\n readFile(templateDemoPath),\n this.getUsageAndImports(opt),\n ]);\n const demoApp = await getDemoAppUsage({\n children: usage,\n });\n const results = await this.prepClientRenderResults({\n usage: templateFileContents,\n demoApp,\n imports,\n renderOptions: opt,\n });\n\n return results;\n }\n\n if (KnapsackReactRenderer.isDataDemo(opt.demo)) {\n const { usage, imports } = await this.getUsageAndImports(opt);\n const { code: importCode } = this.createJsImportCodeBlock({\n imports,\n });\n\n const [demoAppUsage, demoApp] = await Promise.all([\n getDemoAppUsage({\n children: usage,\n imports: importCode,\n }),\n getDemoAppUsage({\n children: usage,\n }),\n ]);\n\n return this.prepClientRenderResults({\n demoApp,\n usage: demoAppUsage,\n imports,\n renderOptions: opt,\n });\n }\n }\n\n async getUsageAndImports(opt: KnapsackRenderParams): Promise<{\n usage: string;\n imports: KsJsImport[];\n }> {\n const { pattern, template, patternManifest, demo } = opt;\n if (demo?.type && KnapsackReactRenderer.isDataDemo(demo)) {\n const {\n data: { props, slots, slotsOptionsComputed },\n } = demo;\n\n const importInfo = this.getJsImport({\n patternId: pattern.id,\n templateId: template.id,\n });\n if (!importInfo) {\n throw new Error(\n `Could not find import for pattern-template: ${pattern.id}-${template.id}`,\n );\n }\n const { type, name: templateName } = importInfo.importInfo;\n\n const importInfos: KsJsImport[] = [importInfo];\n const children: string[] = [];\n const extraProps: { key: string; value: string }[] = [];\n\n if (slots) {\n const slotNames = Object.keys(slots);\n const slotUsages = await Promise.all(\n slotNames.map(async (slotName) => {\n const slotItems = slots[slotName];\n const slotItemsUsages = await Promise.all(\n slotItems\n // remove any incomplete item - happens when users are filling out form\n .filter((slotItem) => {\n if (!isSlottedText(slotItem)) {\n if (!slotItem.patternId) return false;\n if (!slotItem.templateId) return false;\n if (isSlottedTemplateDemo(slotItem) && !slotItem.demoId) {\n return false;\n }\n }\n return true;\n })\n .map(async (slotItem) => {\n if (isSlottedText(slotItem)) {\n if (slotItems.length === 1 && slotName !== 'children') {\n // The ` prevents multi-line strings from causing error (even though they don't show a line break)\n return `\\`${slotItem.text}\\``;\n }\n return slotItem.text;\n }\n\n const slotPattern = patternManifest.getPattern(\n slotItem.patternId,\n );\n\n const slotTemplate = slotPattern.templates.find(\n (t) => t.id === slotItem.templateId,\n );\n if (isSlottedTemplateReference(slotItem)) {\n const { usage, imports } = await this.getUsageAndImports({\n pattern: slotPattern,\n template: slotTemplate,\n patternManifest,\n });\n importInfos.push(...imports);\n return usage;\n }\n if (isSlottedTemplateDemo(slotItem)) {\n const { usage, imports } = await this.getUsageAndImports({\n pattern: slotPattern,\n template: slotTemplate,\n demo:\n slotItem.demo ||\n this.patterns.demosById[slotItem.demoId],\n patternManifest,\n });\n importInfos.push(...imports);\n return usage;\n }\n\n throw new Error(\n `Unknown slot item: ${JSON.stringify(slotItem)}`,\n );\n }),\n );\n return {\n slotName,\n slotItemsUsages,\n };\n }),\n );\n\n slotUsages.forEach(({ slotName, slotItemsUsages }) => {\n const slotOptionsComputed = slotsOptionsComputed?.[slotName];\n const { openTag, closeTag } = createSlotOptionsHtmlTags({\n slotOptionsComputed,\n classAttributeName: 'className',\n stylesValueType: 'object',\n });\n if (openTag) {\n if (slotName === 'children') {\n children.push(openTag);\n } else {\n extraProps.push({\n key: slotName,\n value: openTag,\n });\n }\n }\n\n slotItemsUsages.forEach((usage) => {\n if (slotName === 'children') {\n children.push(usage);\n } else {\n extraProps.push({\n key: slotName,\n value: usage,\n });\n }\n });\n\n if (closeTag) {\n if (slotName === 'children') {\n children.push(closeTag);\n } else {\n extraProps.push({\n key: slotName,\n value: closeTag,\n });\n }\n }\n });\n }\n\n const usage = await getUsage({\n templateName,\n props,\n children: children.join('\\n'),\n extraProps,\n });\n\n return {\n usage,\n imports: importInfos,\n };\n }\n\n if (demo?.type && KnapsackReactRenderer.isTemplateDemo(demo)) {\n const importInfo = this.getJsImport({\n patternId: pattern.id,\n templateId: template.id,\n demoId: demo.id,\n });\n if (!importInfo) {\n throw new Error(\n `Could not find import for pattern-template-demo: ${pattern.id}-${template.id}-${demo.id}`,\n );\n }\n const { type, name: templateName } = importInfo.importInfo;\n\n const usage = await getUsage({ templateName });\n\n return {\n usage,\n imports: [importInfo],\n };\n }\n\n if (!demo) {\n const importInfo = this.getJsImport({\n patternId: pattern.id,\n templateId: template.id,\n });\n if (!importInfo) {\n throw new Error(\n `Could not find import for pattern-template: ${pattern.id}-${template.id}`,\n );\n }\n const { type, name: templateName } = importInfo.importInfo;\n\n return {\n /**\n * i.e. Given a React Component, `Button`, normally this would be `<Button>` with a demo, but since there is none this will just be a reference to it: `Button`\n * @see {KsSlotInfo['isTemplateReference']}\n * @see {SlottedTemplate}\n */\n usage: templateName,\n imports: [importInfo],\n };\n }\n\n throw new Error(\n `Unhandled demo type for ${pattern.id}-${template.id}: ${JSON.stringify(\n demo,\n )}`,\n );\n }\n\n async getUsage(opt: KnapsackRenderParams): Promise<string> {\n const { usage } = await this.getUsageAndImports(opt);\n return usage;\n }\n\n inferSpec: KnapsackTemplateRendererBase['inferSpec'] = async ({\n template,\n templatePath,\n }: {\n template: KnapsackPatternTemplate;\n templatePath: string;\n }): Promise<KsTemplateSpec | false> => {\n const spec = await getReactDocs({\n src: template.path,\n exportName: template.alias || 'default',\n resolveFromDir: this.config.data,\n });\n if (spec !== false) {\n const totalProps = Object.keys(spec?.props?.properties || {}).length;\n const totalSlots = Object.keys(spec?.slots || {}).length;\n if (totalProps === 0 && totalSlots === 0) {\n return false;\n }\n }\n return spec;\n };\n\n async watch(opt: Parameters<KnapsackTemplateRendererBase['watch']>[0]) {\n await super.watch(opt);\n knapsackEvents.onPatternTemplateChanged(() => {\n clearInferSpecCache();\n });\n }\n\n getTemplateMeta: KnapsackTemplateRendererBase['getTemplateMeta'] = async ({\n pattern,\n template,\n }) => {\n const files: KnapsackFile[] = [];\n if (template?.spec?.props) {\n const schema = JSON.parse(JSON.stringify(template.spec.props));\n if (template?.spec?.slots) {\n Object.entries(template.spec.slots).forEach(([id, info]) => {\n schema.properties[id] = {\n typeof: 'function',\n tsType: 'React.ReactNode',\n\n description: info.allowedPatternIds\n ? `${info.description}. Only use: ${info.allowedPatternIds.join(\n ', ',\n )}`\n : info.description,\n };\n schema.required = schema.required ?? [];\n if (info.isRequired) schema.required.push(id);\n });\n }\n const typeDefs =\n await KnapsackReactRenderer.convertSchemaToTypeScriptDefs({\n schema,\n title: `${this.changeCase(pattern.id)}Props`,\n // @todo pull in base url\n description: `[Knapsack Docs](http://localhost:3999/pattern/${pattern.id}/${template.id})`,\n patternId: pattern.id,\n templateId: template.id,\n postBanner: `import * as React from 'react';`,\n });\n\n files.push({\n contents: typeDefs,\n encoding: 'utf8',\n path: `${pattern.id}.${template.id}.spec.d.ts`,\n });\n files.push({\n contents: JSON.stringify(schema, null, ' '),\n encoding: 'utf8',\n path: `${pattern.id}.${template.id}.spec.json`,\n });\n }\n return files;\n };\n\n alterTemplateMetaFiles: KnapsackTemplateRendererBase['alterTemplateMetaFiles'] =\n async ({ files, metaDir }) => {\n const imports: string[] = [];\n\n const ext = '.spec.d.ts';\n files.forEach((file) => {\n if (file.path.endsWith(ext)) {\n const { base } = parse(file.path);\n const [patternId, templateId] = base.split('.');\n const isFirst = templateId === this.id;\n const exportName = this.changeCase(`${patternId}Props`);\n const exportNameWithTemplateId = this.changeCase(\n `${patternId}-${templateId}Props`,\n );\n imports.push(\n `export { ${\n isFirst\n ? exportName\n : `${exportName} as ${exportNameWithTemplateId}`\n } } from './${relative(metaDir, file.path).replace('.d.ts', '')}';`,\n );\n }\n });\n\n // extra line at end of file\n imports.push('');\n\n return [\n ...files,\n {\n contents: imports.join('\\n'),\n encoding: 'utf8',\n path: join(metaDir, 'react.d.ts'),\n },\n ];\n };\n\n async getTemplateSuggestions({\n newPath,\n }: Parameters<\n KnapsackTemplateRendererBase['getTemplateSuggestions']\n >[0]): ReturnType<KnapsackTemplateRendererBase['getTemplateSuggestions']> {\n const { data: dataDir } = this.patterns.userConfig;\n const { allTemplateDemos, allTemplates } = this.getMyTemplates();\n const usedSuggestions: TemplateSuggestion[] = [\n ...allTemplateDemos,\n ...allTemplates,\n ].map(({ path, alias }) => {\n return {\n path,\n alias: alias || 'default',\n };\n });\n\n const allPaths = [\n ...new Set([newPath, ...usedSuggestions.map(({ path }) => path)]),\n ];\n const allSuggestions: TemplateSuggestion[] = await Promise.all(\n allPaths.map(async (path): Promise<TemplateSuggestion[]> => {\n if (!path) return [];\n try {\n const { exports, errorMsg } = await getJsExportNames({\n path,\n resolveFromDir: dataDir,\n pkgPathAliases: this.pkgPathAliases,\n });\n if (errorMsg) {\n throw new Error(errorMsg);\n }\n return (\n exports\n // only allow names that start with a capital letter (i.e. React Component names)\n // will exclude helper functions and custom hooks\n .filter((e) => e === 'default' || isFirstLetterCapital(e))\n .map((name) => ({\n alias: name,\n path,\n }))\n );\n } catch (e) {\n // only want this showing with verbose since template suggestions are not critical\n log.verbose(\n `Error getting import names for ${path}: ${e.message}`,\n null,\n this.logPrefix,\n );\n return [];\n }\n }),\n ).then((results) => {\n // sadly `Promise.all` & `.flatMap` just don't work, so this:\n return results.flat();\n });\n\n const suggestions = allSuggestions.filter((s) => {\n return !usedSuggestions.find(\n (us) => us.alias === s.alias && us.path === s.path,\n );\n });\n\n return {\n suggestions,\n };\n }\n}\n","import { log } from '@knapsack/app';\nimport {\n getModulePkgJson,\n readFile,\n copy,\n formatCode,\n resolvePath,\n findUp,\n} from '@knapsack/file-utils';\nimport { removeWrappingDoubleQuotes } from '@knapsack/utils';\nimport path from 'path';\nimport type { Documentation } from 'react-docgen';\nimport type { ComponentDoc, ParserOptions } from 'react-docgen-typescript';\nimport { KsTemplateSpec, isNumberProp, isOptionsProp } from '@knapsack/types';\n\ntype GetSpecParams = {\n src: string;\n exportName?: string;\n};\n\n/**\n * The name of the type, which is usually corresponds to the function name in `React.PropTypes`. However, for types define with `oneOf`, we use `\"enum\"` and for `oneOfType` we use `\"union\"`. If a custom function is provided or the type cannot be resolved to anything of `React.PropTypes`, we use `\"custom\"`.\n */\ntype RdTypeName =\n | 'number'\n | 'string'\n | 'custom'\n | 'union'\n | 'bool'\n | 'node'\n | 'func';\n\n/**\n * Some types accept parameters which define the type in more detail (such as `arrayOf`, `instanceOf`, `oneOf`, etc). Those are stored in `<typeValue>`. The data type of `<typeValue>` depends on the type definition.\n */\ntype RdTypeValue = string;\n\ntype RdProps = {\n [prop: string]: {\n defaultValue?: {\n value: string;\n computed: boolean;\n };\n type: {\n name: RdTypeName;\n value?: RdTypeValue;\n raw?: string;\n };\n flowType?: string;\n tsType?: string;\n description?: string;\n required: boolean;\n };\n};\n\ntype RdResults = {\n /**\n * Name of function, class, or const\n */\n displayName: string;\n description?: string;\n props: RdProps;\n};\n\nfunction renderUsageTemplate({\n templateName,\n attributes,\n children,\n}: {\n templateName: string;\n attributes: string;\n children: string;\n}) {\n return `\n <${templateName}\n ${attributes}\n ${\n children\n ? `>\n ${children}\n </${templateName}>`\n : '/>'\n }\n `;\n}\n\nfunction renderDemoAppTemplate({\n imports,\n children,\n}: {\n imports: string;\n children: string;\n}) {\n return `${imports}\n\nfunction DemoApp() {\n return (\n ${children}\n )\n}\n`;\n}\n\nexport async function getUsage(data: {\n templateName: string;\n props?: Record<string, unknown>;\n children?: string;\n extraProps?: {\n key: string;\n value: string;\n }[];\n format?: boolean;\n}): Promise<string> {\n const props = Object.keys(data.props || {}).map((key) => {\n const value = data.props[key];\n return {\n key,\n value,\n };\n });\n\n const { templateName, children, extraProps = [] } = data;\n if (!templateName) {\n throw new Error(\n `Cannot getUsage of a React Component when no \"templateName\" is provided.`,\n );\n }\n\n const attributes: string[] = props.map(({ key, value }) => {\n switch (typeof value) {\n case 'string':\n // Is this a function like `() => {}` but not a \"sizes\" attribute for an image like `(min-width: 400px) 50vw, 100vw`?\n if (value.startsWith('(') && value.includes('=>')) {\n return `${key}={${value}}`;\n }\n return `${key}=\"${value}\"`;\n case 'boolean':\n return value ? `${key}` : `${key}={${value}}`;\n default:\n return `${key}={${JSON.stringify(value)}}`;\n }\n });\n\n const extraAttributes: string[] = [];\n const slotProps: { [key: string]: string[] } = {};\n\n extraProps.forEach(({ key, value }) => {\n slotProps[key] = slotProps[key] ?? [];\n slotProps[key].push(value);\n });\n\n Object.entries(slotProps).forEach(([key, values]) => {\n const value = values.length === 1 ? values[0] : `<>${values.join('\\n')}</>`;\n extraAttributes.push(`${key}={${value}}`);\n });\n\n const result = renderUsageTemplate({\n templateName,\n attributes: [...attributes, ...extraAttributes].join(' '),\n children,\n });\n return data.format\n ? formatCode({\n contents: result,\n path: 'x.tsx', // doing this to set format language\n })\n .then((code) => code.trim())\n .catch(() => result.trim()) // if format fails, just return the unformatted code\n : result.trim();\n}\n\nexport async function getDemoAppUsage({\n children,\n imports,\n}: {\n children: string;\n imports?: string;\n}): Promise<string> {\n const code = renderDemoAppTemplate({\n children,\n imports,\n });\n return formatCode({\n contents: code,\n path: 'x.tsx', // doing this to set format language\n });\n}\n\nasync function getTypeScriptInfoFromFile({ src }: { src: string }): Promise<{\n info: ComponentDoc[];\n}> {\n const tsConfigPath = await findUp('tsconfig.json', {\n cwd: path.dirname(src),\n });\n const rdTs = await import('react-docgen-typescript');\n const config: ParserOptions = {\n shouldExtractLiteralValuesFromEnum: true,\n savePropValueAsString: true,\n skipChildrenPropWithoutDoc: false,\n // In addition to the ones listed here, which had not strangely included these below ~ https://github.com/styleguidist/react-docgen-typescript/blob/287e7012843cb26fed8f4bd8ee24e462c25a1414/src/parser.ts#L308\n customComponentTypes: ['VoidFunctionComponent', 'VFC'],\n };\n const parse = tsConfigPath\n ? rdTs.withCustomConfig(tsConfigPath, config).parse\n : rdTs.withDefaultConfig(config).parse;\n return {\n info: parse(src),\n };\n}\n\nfunction extractSpecFromTypeScriptInfo({\n info: results,\n exportName,\n}: {\n info: ComponentDoc[];\n exportName: string;\n}): KsTemplateSpec | false {\n try {\n if (!results) return false;\n const spec: KsTemplateSpec = {\n props: {\n $schema: 'http://json-schema.org/draft-07/schema',\n type: 'object',\n required: [],\n properties: {},\n },\n slots: {\n // children: {\n // title: 'children',\n // },\n },\n };\n\n const isDefaultExport = !exportName || exportName === 'default';\n\n // if `isDefaultExport` then we just grab last result since `export default` TENDS to be last. that'll we can do really...\n const result = isDefaultExport\n ? results.pop()\n : results.find((r) => r.displayName === exportName);\n\n // log.inspect({ result, isDefaultExport, exportName }, 'ts result');\n if (!result) return false;\n\n const { displayName } = result;\n // log.inspect({ result }, 'result');\n Object.entries(result?.props || {}).forEach(([propName, propDef]) => {\n const { name, description, defaultValue, required, type, parent } =\n propDef;\n\n // `type.name` can include `| undefined` if tsConfig has `strict: true`. So we need to handle these scenarios:\n // `string` or `string | undefined`\n // `'left' | 'right'` or `'left' | 'right' | undefined`\n const propType = type?.name\n ?.replace('| undefined', '')\n // remove generics. things like `FC<{}>` and `FC<Props>` should become `FC`\n .replace(/<.*/g, '')\n .trim();\n\n switch (propType) {\n case 'string':\n spec.props.properties[propName] = {\n type: 'string',\n };\n break;\n case 'number':\n spec.props.properties[propName] = {\n type: 'number',\n };\n break;\n case 'boolean':\n case 'bool':\n if (defaultValue && 'value' in defaultValue) {\n // comes in as `'true'` - this turns it to `true`\n defaultValue.value = defaultValue.value === 'true';\n }\n spec.props.properties[propName] = {\n type: 'boolean',\n };\n break;\n case 'enum':\n type EnumType = {\n name: string;\n raw: string;\n value: {\n /** Looks like `'\"option1\"'` - beware of string that contains `\"` */\n value: string;\n }[];\n };\n spec.props.properties[propName] = {\n type: 'string',\n // yes there is a double \"value\" & yes it is confusing\n enum: [\n // ensure list is unique\n ...new Set<string>(\n (type as EnumType).value\n .map(({ value }) => removeWrappingDoubleQuotes(value?.trim()))\n .filter(Boolean),\n ),\n ],\n };\n break;\n case 'ReactNode':\n case 'React.ReactNode':\n case 'React.ReactElement':\n case 'ReactElement':\n spec.slots[propName] = {\n title: propName,\n };\n if (description) {\n spec.slots[propName] = {\n ...spec.slots[propName],\n description,\n };\n }\n break;\n case 'VFC':\n case 'FC':\n spec.slots[propName] = {\n title: propName,\n description: description || 'A reference to a component',\n isTemplateReference: true,\n allowOnlyOne: true,\n disallowText: true,\n };\n break;\n default: {\n if (type?.name?.startsWith('(')) {\n // functions\n spec.props.properties[propName] = {\n // description: `\\`${type.name}\\` ${description}`,\n typeof: 'function',\n tsType: propDef?.type?.name,\n };\n } else if (type?.name?.includes('|')) {\n // enums / unions (multi-choice strings)\n // comes in like this: `{ name: '\"option1\" | \"option2\" | \"option3\"' }`\n const options = type.name\n .split('|')\n .map((enumItem) => removeWrappingDoubleQuotes(enumItem.trim()))\n .filter(Boolean);\n\n if (options?.length) {\n spec.props.properties[propName] = {\n type: 'string',\n // ensuring list is unique\n enum: [...new Set(options)],\n };\n }\n } else {\n spec.props.properties[propName] = {\n tsType: propDef?.type?.name,\n };\n }\n }\n }\n\n // assigning info that all would have\n if (spec.props.properties[propName]) {\n if (required) spec.props.required.push(propName);\n if (description && !spec.props.properties[propName].description) {\n spec.props.properties[propName].description = description;\n }\n if (defaultValue && 'value' in defaultValue) {\n if (isNumberProp(spec.props.properties[propName])) {\n spec.props.properties[propName].default = parseFloat(\n defaultValue.value,\n );\n } else {\n spec.props.properties[propName].default =\n removeWrappingDoubleQuotes(defaultValue.value);\n }\n }\n }\n\n // console.log('type', type);\n });\n\n return spec;\n } catch (error) {\n log.verbose(\n 'Could not infer spec from React TypeScript file',\n {\n exportName,\n error,\n },\n 'react renderer',\n );\n return false;\n }\n}\n\nasync function getPropTypesInfoFromFile({ src }: { src: string }): Promise<{\n info: Documentation[];\n}> {\n const reactDocs = await import('react-docgen');\n const { builtinResolvers } = reactDocs;\n const fileSrc = await readFile(src);\n const { FindExportedDefinitionsResolver } = builtinResolvers;\n const results: Documentation[] = reactDocs.parse(fileSrc, {\n resolver: new FindExportedDefinitionsResolver(),\n handlers: null,\n filename: src,\n // babelrc: false,\n });\n return {\n info: results,\n };\n}\n\nfunction extractSpecFromPropTypesInfo({\n info: results,\n exportName,\n}: {\n info: Documentation[];\n exportName: string;\n}): KsTemplateSpec | false {\n try {\n const isDefaultExport = !exportName || exportName === 'default';\n\n // if `isDefaultExport` then we just grab last result since `export default` TENDS to be last. that'll we can do really...\n const result = isDefaultExport\n ? results.pop()\n : results.find((r) => r.displayName === exportName);\n\n // log.inspect(results, 'JSX PropTypes Results');\n // console.log(JSON.stringify(result, null, ' '));\n\n const spec: KsTemplateSpec = {\n isInferred: true,\n props: {\n $schema: 'http://json-schema.org/draft-07/schema',\n type: 'object',\n required: [],\n properties: {},\n },\n slots: {},\n };\n\n Object.entries(result?.props || {}).forEach(([propName, propDef]) => {\n const { required, description, defaultValue } = propDef;\n switch (propDef?.type?.name) {\n case 'string':\n spec.props.properties[propName] = {\n type: 'string',\n };\n break;\n case 'func':\n spec.props.properties[propName] = {\n type: 'string',\n };\n break;\n case 'bool':\n spec.props.properties[propName] = {\n type: 'boolean',\n };\n break;\n case 'node':\n spec.slots[propName] = {\n title: propName,\n description,\n };\n }\n\n // assigning info that all would have\n if (spec.props.properties[propName]) {\n if (required) spec.props.required.push(propName);\n if (description && !spec.props.properties[propName].description) {\n spec.props.properties[propName].description = description;\n }\n if (defaultValue && 'value' in defaultValue) {\n spec.props.properties[propName].default =\n typeof defaultValue.value === 'string'\n ? removeWrappingDoubleQuotes(defaultValue.value)\n : defaultValue.value;\n }\n }\n });\n\n return spec;\n } catch (error) {\n log.verbose(\n 'Could not infer spec from React PropTypes',\n {\n exportName,\n error,\n },\n 'react renderer',\n );\n return false;\n }\n}\n\nfunction cleanUpSpec({\n spec,\n}: {\n spec: KsTemplateSpec | false;\n}): KsTemplateSpec | false {\n if (spec === false) return spec;\n // ok to mutate b/c spec was just created before passing in here\n Object.entries(spec?.props?.properties || {}).forEach(([propName, prop]) => {\n if (isOptionsProp(prop)) {\n // If the default is not in the enum, it should not be there\n // OR the enum is wrong\n if (!prop.enum.includes(prop.default)) {\n prop.default = undefined;\n }\n }\n });\n\n return spec;\n}\n\nasync function getReactModuleInfoUncached({\n src: unknownSrc,\n resolveFromDir,\n}: {\n src: string;\n resolveFromDir: string;\n}): Promise<\n | {\n type: 'typescript';\n info: ComponentDoc[];\n }\n | {\n type: 'propTypes';\n info: Documentation[];\n }\n | {\n type: 'unknown';\n }\n> {\n const typesInfo = await resolvePath({\n path: unknownSrc,\n resolveFromDir,\n resolveType: 'types',\n });\n if (typesInfo.exists) {\n const typeScriptInfo = await getTypeScriptInfoFromFile({\n src: typesInfo.absolutePath,\n });\n if (typeScriptInfo) {\n return {\n type: 'typescript',\n info: typeScriptInfo.info,\n };\n }\n }\n const jsInfo = await resolvePath({\n path: unknownSrc,\n resolveFromDir,\n });\n if (!jsInfo.exists) return { type: 'unknown' };\n const { ext } = path.parse(jsInfo.absolutePath);\n switch (ext) {\n case '.jsx': {\n const propTypesInfo = await getPropTypesInfoFromFile({\n src: jsInfo.absolutePath,\n });\n return {\n type: 'propTypes',\n info: propTypesInfo.info,\n };\n }\n case '.ts':\n case '.tsx': {\n const typeScriptInfo = await getTypeScriptInfoFromFile({\n src: jsInfo.absolutePath,\n });\n return {\n type: 'typescript',\n info: typeScriptInfo.info,\n };\n }\n default:\n return {\n type: 'unknown',\n };\n }\n}\n\nconst getReactModuleInfoCache = new Map<\n string,\n ReturnType<typeof getReactModuleInfoUncached>\n>();\nexport const clearInferSpecCache = () => {\n log.info(`Clearing React TypeScript inferSpec cache...`);\n getReactModuleInfoCache.clear();\n};\nasync function getReactModuleInfo(\n args: Parameters<typeof getReactModuleInfoUncached>[0],\n) {\n const cacheKey = JSON.stringify(args);\n if (!getReactModuleInfoCache.has(cacheKey)) {\n getReactModuleInfoCache.set(cacheKey, getReactModuleInfoUncached(args));\n }\n return getReactModuleInfoCache.get(cacheKey);\n}\n\nasync function getReactSpec({\n src,\n exportName,\n resolveFromDir,\n}: GetSpecParams & {\n resolveFromDir: string;\n}): Promise<KsTemplateSpec | false> {\n const reactModuleInfo = await getReactModuleInfo({\n src,\n resolveFromDir,\n });\n switch (reactModuleInfo.type) {\n case 'typescript':\n return extractSpecFromTypeScriptInfo({\n info: reactModuleInfo.info,\n exportName,\n });\n case 'propTypes':\n return extractSpecFromPropTypesInfo({\n info: reactModuleInfo.info,\n exportName,\n });\n case 'unknown':\n default:\n return false;\n }\n}\n\nexport async function getReactDocs(\n opt: GetSpecParams & {\n resolveFromDir: string;\n },\n): Promise<KsTemplateSpec | false> {\n return cleanUpSpec({\n spec: await getReactSpec(opt),\n });\n}\n\nexport async function copyReactAssets(\n distDirAbsolute: string,\n publicPath: string,\n): Promise<string[]> {\n try {\n const { version: reactVersion } = getModulePkgJson('react');\n const { version: reactDomVersion } = getModulePkgJson('react-dom');\n\n // switch to resolving the root NPM package dir vs the entire file via require.resolve\n // workaround due to NPM packages using the exports field; prevents these from being auto-resolved\n const reactRoot = path.dirname(\n require.resolve('react', {\n paths: [process.cwd()],\n }),\n );\n const reactDomRoot = path.dirname(\n require.resolve('react-dom', {\n paths: [process.cwd()],\n }),\n );\n await Promise.all([\n copy(\n path.join(reactRoot, 'umd/react.development.js'),\n path.join(distDirAbsolute, `react.development.${reactVersion}.js`),\n ),\n copy(\n path.join(reactRoot, 'umd/react.production.min.js'),\n path.join(distDirAbsolute, `react.production.min.${reactVersion}.js`),\n ),\n copy(\n path.join(reactDomRoot, 'umd/react-dom.production.min.js'),\n path.join(\n distDirAbsolute,\n `react-dom.production.min.${reactDomVersion}.js`,\n ),\n ),\n copy(\n path.join(reactDomRoot, 'umd/react-dom.development.js'),\n path.join(\n distDirAbsolute,\n `react-dom.development.${reactDomVersion}.js`,\n ),\n ),\n ]);\n const reactFileSuffix =\n process.env.NODE_ENV === 'production' ? 'production.min' : 'development';\n\n return [\n path.join(publicPath, `react.${reactFileSuffix}.${reactVersion}.js`),\n path.join(\n publicPath,\n `react-dom.${reactFileSuffix}.${reactDomVersion}.js`,\n ),\n ];\n } catch (error) {\n log.warn(\n 'Error trying to copy \"react\" and \"react-dom\" JS files, are they installed? We want to use your exact versions.',\n error,\n 'templateRenderer:react',\n );\n process.exit(1);\n }\n}\n","import { getJsExportNames } from '@knapsack/file-utils';\nimport { createCreator, tasks, Task } from '@knapsack/creator-utils';\nimport {\n readKsPatternConfigs,\n writeKsPatternConfig,\n readKsNavConfig,\n addKsNavItems,\n writeDemo,\n} from '@knapsack/ks-file-utils';\nimport { Demo, KnapsackPattern } from '@knapsack/types';\nimport { makeShortId } from '@knapsack/utils';\n\nfunction isCapitalLetter(char: string): boolean {\n return char.toUpperCase() === char;\n}\n\nfunction startsWithCapitalLetter(str: string): boolean {\n return isCapitalLetter(str[0]);\n}\n\nfunction createPatternData({\n importName,\n id,\n title = importName,\n pkgPath,\n initialDemoId,\n}: {\n importName: string;\n id: string;\n title?: string;\n pkgPath: string;\n initialDemoId: string;\n}): KnapsackPattern {\n return {\n id,\n title,\n description: '',\n statuses: {\n main: 'ready',\n },\n templates: [\n {\n id: 'react',\n title: 'react',\n path: pkgPath,\n alias: importName,\n templateLanguageId: 'react',\n spec: {\n isInferred: true,\n },\n demoIds: [initialDemoId],\n blockIds: [],\n },\n ],\n tabs: [\n {\n type: 'template',\n id: 'react',\n },\n ],\n subPages: [],\n };\n}\n\nexport const createReactPattern = createCreator({\n id: 'react-patterns',\n title: 'React Ks Patterns',\n description: 'Adds React templates as Knapsack Patterns',\n getQuestions: async () => ({\n pkgPath: {\n type: 'text',\n title: 'Package path',\n },\n importPrefix: {\n type: 'text',\n title: 'Import Prefix to Remove',\n },\n }),\n getTasks: async ({ answers: { pkgPath, importPrefix = '' }, config }) => {\n const dataDir = config.dest;\n const currentPatterns = await readKsPatternConfigs({\n dataDir,\n });\n const currentReactPatternsImportNames = currentPatterns.reduce(\n (cur, pattern) => {\n const reactTemplates =\n pattern.templates?.filter((t) => t.templateLanguageId === 'react') ??\n [];\n cur.push(...reactTemplates.map((t) => t.alias));\n return cur;\n },\n [] as string[],\n );\n const { exports: allImports } = await getJsExportNames({\n path: pkgPath,\n });\n return [\n {\n title: 'Pick Imports to add',\n task: (_, task) =>\n tasks.runSubCreator({\n task,\n config,\n creator: createCreator({\n id: 'react-pattern-import-names',\n getQuestions: async () => ({\n importNames: {\n type: 'choices',\n choices: allImports\n .filter(\n (importName) =>\n startsWithCapitalLetter(importName) &&\n !currentReactPatternsImportNames.includes(importName),\n )\n .map((importName) => ({\n value: importName,\n })),\n },\n }),\n getTasks: async ({ answers: { importNames } }) => {\n const patterns = importNames.map((importName) => ({\n importName,\n patternId: importName.startsWith(importPrefix)\n ? importName.slice(importPrefix.length).toLowerCase()\n : importName.toLowerCase(),\n }));\n return [\n ...patterns.map(\n ({ importName, patternId }): Task => ({\n title: `Add ${importName} React Template`,\n task: async (__, subTask) => {\n const initialDemo: Demo = {\n type: 'data',\n id: makeShortId(),\n title: 'Main',\n patternId,\n templateId: 'react',\n data: {\n props: {},\n slots: {},\n },\n };\n const pattern = createPatternData({\n id: patternId,\n importName,\n pkgPath,\n initialDemoId: initialDemo.id,\n });\n\n await Promise.all([\n writeDemo({\n dataDir,\n demo: initialDemo,\n }),\n writeKsPatternConfig({\n dataDir,\n patternId,\n data: pattern,\n }),\n ]);\n },\n }),\n ),\n {\n title: `Updating Nav`,\n task: async (__, subTask) => {\n const { byId } = await readKsNavConfig({\n dataDir,\n });\n // attempt to find a nav group to put patterns under\n const componentsGroup = Object.values(byId).find(\n ({ path, name, id }) => {\n // we only want groups (i.e. not pages or patterns)\n if (path) return false;\n if (name.toLowerCase() === 'patterns') return true;\n if (name.toLowerCase() === 'components') return true;\n return false;\n },\n );\n await addKsNavItems({\n dataDir,\n navItems: patterns.map(({ patternId }) => ({\n navId: patternId,\n navPath: `/pattern/${patternId}`,\n navParent: componentsGroup?.id || 'root',\n })),\n });\n },\n },\n ];\n },\n }),\n }),\n },\n ];\n },\n});\n"],"mappings":"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","names":["import_utils","import_app","import_types","import_file_utils","import_path","path","parse","import_file_utils","import_utils","path","sleep","usage","path","exports"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/renderer-react.ts","../src/utils.ts","../src/react-creators.ts"],"sourcesContent":["export * from './renderer-react';\n","import sleep from 'sleep-promise';\nimport { KnapsackRendererWebpackBase } from '@knapsack/renderer-webpack-base';\nimport { pascalCase, Except, isFirstLetterCapital } from '@knapsack/utils';\nimport { knapsackEvents, log, KnapsackRendererBase } from '@knapsack/app';\nimport {\n KsRendererClientGlobal,\n KnapsackFile,\n KsJsImport,\n isSlottedText,\n isSlottedTemplateReference,\n isSlottedTemplateDemo,\n KnapsackPatternTemplate,\n KsTemplateSpec,\n TemplateSuggestion,\n rendererIds,\n RendererId,\n} from '@knapsack/types';\nimport type {\n KnapsackRenderParams,\n KnapsackTemplateRenderer,\n KnapsackTemplateRendererBase,\n KnapsackTemplateRendererResults,\n Patterns,\n} from '@knapsack/app/types';\nimport {\n exists,\n findUpPkgJson,\n getJsExportNames,\n readFile,\n formatCode,\n} from '@knapsack/file-utils';\nimport type { ReactNode } from 'react';\nimport { join, relative, parse } from 'path';\nimport {\n clearInferSpecCache,\n copyReactAssets,\n getDemoAppUsage,\n getReactDocs,\n getUsage,\n} from './utils';\nimport { createReactPattern } from './react-creators';\n\nconst { pkg } = findUpPkgJson(__dirname);\n// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\nlog.setupUpdateNotifier({ ...pkg, name: pkg.name!, version: pkg.version! });\n\n// static methods only\nconst { createSlotOptionsHtmlTags } = KnapsackRendererBase;\n\nexport type DemoWrapperProps = {\n children: React.ReactNode;\n patternsUsed: {\n patternId: string;\n templateId: string;\n demoId?: string;\n }[];\n} & Except<KnapsackRenderParams, 'patternManifest'>;\n\nexport class KnapsackReactRenderer\n extends KnapsackRendererWebpackBase\n implements KnapsackTemplateRenderer\n{\n /**\n * `react.js` & `react-dom.js` root relative paths\n */\n assets: string[];\n babelConfig: Record<string, unknown>;\n creators: KnapsackTemplateRenderer['creators'];\n private demoWrapperPath: string;\n\n private disableReactStrictMode?: boolean;\n\n constructor({\n webpackConfig,\n demoWrapperPath = join(__dirname, './demo-wrapper.mjs'),\n id = rendererIds.react,\n disableReactStrictMode,\n }: {\n webpackConfig?: ConstructorParameters<\n typeof KnapsackRendererWebpackBase\n >[0]['webpackConfig'];\n demoWrapperPath?: string;\n /** When using React v18+, this option allows a workspace to _disable_ React's Strict Mode from running in Knapsack's React Renderer (StrictMode is enabled by default).\n *\n * See https://reactjs.org/docs/strict-mode.html for more info\n * */\n disableReactStrictMode?: boolean;\n /** Don't set if calling from `knapsack.config.js`, only use if creating a new Renderer based on the React Renderer */\n id?: RendererId;\n } = {}) {\n super({\n id,\n extension: '.jsx',\n language: 'jsx',\n webpackConfig,\n });\n this.language = 'jsx';\n this.assets = [];\n this.demoWrapperPath = demoWrapperPath;\n\n // Half-borrowing the API Synax for this from the latest version of Next.js\n this.disableReactStrictMode = disableReactStrictMode;\n this.creators = [createReactPattern];\n }\n\n async init(opt: { patterns: Patterns; cacheDir: string }): Promise<void> {\n await super.init(opt);\n this.assets = await copyReactAssets(this.outputDir, this.publicPath);\n if (!(await exists(this.demoWrapperPath))) {\n throw new Error(\n `Could not find demo wrapper at: \"${this.demoWrapperPath}\"`,\n );\n }\n }\n\n getMeta: KnapsackTemplateRenderer['getMeta'] = () => ({\n id: this.id,\n title: 'React',\n aliasUse: 'optional',\n aliasTitle: 'Named Export',\n aliasIsJsNamedExport: true,\n aliasDescription:\n 'If `export X` was used instead of `export default`, then provide X.',\n enableDataDemos: true,\n enableTemplateDemos: true,\n hasSlotsSupport: true,\n hasSlotOptionsSupport: true,\n version: pkg.version,\n hasInferSpecSupport: true,\n syntaxHighlightingLanguage: 'jsx',\n hasTemplateSuggestionsSupport: true,\n prototypingTemplate: {\n path: '@knapsack/renderer-react/prototype-template',\n spec: {\n isInferred: false,\n props: {\n type: 'object',\n properties: {},\n },\n slots: {\n children: { title: 'Children' },\n },\n },\n },\n });\n\n changeCase(str: string): string {\n return pascalCase(str);\n }\n\n createWebpackConfig(): ReturnType<\n KnapsackRendererWebpackBase['createWebpackConfig']\n > {\n const config = super.createWebpackConfig();\n\n config.externals = {\n react: 'React',\n 'react-dom': 'ReactDOM',\n };\n\n return config;\n }\n\n getJsImports(): ReturnType<KnapsackRendererWebpackBase['getJsImports']> {\n const imports = super.getJsImports();\n imports.push(\n {\n type: 'extra',\n importInfo: {\n type: 'default',\n path: this.demoWrapperPath,\n name: 'DemoWrapper',\n },\n },\n {\n type: 'extra',\n importInfo: {\n type: 'default',\n path: join(__dirname, './error-catcher.mjs'),\n name: 'ErrorCatcher',\n },\n },\n );\n return imports;\n }\n\n async prepClientRenderResults({\n usage,\n demoApp,\n imports: xImports,\n renderOptions: { pattern, template, demo },\n }: {\n usage: string;\n demoApp: string;\n imports: KsJsImport[];\n renderOptions: KnapsackRenderParams;\n }): Promise<KnapsackTemplateRendererResults> {\n const extraImportNames = this.getJsImports().flatMap((imp) =>\n imp.type === 'extra' ? [imp.importInfo.name] : [],\n );\n const { imports, isDeclaredVarsUnique, nameCollisions } =\n this.makeKsJsImportsUnique({ imports: xImports });\n\n if (!isDeclaredVarsUnique) {\n log.error(`${nameCollisions.join(', ')} are declared multiple times`, {\n imports,\n });\n }\n\n // import names; i.e. `KsButton`\n const importNames = [\n ...imports.map(({ importInfo: { name } }) => name),\n ...extraImportNames,\n ];\n\n const patternsUsed: {\n patternId: string;\n templateId: string;\n demoId?: string;\n }[] = imports.flatMap((imp) => {\n if (imp.type === 'pattern-template') {\n return [\n {\n patternId: imp.patternId,\n templateId: imp.templateId,\n },\n ];\n }\n if (imp.type === 'pattern-template-demo') {\n return [\n {\n patternId: imp.patternId,\n templateId: imp.templateId,\n demoId: imp.demoId,\n },\n ];\n }\n return [];\n });\n\n const demoWrapperProps: Omit<DemoWrapperProps, 'children'> = {\n patternsUsed,\n pattern,\n template,\n demo,\n };\n const demoWrapperCode = await getUsage({\n templateName: 'DemoWrapper',\n props: demoWrapperProps,\n children: `<DemoApp />`,\n // extraProps,\n });\n\n /**\n * IMPORTANT: this function is stringified and then executed in the browser - it cannot use anything in scope (other functions, vars, etc)\n */\n async function renderReact({\n patterns,\n theExtraImportNames,\n ksGlobal,\n }: {\n patterns: typeof patternsUsed;\n theExtraImportNames: typeof extraImportNames;\n ksGlobal: KsRendererClientGlobal<ReactNode>;\n }): Promise<Record<string, ReactNode>> {\n if (!ksGlobal) {\n throw new Error('\"window.knapsack\" is null');\n }\n const components = await ksGlobal.getAllImports({\n patterns,\n extras: theExtraImportNames.map((name) => ({ name })),\n });\n return components;\n }\n\n let code = `\n\n${renderReact.toString()}\n${renderReact.name}({\n ksGlobal: window.knapsack,\n patterns: ${JSON.stringify(patternsUsed)},\n theExtraImportNames: ${JSON.stringify(extraImportNames)},\n}).then((components) => {\n const { ${importNames.join(', ')} } = components;\n const root = document.getElementById('render-root');\n\n ${demoApp}\n\n const reactDomVersion = parseInt(ReactDOM.version.split('.')[0], 10);\n\n const ReactRendererResult = () => {\n if (reactDomVersion < 17 || ${this.disableReactStrictMode}){\n return (\n <ErrorCatcher>\n ${demoWrapperCode}\n </ErrorCatcher>\n )\n }\n\n return (\n <React.StrictMode>\n <ErrorCatcher>\n ${demoWrapperCode}\n </ErrorCatcher>\n </React.StrictMode>\n )\n };\n\n\n if (reactDomVersion > 17){\n ReactDOM.createRoot(root).render(\n <ReactRendererResult />\n )\n } else {\n ReactDOM.render(\n <ReactRendererResult />,\n root\n );\n }\n}).catch((err) => {\n console.error(err);\n const root = document.getElementById('render-root');\n // Create a new <div> element to contain the error message\n const errorMsgDiv = document.createElement('div');\n // Insert the new <div> element before the existing element\n root.parentNode.insertBefore(errorMsgDiv, root);\n // add error message so users can see it\n errorMsgDiv.innerHTML = '<h1>Component Error</h1><p>' + err.message + '</p>';\n});\n `;\n\n let codeHadError = false;\n let errorHtmlMsg = '';\n\n try {\n code = await this.babelCodeForBrowser({\n code,\n });\n } catch (e) {\n codeHadError = true;\n console.log(code);\n console.log('---original code before babel error ^---');\n console.trace(e.message);\n code = `console.error(${JSON.stringify(e.message)});`;\n errorHtmlMsg = `<pre><code>${e.message}</code></pre>`;\n }\n\n if (!codeHadError) {\n try {\n code = await formatCode({\n contents: code,\n path: 'x.tsx', // doing this to set format language\n });\n } catch (e) {\n codeHadError = true;\n console.log(code);\n console.log('---original code before prettier error ^---');\n console.trace(e.message);\n code = `console.error(${JSON.stringify(e.message)});`;\n errorHtmlMsg = `<pre><code>${e.message}</code></pre>`;\n }\n }\n\n const html = `\n ${this.assets.map((asset) => `<script src=\"${asset}\"></script>`).join('\\n')}\n\n ${this.createHtmlTagsForAssetPaths({\n assets: this.getWebpackAssetPaths(),\n // we need the scripts to finish adding methods to the global knapsack object synchronously before the client-side code runs that is in the <script> tag below\n scriptTagsAreAsync: false,\n })}\n\n <div id=\"render-root\" class=\"knapsack-pattern-direct-parent\" data-dev-note=\"Knapsack React Template Wrapper\"></div>\n <script type=\"application/javascript\">${code}</script>\n${errorHtmlMsg}\n\n `;\n\n return {\n ok: !codeHadError,\n html: await formatCode({\n contents: html,\n path: 'x.html', // doing this to set format language\n }),\n usage,\n templateLanguage: this.language,\n };\n }\n\n async render(\n opt: KnapsackRenderParams,\n ): Promise<KnapsackTemplateRendererResults> {\n if (KnapsackReactRenderer.isTemplateDemo(opt.demo)) {\n // when getting a template demos path sometimes we have a race condition where the client asks for it before the server knows about it.\n // so we try several times in a row to get it\n /** The amount of time in ms to wait between attempts; when we run out of array items, we give up and throw the error */\n const waits = [5, 10, 20, 50, 100, 1000, 1000];\n let templateDemoPath: string;\n let attempt = 0;\n\n while (true) {\n try {\n templateDemoPath = opt.patternManifest.getTemplateDemoAbsolutePath({\n patternId: opt.pattern.id,\n templateId: opt.template.id,\n demoId: opt.demo.id,\n });\n // got it!\n break;\n } catch (e) {\n const waitTime = waits[attempt];\n if (!waitTime) {\n throw new Error(e);\n }\n attempt += 1;\n // eslint-disable-next-line no-await-in-loop\n await sleep(waitTime);\n }\n }\n\n const [templateFileContents, { usage, imports }] = await Promise.all([\n readFile(templateDemoPath),\n this.getUsageAndImports(opt),\n ]);\n const demoApp = await getDemoAppUsage({\n children: usage,\n });\n const results = await this.prepClientRenderResults({\n usage: templateFileContents,\n demoApp,\n imports,\n renderOptions: opt,\n });\n\n return results;\n }\n\n if (KnapsackReactRenderer.isDataDemo(opt.demo)) {\n const { usage, imports } = await this.getUsageAndImports(opt);\n const { code: importCode } = this.createJsImportCodeBlock({\n imports,\n });\n\n const [demoAppUsage, demoApp] = await Promise.all([\n getDemoAppUsage({\n children: usage,\n imports: importCode,\n }),\n getDemoAppUsage({\n children: usage,\n }),\n ]);\n\n return this.prepClientRenderResults({\n demoApp,\n usage: demoAppUsage,\n imports,\n renderOptions: opt,\n });\n }\n }\n\n async getUsageAndImports(opt: KnapsackRenderParams): Promise<{\n usage: string;\n imports: KsJsImport[];\n }> {\n const { pattern, template, patternManifest, demo } = opt;\n if (demo?.type && KnapsackReactRenderer.isDataDemo(demo)) {\n const {\n data: { props, slots, slotsOptionsComputed },\n } = demo;\n\n const importInfo = this.getJsImport({\n patternId: pattern.id,\n templateId: template.id,\n });\n if (!importInfo) {\n throw new Error(\n `Could not find import for pattern-template: ${pattern.id}-${template.id}`,\n );\n }\n const { type, name: templateName } = importInfo.importInfo;\n\n const importInfos: KsJsImport[] = [importInfo];\n const children: string[] = [];\n const extraProps: { key: string; value: string }[] = [];\n\n if (slots) {\n const slotNames = Object.keys(slots);\n const slotUsages = await Promise.all(\n slotNames.map(async (slotName) => {\n const slotItems = slots[slotName];\n const slotItemsUsages = await Promise.all(\n slotItems\n // remove any incomplete item - happens when users are filling out form\n .filter((slotItem) => {\n if (!isSlottedText(slotItem)) {\n if (!slotItem.patternId) return false;\n if (!slotItem.templateId) return false;\n if (isSlottedTemplateDemo(slotItem) && !slotItem.demoId) {\n return false;\n }\n }\n return true;\n })\n .map(async (slotItem) => {\n if (isSlottedText(slotItem)) {\n if (slotItems.length === 1 && slotName !== 'children') {\n // The ` prevents multi-line strings from causing error (even though they don't show a line break)\n return `\\`${slotItem.text}\\``;\n }\n return slotItem.text;\n }\n\n const slotPattern = patternManifest.getPattern(\n slotItem.patternId,\n );\n\n const slotTemplate = slotPattern.templates.find(\n (t) => t.id === slotItem.templateId,\n );\n if (isSlottedTemplateReference(slotItem)) {\n const { usage, imports } = await this.getUsageAndImports({\n pattern: slotPattern,\n template: slotTemplate,\n patternManifest,\n });\n importInfos.push(...imports);\n return usage;\n }\n if (isSlottedTemplateDemo(slotItem)) {\n const { usage, imports } = await this.getUsageAndImports({\n pattern: slotPattern,\n template: slotTemplate,\n demo:\n slotItem.demo ||\n this.patterns.demosById[slotItem.demoId],\n patternManifest,\n });\n importInfos.push(...imports);\n return usage;\n }\n\n throw new Error(\n `Unknown slot item: ${JSON.stringify(slotItem)}`,\n );\n }),\n );\n return {\n slotName,\n slotItemsUsages,\n };\n }),\n );\n\n slotUsages.forEach(({ slotName, slotItemsUsages }) => {\n const slotOptionsComputed = slotsOptionsComputed?.[slotName];\n const { openTag, closeTag } = createSlotOptionsHtmlTags({\n slotOptionsComputed,\n classAttributeName: 'className',\n stylesValueType: 'object',\n });\n if (openTag) {\n if (slotName === 'children') {\n children.push(openTag);\n } else {\n extraProps.push({\n key: slotName,\n value: openTag,\n });\n }\n }\n\n slotItemsUsages.forEach((usage) => {\n if (slotName === 'children') {\n children.push(usage);\n } else {\n extraProps.push({\n key: slotName,\n value: usage,\n });\n }\n });\n\n if (closeTag) {\n if (slotName === 'children') {\n children.push(closeTag);\n } else {\n extraProps.push({\n key: slotName,\n value: closeTag,\n });\n }\n }\n });\n }\n\n const usage = await getUsage({\n templateName,\n props,\n children: children.join('\\n'),\n extraProps,\n });\n\n return {\n usage,\n imports: importInfos,\n };\n }\n\n if (demo?.type && KnapsackReactRenderer.isTemplateDemo(demo)) {\n const importInfo = this.getJsImport({\n patternId: pattern.id,\n templateId: template.id,\n demoId: demo.id,\n });\n if (!importInfo) {\n throw new Error(\n `Could not find import for pattern-template-demo: ${pattern.id}-${template.id}-${demo.id}`,\n );\n }\n const { type, name: templateName } = importInfo.importInfo;\n\n const usage = await getUsage({ templateName });\n\n return {\n usage,\n imports: [importInfo],\n };\n }\n\n if (!demo) {\n const importInfo = this.getJsImport({\n patternId: pattern.id,\n templateId: template.id,\n });\n if (!importInfo) {\n throw new Error(\n `Could not find import for pattern-template: ${pattern.id}-${template.id}`,\n );\n }\n const { type, name: templateName } = importInfo.importInfo;\n\n return {\n /**\n * i.e. Given a React Component, `Button`, normally this would be `<Button>` with a demo, but since there is none this will just be a reference to it: `Button`\n * @see {KsSlotInfo['isTemplateReference']}\n * @see {SlottedTemplate}\n */\n usage: templateName,\n imports: [importInfo],\n };\n }\n\n throw new Error(\n `Unhandled demo type for ${pattern.id}-${template.id}: ${JSON.stringify(\n demo,\n )}`,\n );\n }\n\n async getUsage(opt: KnapsackRenderParams): Promise<string> {\n const { usage } = await this.getUsageAndImports(opt);\n return usage;\n }\n\n inferSpec: KnapsackTemplateRendererBase['inferSpec'] = async ({\n template,\n templatePath,\n }: {\n template: KnapsackPatternTemplate;\n templatePath: string;\n }): Promise<KsTemplateSpec | false> => {\n const spec = await getReactDocs({\n src: template.path,\n exportName: template.alias || 'default',\n resolveFromDir: this.config.data,\n });\n if (spec !== false) {\n const totalProps = Object.keys(spec?.props?.properties || {}).length;\n const totalSlots = Object.keys(spec?.slots || {}).length;\n if (totalProps === 0 && totalSlots === 0) {\n return false;\n }\n }\n return spec;\n };\n\n async watch(opt: Parameters<KnapsackTemplateRendererBase['watch']>[0]) {\n await super.watch(opt);\n knapsackEvents.onPatternTemplateChanged(() => {\n clearInferSpecCache();\n });\n }\n\n getTemplateMeta: KnapsackTemplateRendererBase['getTemplateMeta'] = async ({\n pattern,\n template,\n }) => {\n const files: KnapsackFile[] = [];\n if (template?.spec?.props) {\n const schema = JSON.parse(JSON.stringify(template.spec.props));\n if (template?.spec?.slots) {\n Object.entries(template.spec.slots).forEach(([id, info]) => {\n schema.properties[id] = {\n typeof: 'function',\n tsType: 'React.ReactNode',\n\n description: info.allowedPatternIds\n ? `${info.description}. Only use: ${info.allowedPatternIds.join(\n ', ',\n )}`\n : info.description,\n };\n schema.required = schema.required ?? [];\n if (info.isRequired) schema.required.push(id);\n });\n }\n const typeDefs =\n await KnapsackReactRenderer.convertSchemaToTypeScriptDefs({\n schema,\n title: `${this.changeCase(pattern.id)}Props`,\n // @todo pull in base url\n description: `[Knapsack Docs](http://localhost:3999/pattern/${pattern.id}/${template.id})`,\n patternId: pattern.id,\n templateId: template.id,\n postBanner: `import * as React from 'react';`,\n });\n\n files.push({\n contents: typeDefs,\n encoding: 'utf8',\n path: `${pattern.id}.${template.id}.spec.d.ts`,\n });\n files.push({\n contents: JSON.stringify(schema, null, ' '),\n encoding: 'utf8',\n path: `${pattern.id}.${template.id}.spec.json`,\n });\n }\n return files;\n };\n\n alterTemplateMetaFiles: KnapsackTemplateRendererBase['alterTemplateMetaFiles'] =\n async ({ files, metaDir }) => {\n const imports: string[] = [];\n\n const ext = '.spec.d.ts';\n files.forEach((file) => {\n if (file.path.endsWith(ext)) {\n const { base } = parse(file.path);\n const [patternId, templateId] = base.split('.');\n const isFirst = templateId === this.id;\n const exportName = this.changeCase(`${patternId}Props`);\n const exportNameWithTemplateId = this.changeCase(\n `${patternId}-${templateId}Props`,\n );\n imports.push(\n `export { ${\n isFirst\n ? exportName\n : `${exportName} as ${exportNameWithTemplateId}`\n } } from './${relative(metaDir, file.path).replace('.d.ts', '')}';`,\n );\n }\n });\n\n // extra line at end of file\n imports.push('');\n\n return [\n ...files,\n {\n contents: imports.join('\\n'),\n encoding: 'utf8',\n path: join(metaDir, 'react.d.ts'),\n },\n ];\n };\n\n async getTemplateSuggestions({\n newPath,\n }: Parameters<\n KnapsackTemplateRendererBase['getTemplateSuggestions']\n >[0]): ReturnType<KnapsackTemplateRendererBase['getTemplateSuggestions']> {\n const { data: dataDir } = this.patterns.userConfig;\n const { allTemplateDemos, allTemplates } = this.getMyTemplates();\n const usedSuggestions: TemplateSuggestion[] = [\n ...allTemplateDemos,\n ...allTemplates,\n ].map(({ path, alias }) => {\n return {\n path,\n alias: alias || 'default',\n };\n });\n\n const allPaths = [\n ...new Set([newPath, ...usedSuggestions.map(({ path }) => path)]),\n ];\n const allSuggestions: TemplateSuggestion[] = await Promise.all(\n allPaths.map(async (path): Promise<TemplateSuggestion[]> => {\n if (!path) return [];\n try {\n const { exports, errorMsg } = await getJsExportNames({\n path,\n resolveFromDir: dataDir,\n pkgPathAliases: this.pkgPathAliases,\n });\n if (errorMsg) {\n throw new Error(errorMsg);\n }\n return (\n exports\n // only allow names that start with a capital letter (i.e. React Component names)\n // will exclude helper functions and custom hooks\n .filter((e) => e === 'default' || isFirstLetterCapital(e))\n .map((name) => ({\n alias: name,\n path,\n }))\n );\n } catch (e) {\n // only want this showing with verbose since template suggestions are not critical\n log.verbose(\n `Error getting import names for ${path}: ${e.message}`,\n null,\n this.logPrefix,\n );\n return [];\n }\n }),\n ).then((results) => {\n // sadly `Promise.all` & `.flatMap` just don't work, so this:\n return results.flat();\n });\n\n const suggestions = allSuggestions.filter((s) => {\n return !usedSuggestions.find(\n (us) => us.alias === s.alias && us.path === s.path,\n );\n });\n\n return {\n suggestions,\n };\n }\n}\n","import { log } from '@knapsack/app';\nimport {\n getModulePkgJson,\n readFile,\n copy,\n formatCode,\n resolvePath,\n findUp,\n} from '@knapsack/file-utils';\nimport { removeWrappingDoubleQuotes } from '@knapsack/utils';\nimport path from 'path';\nimport type { Documentation } from 'react-docgen';\nimport type { ComponentDoc, ParserOptions } from 'react-docgen-typescript';\nimport { KsTemplateSpec, isNumberProp, isOptionsProp } from '@knapsack/types';\n\ntype GetSpecParams = {\n src: string;\n exportName?: string;\n};\n\n/**\n * The name of the type, which is usually corresponds to the function name in `React.PropTypes`. However, for types define with `oneOf`, we use `\"enum\"` and for `oneOfType` we use `\"union\"`. If a custom function is provided or the type cannot be resolved to anything of `React.PropTypes`, we use `\"custom\"`.\n */\ntype RdTypeName =\n | 'number'\n | 'string'\n | 'custom'\n | 'union'\n | 'bool'\n | 'node'\n | 'func';\n\n/**\n * Some types accept parameters which define the type in more detail (such as `arrayOf`, `instanceOf`, `oneOf`, etc). Those are stored in `<typeValue>`. The data type of `<typeValue>` depends on the type definition.\n */\ntype RdTypeValue = string;\n\ntype RdProps = {\n [prop: string]: {\n defaultValue?: {\n value: string;\n computed: boolean;\n };\n type: {\n name: RdTypeName;\n value?: RdTypeValue;\n raw?: string;\n };\n flowType?: string;\n tsType?: string;\n description?: string;\n required: boolean;\n };\n};\n\ntype RdResults = {\n /**\n * Name of function, class, or const\n */\n displayName: string;\n description?: string;\n props: RdProps;\n};\n\nfunction renderUsageTemplate({\n templateName,\n attributes,\n children,\n}: {\n templateName: string;\n attributes: string;\n children: string;\n}) {\n return `\n <${templateName}\n ${attributes}\n ${\n children\n ? `>\n ${children}\n </${templateName}>`\n : '/>'\n }\n `;\n}\n\nfunction renderDemoAppTemplate({\n imports,\n children,\n}: {\n imports: string;\n children: string;\n}) {\n return `${imports}\n\nfunction DemoApp() {\n return (\n ${children}\n )\n}\n`;\n}\n\nexport async function getUsage(data: {\n templateName: string;\n props?: Record<string, unknown>;\n children?: string;\n extraProps?: {\n key: string;\n value: string;\n }[];\n format?: boolean;\n}): Promise<string> {\n const props = Object.keys(data.props || {}).map((key) => {\n const value = data.props[key];\n return {\n key,\n value,\n };\n });\n\n const { templateName, children, extraProps = [] } = data;\n if (!templateName) {\n throw new Error(\n `Cannot getUsage of a React Component when no \"templateName\" is provided.`,\n );\n }\n\n const attributes: string[] = props.map(({ key, value }) => {\n switch (typeof value) {\n case 'string':\n // Is this a function like `() => {}` but not a \"sizes\" attribute for an image like `(min-width: 400px) 50vw, 100vw`?\n if (value.startsWith('(') && value.includes('=>')) {\n return `${key}={${value}}`;\n }\n return `${key}=\"${value}\"`;\n case 'boolean':\n return value ? `${key}` : `${key}={${value}}`;\n default:\n return `${key}={${JSON.stringify(value)}}`;\n }\n });\n\n const extraAttributes: string[] = [];\n const slotProps: { [key: string]: string[] } = {};\n\n extraProps.forEach(({ key, value }) => {\n slotProps[key] = slotProps[key] ?? [];\n slotProps[key].push(value);\n });\n\n Object.entries(slotProps).forEach(([key, values]) => {\n const value = values.length === 1 ? values[0] : `<>${values.join('\\n')}</>`;\n extraAttributes.push(`${key}={${value}}`);\n });\n\n const result = renderUsageTemplate({\n templateName,\n attributes: [...attributes, ...extraAttributes].join(' '),\n children,\n });\n return data.format\n ? formatCode({\n contents: result,\n path: 'x.tsx', // doing this to set format language\n })\n .then((code) => code.trim())\n .catch(() => result.trim()) // if format fails, just return the unformatted code\n : result.trim();\n}\n\nexport async function getDemoAppUsage({\n children,\n imports,\n}: {\n children: string;\n imports?: string;\n}): Promise<string> {\n const code = renderDemoAppTemplate({\n children,\n imports,\n });\n return formatCode({\n contents: code,\n path: 'x.tsx', // doing this to set format language\n });\n}\n\nasync function getTypeScriptInfoFromFile({ src }: { src: string }): Promise<{\n info: ComponentDoc[];\n}> {\n const tsConfigPath = await findUp('tsconfig.json', {\n cwd: path.dirname(src),\n });\n const rdTs = await import('react-docgen-typescript');\n const config: ParserOptions = {\n shouldExtractLiteralValuesFromEnum: true,\n savePropValueAsString: true,\n skipChildrenPropWithoutDoc: false,\n // In addition to the ones listed here, which had not strangely included these below ~ https://github.com/styleguidist/react-docgen-typescript/blob/287e7012843cb26fed8f4bd8ee24e462c25a1414/src/parser.ts#L308\n customComponentTypes: ['VoidFunctionComponent', 'VFC'],\n };\n const parse = tsConfigPath\n ? rdTs.withCustomConfig(tsConfigPath, config).parse\n : rdTs.withDefaultConfig(config).parse;\n return {\n info: parse(src),\n };\n}\n\nfunction extractSpecFromTypeScriptInfo({\n info: results,\n exportName,\n}: {\n info: ComponentDoc[];\n exportName: string;\n}): KsTemplateSpec | false {\n try {\n if (!results) return false;\n const spec: KsTemplateSpec = {\n props: {\n $schema: 'http://json-schema.org/draft-07/schema',\n type: 'object',\n required: [],\n properties: {},\n },\n slots: {\n // children: {\n // title: 'children',\n // },\n },\n };\n\n const isDefaultExport = !exportName || exportName === 'default';\n\n // if `isDefaultExport` then we just grab last result since `export default` TENDS to be last. that'll we can do really...\n const result = isDefaultExport\n ? results.pop()\n : results.find((r) => r.displayName === exportName);\n\n // log.inspect({ result, isDefaultExport, exportName }, 'ts result');\n if (!result) return false;\n\n const { displayName } = result;\n // log.inspect({ result }, 'result');\n Object.entries(result?.props || {}).forEach(([propName, propDef]) => {\n const { name, description, defaultValue, required, type, parent } =\n propDef;\n\n // `type.name` can include `| undefined` if tsConfig has `strict: true`. So we need to handle these scenarios:\n // `string` or `string | undefined`\n // `'left' | 'right'` or `'left' | 'right' | undefined`\n const propType = type?.name\n ?.replace('| undefined', '')\n // remove generics. things like `FC<{}>` and `FC<Props>` should become `FC`\n .replace(/<.*/g, '')\n .trim();\n\n switch (propType) {\n case 'string':\n spec.props.properties[propName] = {\n type: 'string',\n };\n break;\n case 'number':\n spec.props.properties[propName] = {\n type: 'number',\n };\n break;\n case 'boolean':\n case 'bool':\n if (defaultValue && 'value' in defaultValue) {\n // comes in as `'true'` - this turns it to `true`\n defaultValue.value = defaultValue.value === 'true';\n }\n spec.props.properties[propName] = {\n type: 'boolean',\n };\n break;\n case 'enum':\n type EnumType = {\n name: string;\n raw: string;\n value: {\n /** Looks like `'\"option1\"'` - beware of string that contains `\"` */\n value: string;\n }[];\n };\n spec.props.properties[propName] = {\n type: 'string',\n // yes there is a double \"value\" & yes it is confusing\n enum: [\n // ensure list is unique\n ...new Set<string>(\n (type as EnumType).value\n .map(({ value }) => removeWrappingDoubleQuotes(value?.trim()))\n .filter(Boolean),\n ),\n ],\n };\n break;\n case 'ReactNode':\n case 'React.ReactNode':\n case 'React.ReactElement':\n case 'ReactElement':\n spec.slots[propName] = {\n title: propName,\n };\n if (description) {\n spec.slots[propName] = {\n ...spec.slots[propName],\n description,\n };\n }\n break;\n case 'VFC':\n case 'FC':\n spec.slots[propName] = {\n title: propName,\n description: description || 'A reference to a component',\n isTemplateReference: true,\n allowOnlyOne: true,\n disallowText: true,\n };\n break;\n default: {\n if (type?.name?.startsWith('(')) {\n // functions\n spec.props.properties[propName] = {\n // description: `\\`${type.name}\\` ${description}`,\n typeof: 'function',\n tsType: propDef?.type?.name,\n };\n } else if (type?.name?.includes('|')) {\n // enums / unions (multi-choice strings)\n // comes in like this: `{ name: '\"option1\" | \"option2\" | \"option3\"' }`\n const options = type.name\n .split('|')\n .map((enumItem) => removeWrappingDoubleQuotes(enumItem.trim()))\n .filter(Boolean);\n\n if (options?.length) {\n spec.props.properties[propName] = {\n type: 'string',\n // ensuring list is unique\n enum: [...new Set(options)],\n };\n }\n } else {\n spec.props.properties[propName] = {\n tsType: propDef?.type?.name,\n };\n }\n }\n }\n\n // assigning info that all would have\n if (spec.props.properties[propName]) {\n if (required) spec.props.required.push(propName);\n if (description && !spec.props.properties[propName].description) {\n spec.props.properties[propName].description = description;\n }\n if (defaultValue && 'value' in defaultValue) {\n if (isNumberProp(spec.props.properties[propName])) {\n spec.props.properties[propName].default = parseFloat(\n defaultValue.value,\n );\n } else {\n spec.props.properties[propName].default =\n removeWrappingDoubleQuotes(defaultValue.value);\n }\n }\n }\n\n // console.log('type', type);\n });\n\n return spec;\n } catch (error) {\n log.verbose(\n 'Could not infer spec from React TypeScript file',\n {\n exportName,\n error,\n },\n 'react renderer',\n );\n return false;\n }\n}\n\nasync function getPropTypesInfoFromFile({ src }: { src: string }): Promise<{\n info: Documentation[];\n}> {\n const reactDocs = await import('react-docgen');\n const { builtinResolvers } = reactDocs;\n const fileSrc = await readFile(src);\n const { FindExportedDefinitionsResolver } = builtinResolvers;\n const results: Documentation[] = reactDocs.parse(fileSrc, {\n resolver: new FindExportedDefinitionsResolver(),\n handlers: null,\n filename: src,\n // babelrc: false,\n });\n return {\n info: results,\n };\n}\n\nfunction extractSpecFromPropTypesInfo({\n info: results,\n exportName,\n}: {\n info: Documentation[];\n exportName: string;\n}): KsTemplateSpec | false {\n try {\n const isDefaultExport = !exportName || exportName === 'default';\n\n // if `isDefaultExport` then we just grab last result since `export default` TENDS to be last. that'll we can do really...\n const result = isDefaultExport\n ? results.pop()\n : results.find((r) => r.displayName === exportName);\n\n // log.inspect(results, 'JSX PropTypes Results');\n // console.log(JSON.stringify(result, null, ' '));\n\n const spec: KsTemplateSpec = {\n isInferred: true,\n props: {\n $schema: 'http://json-schema.org/draft-07/schema',\n type: 'object',\n required: [],\n properties: {},\n },\n slots: {},\n };\n\n Object.entries(result?.props || {}).forEach(([propName, propDef]) => {\n const { required, description, defaultValue } = propDef;\n switch (propDef?.type?.name) {\n case 'string':\n spec.props.properties[propName] = {\n type: 'string',\n };\n break;\n case 'func':\n spec.props.properties[propName] = {\n type: 'string',\n };\n break;\n case 'bool':\n spec.props.properties[propName] = {\n type: 'boolean',\n };\n break;\n case 'node':\n spec.slots[propName] = {\n title: propName,\n description,\n };\n }\n\n // assigning info that all would have\n if (spec.props.properties[propName]) {\n if (required) spec.props.required.push(propName);\n if (description && !spec.props.properties[propName].description) {\n spec.props.properties[propName].description = description;\n }\n if (defaultValue && 'value' in defaultValue) {\n spec.props.properties[propName].default =\n typeof defaultValue.value === 'string'\n ? removeWrappingDoubleQuotes(defaultValue.value)\n : defaultValue.value;\n }\n }\n });\n\n return spec;\n } catch (error) {\n log.verbose(\n 'Could not infer spec from React PropTypes',\n {\n exportName,\n error,\n },\n 'react renderer',\n );\n return false;\n }\n}\n\nfunction cleanUpSpec({\n spec,\n}: {\n spec: KsTemplateSpec | false;\n}): KsTemplateSpec | false {\n if (spec === false) return spec;\n // ok to mutate b/c spec was just created before passing in here\n Object.entries(spec?.props?.properties || {}).forEach(([propName, prop]) => {\n if (isOptionsProp(prop)) {\n // If the default is not in the enum, it should not be there\n // OR the enum is wrong\n if (!prop.enum.includes(prop.default)) {\n prop.default = undefined;\n }\n }\n });\n\n return spec;\n}\n\nasync function getReactModuleInfoUncached({\n src: unknownSrc,\n resolveFromDir,\n}: {\n src: string;\n resolveFromDir: string;\n}): Promise<\n | {\n type: 'typescript';\n info: ComponentDoc[];\n }\n | {\n type: 'propTypes';\n info: Documentation[];\n }\n | {\n type: 'unknown';\n }\n> {\n const typesInfo = await resolvePath({\n path: unknownSrc,\n resolveFromDir,\n resolveType: 'types',\n });\n if (typesInfo.exists) {\n const typeScriptInfo = await getTypeScriptInfoFromFile({\n src: typesInfo.absolutePath,\n });\n if (typeScriptInfo) {\n return {\n type: 'typescript',\n info: typeScriptInfo.info,\n };\n }\n }\n const jsInfo = await resolvePath({\n path: unknownSrc,\n resolveFromDir,\n });\n if (!jsInfo.exists) return { type: 'unknown' };\n const { ext } = path.parse(jsInfo.absolutePath);\n switch (ext) {\n case '.jsx': {\n const propTypesInfo = await getPropTypesInfoFromFile({\n src: jsInfo.absolutePath,\n });\n return {\n type: 'propTypes',\n info: propTypesInfo.info,\n };\n }\n case '.ts':\n case '.tsx': {\n const typeScriptInfo = await getTypeScriptInfoFromFile({\n src: jsInfo.absolutePath,\n });\n return {\n type: 'typescript',\n info: typeScriptInfo.info,\n };\n }\n default:\n return {\n type: 'unknown',\n };\n }\n}\n\nconst getReactModuleInfoCache = new Map<\n string,\n ReturnType<typeof getReactModuleInfoUncached>\n>();\nexport const clearInferSpecCache = () => {\n log.info(`Clearing React TypeScript inferSpec cache...`);\n getReactModuleInfoCache.clear();\n};\nasync function getReactModuleInfo(\n args: Parameters<typeof getReactModuleInfoUncached>[0],\n) {\n const cacheKey = JSON.stringify(args);\n if (!getReactModuleInfoCache.has(cacheKey)) {\n getReactModuleInfoCache.set(cacheKey, getReactModuleInfoUncached(args));\n }\n return getReactModuleInfoCache.get(cacheKey);\n}\n\nasync function getReactSpec({\n src,\n exportName,\n resolveFromDir,\n}: GetSpecParams & {\n resolveFromDir: string;\n}): Promise<KsTemplateSpec | false> {\n const reactModuleInfo = await getReactModuleInfo({\n src,\n resolveFromDir,\n });\n switch (reactModuleInfo.type) {\n case 'typescript':\n return extractSpecFromTypeScriptInfo({\n info: reactModuleInfo.info,\n exportName,\n });\n case 'propTypes':\n return extractSpecFromPropTypesInfo({\n info: reactModuleInfo.info,\n exportName,\n });\n case 'unknown':\n default:\n return false;\n }\n}\n\nexport async function getReactDocs(\n opt: GetSpecParams & {\n resolveFromDir: string;\n },\n): Promise<KsTemplateSpec | false> {\n return cleanUpSpec({\n spec: await getReactSpec(opt),\n });\n}\n\nexport async function copyReactAssets(\n distDirAbsolute: string,\n publicPath: string,\n): Promise<string[]> {\n try {\n const { version: reactVersion } = getModulePkgJson('react');\n const { version: reactDomVersion } = getModulePkgJson('react-dom');\n\n // switch to resolving the root NPM package dir vs the entire file via require.resolve\n // workaround due to NPM packages using the exports field; prevents these from being auto-resolved\n const reactRoot = path.dirname(\n require.resolve('react', {\n paths: [process.cwd()],\n }),\n );\n const reactDomRoot = path.dirname(\n require.resolve('react-dom', {\n paths: [process.cwd()],\n }),\n );\n await Promise.all([\n copy(\n path.join(reactRoot, 'umd/react.development.js'),\n path.join(distDirAbsolute, `react.development.${reactVersion}.js`),\n ),\n copy(\n path.join(reactRoot, 'umd/react.production.min.js'),\n path.join(distDirAbsolute, `react.production.min.${reactVersion}.js`),\n ),\n copy(\n path.join(reactDomRoot, 'umd/react-dom.production.min.js'),\n path.join(\n distDirAbsolute,\n `react-dom.production.min.${reactDomVersion}.js`,\n ),\n ),\n copy(\n path.join(reactDomRoot, 'umd/react-dom.development.js'),\n path.join(\n distDirAbsolute,\n `react-dom.development.${reactDomVersion}.js`,\n ),\n ),\n ]);\n const reactFileSuffix =\n process.env.NODE_ENV === 'production' ? 'production.min' : 'development';\n\n return [\n path.join(publicPath, `react.${reactFileSuffix}.${reactVersion}.js`),\n path.join(\n publicPath,\n `react-dom.${reactFileSuffix}.${reactDomVersion}.js`,\n ),\n ];\n } catch (error) {\n log.warn(\n 'Error trying to copy \"react\" and \"react-dom\" JS files, are they installed? We want to use your exact versions.',\n error,\n 'templateRenderer:react',\n );\n process.exit(1);\n }\n}\n","import { getJsExportNames } from '@knapsack/file-utils';\nimport { createCreator, tasks, Task } from '@knapsack/creator-utils';\nimport {\n readKsPatternConfigs,\n writeKsPatternConfig,\n readKsNavConfig,\n addKsNavItems,\n writeDemo,\n} from '@knapsack/ks-file-utils';\nimport { Demo, KnapsackPattern } from '@knapsack/types';\nimport { makeShortId } from '@knapsack/utils';\n\nfunction isCapitalLetter(char: string): boolean {\n return char.toUpperCase() === char;\n}\n\nfunction startsWithCapitalLetter(str: string): boolean {\n return isCapitalLetter(str[0]);\n}\n\nfunction createPatternData({\n importName,\n id,\n title = importName,\n pkgPath,\n initialDemoId,\n}: {\n importName: string;\n id: string;\n title?: string;\n pkgPath: string;\n initialDemoId: string;\n}): KnapsackPattern {\n return {\n id,\n title,\n description: '',\n statuses: {\n main: 'ready',\n },\n templates: [\n {\n id: 'react',\n title: 'react',\n path: pkgPath,\n alias: importName,\n templateLanguageId: 'react',\n spec: {\n isInferred: true,\n },\n demoIds: [initialDemoId],\n blockIds: [],\n },\n ],\n tabs: [\n {\n type: 'template',\n id: 'react',\n },\n ],\n subPages: [],\n };\n}\n\nexport const createReactPattern = createCreator({\n id: 'react-patterns',\n title: 'React Ks Patterns',\n description: 'Adds React templates as Knapsack Patterns',\n getQuestions: async () => ({\n pkgPath: {\n type: 'text',\n title: 'Package path',\n },\n importPrefix: {\n type: 'text',\n title: 'Import Prefix to Remove',\n },\n }),\n getTasks: async ({ answers: { pkgPath, importPrefix = '' }, config }) => {\n const dataDir = config.dest;\n const currentPatterns = await readKsPatternConfigs({\n dataDir,\n });\n const currentReactPatternsImportNames = currentPatterns.reduce(\n (cur, pattern) => {\n const reactTemplates =\n pattern.templates?.filter((t) => t.templateLanguageId === 'react') ??\n [];\n cur.push(...reactTemplates.map((t) => t.alias));\n return cur;\n },\n [] as string[],\n );\n const { exports: allImports } = await getJsExportNames({\n path: pkgPath,\n });\n return [\n {\n title: 'Pick Imports to add',\n task: (_, task) =>\n tasks.runSubCreator({\n task,\n config,\n creator: createCreator({\n id: 'react-pattern-import-names',\n getQuestions: async () => ({\n importNames: {\n type: 'choices',\n choices: allImports\n .filter(\n (importName) =>\n startsWithCapitalLetter(importName) &&\n !currentReactPatternsImportNames.includes(importName),\n )\n .map((importName) => ({\n value: importName,\n })),\n },\n }),\n getTasks: async ({ answers: { importNames } }) => {\n const patterns = importNames.map((importName) => ({\n importName,\n patternId: importName.startsWith(importPrefix)\n ? importName.slice(importPrefix.length).toLowerCase()\n : importName.toLowerCase(),\n }));\n return [\n ...patterns.map(\n ({ importName, patternId }): Task => ({\n title: `Add ${importName} React Template`,\n task: async (__, subTask) => {\n const initialDemo: Demo = {\n type: 'data',\n id: makeShortId(),\n title: 'Main',\n patternId,\n templateId: 'react',\n data: {\n props: {},\n slots: {},\n },\n };\n const pattern = createPatternData({\n id: patternId,\n importName,\n pkgPath,\n initialDemoId: initialDemo.id,\n });\n\n await Promise.all([\n writeDemo({\n dataDir,\n demo: initialDemo,\n }),\n writeKsPatternConfig({\n dataDir,\n patternId,\n data: pattern,\n }),\n ]);\n },\n }),\n ),\n {\n title: `Updating Nav`,\n task: async (__, subTask) => {\n const { byId } = await readKsNavConfig({\n dataDir,\n });\n // attempt to find a nav group to put patterns under\n const componentsGroup = Object.values(byId).find(\n ({ path, name, id }) => {\n // we only want groups (i.e. not pages or patterns)\n if (path) return false;\n if (name.toLowerCase() === 'patterns') return true;\n if (name.toLowerCase() === 'components') return true;\n return false;\n },\n );\n await addKsNavItems({\n dataDir,\n navItems: patterns.map(({ patternId }) => ({\n navId: patternId,\n navPath: `/pattern/${patternId}`,\n navParent: componentsGroup?.id || 'root',\n })),\n });\n },\n },\n ];\n },\n }),\n }),\n },\n ];\n },\n});\n"],"mappings":"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","names":["import_utils","import_app","import_types","import_file_utils","import_path","path","parse","import_file_utils","import_utils","path","sleep","usage","path","exports"]}