@knapsack/renderer-react 4.70.0--canary.4821.ef34743.0 → 4.70.0--canary.4821.bd63208.0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/client/init.js +15 -66
- package/dist/client/init.js.map +1 -1
- package/dist/client/init.mjs +10 -71
- package/dist/client/init.mjs.map +1 -1
- package/dist/demo-wrapper.js +7 -27
- package/dist/demo-wrapper.js.map +1 -1
- package/dist/demo-wrapper.mjs +5 -9
- package/dist/demo-wrapper.mjs.map +1 -1
- package/dist/error-catcher.js +28 -94
- package/dist/error-catcher.js.map +1 -1
- package/dist/error-catcher.mjs +6 -66
- package/dist/error-catcher.mjs.map +1 -1
- package/dist/index.js +43 -1293
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +38 -1301
- package/dist/index.mjs.map +1 -1
- package/dist/prototype-template.js +5 -26
- package/dist/prototype-template.js.map +1 -1
- package/dist/prototype-template.mjs +3 -8
- package/dist/prototype-template.mjs.map +1 -1
- package/package.json +13 -13
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","../src/types.ts"],"sourcesContent":["export * from './renderer-react';\nexport type { DemoWrapperProps } from './types';\n","import sleep from 'sleep-promise';\nimport {\n RendererWebpackBase,\n Renderer,\n KsJsImportMap,\n convertImportMapToNeededImportsByCodeSrcId,\n} from '@knapsack/renderer-webpack-base';\nimport { pascalCase, isFirstLetterCapital } from '@knapsack/utils';\nimport { knapsackEvents, log } from '@knapsack/app';\nimport {\n Renderable,\n babelCodeForBrowser,\n createSlotOptionsHtmlTags,\n} from '@knapsack/app/renderers';\nimport {\n KnapsackFile,\n KnapsackPatternTemplate,\n KsTemplateSpec,\n TemplateSuggestion,\n rendererIds,\n RendererId,\n} from '@knapsack/types';\nimport {\n exists as fileExists,\n findUpPkgJson,\n getJsExportNames,\n readFile,\n formatCode,\n} from '@knapsack/file-utils';\nimport { join, relative, parse } from 'path';\nimport {\n clearInferSpecCache,\n copyReactAssets,\n demoAppName,\n getDemoAppUsage,\n getReactDocs,\n getUsage,\n} from './utils';\nimport { createReactPattern } from './react-creators';\nimport {\n ExtraJsImportNames,\n KsReactMeta,\n rendererMetaScriptTagId,\n} from './types';\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\nconst errorCatcherAbsolutePath = join(__dirname, './error-catcher.mjs');\nif (!fileExists(errorCatcherAbsolutePath)) {\n throw new Error(\n `Could not find error catcher at: ${errorCatcherAbsolutePath}`,\n );\n}\n\nexport class KnapsackReactRenderer\n extends RendererWebpackBase\n implements Renderable\n{\n /**\n * `react.js` & `react-dom.js` root relative paths\n */\n assets: string[];\n babelConfig: Record<string, unknown>;\n #demoWrapperPath: string;\n #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 RendererWebpackBase\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 language: 'jsx',\n webpackConfig,\n extraScripts: [\n // this is the code in `./client/init.mts`\n '@knapsack/renderer-react/client',\n ],\n });\n this.language = 'jsx';\n this.assets = [];\n this.#demoWrapperPath = demoWrapperPath;\n this.#disableReactStrictMode = disableReactStrictMode;\n this.creators = [createReactPattern];\n }\n\n override setConfig: Renderer['setConfig'] = (opt) => {\n super.setConfig(opt);\n const {\n absolutePath,\n exists: demoWrapperPathExists,\n type,\n } = this.resolvePathSync({\n path: this.#demoWrapperPath,\n resolveFromDir: this.userConfigDir,\n });\n if (!demoWrapperPathExists) {\n throw new Error(\n `Could not find demo wrapper at: \"${\n this.#demoWrapperPath\n }\"\\nPlease adjust setting in \"knapsack.config.js\" or pass a different path when creating the React Renderer.`,\n );\n }\n this.registerExtraJsImports<ExtraJsImportNames>({\n DemoWrapper: {\n exportName: 'DemoWrapper',\n isDefaultExport: true,\n path: type === 'package' ? this.#demoWrapperPath : absolutePath,\n },\n ErrorCatcher: {\n exportName: 'ErrorCatcher',\n isDefaultExport: true,\n path: errorCatcherAbsolutePath,\n },\n });\n };\n\n init: Renderer['init'] = async () => {\n this.assets = await copyReactAssets(this.outputDir, this.publicPath);\n };\n\n override hydrate: Renderer['hydrate'] = async (opt) => {\n await super.hydrate(opt);\n await this.init({ missingFileVerbosity: 'silent' });\n };\n\n getMeta: Renderer['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 override changeCase: Renderer['changeCase'] = (str) => pascalCase(str);\n\n override createWebpackConfig: RendererWebpackBase['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 async prepClientRenderResults({\n usage,\n demoApp,\n importMap,\n renderOptions: { demo, state, patternId, templateId },\n }: {\n usage: string;\n demoApp: string;\n importMap: KsJsImportMap;\n renderOptions: Parameters<Renderer['render']>[0];\n }): ReturnType<Renderer['render']> {\n const meta = {\n demo,\n disableReactStrictMode: this.#disableReactStrictMode,\n neededImportsByCodeSrcId:\n convertImportMapToNeededImportsByCodeSrcId(importMap),\n demoWrapperProps: {\n patternId,\n templateId,\n demo,\n },\n } as const satisfies KsReactMeta;\n\n let code = `\n window.knapsack = window.knapsack || {};\n window.knapsack.getDemoApp = ({ ${[...importMap.keys()].join(', ')} }) => {\n ${demoApp}\n return ${demoAppName}\n }\n `;\n\n let errorHtmlMsg = '';\n try {\n code = await babelCodeForBrowser({ code });\n } catch (e) {\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 const html = `\n <script type=\"application/json\" id=\"${rendererMetaScriptTagId}\">${JSON.stringify(\n meta,\n )}</script>\n <script type=\"application/javascript\">${code}</script>\n <div id=\"render-root\" class=\"knapsack-pattern-direct-parent\" data-dev-note=\"Knapsack React Template Wrapper\"></div>\n ${this.assets.map((asset) => `<script src=\"${asset}\"></script>`).join('\\n')}\n ${RendererWebpackBase.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 ${errorHtmlMsg}\n `;\n\n return {\n ok: !errorHtmlMsg,\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 render: Renderer['render'] = async (opt) => {\n if (opt.demo?.type === 'template') {\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 const { absolutePath, exists } = await this.resolvePath(\n opt.demo.templateInfo.path,\n );\n if (!exists) {\n throw new Error(\n `Template demo file does not exist: ${absolutePath}`,\n );\n }\n templateDemoPath = absolutePath;\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 const [templateFileContents, { usage, importMap }] = await Promise.all([\n readFile(templateDemoPath),\n this.getUsageAndImports({\n ...opt,\n importMap: new Map(),\n }),\n ]);\n const demoApp = await getDemoAppUsage({\n children: usage,\n });\n const results = await this.prepClientRenderResults({\n usage: templateFileContents,\n demoApp,\n renderOptions: opt,\n importMap,\n });\n\n return results;\n }\n\n if (opt.demo?.type === 'data') {\n const { usage, importMap } = await this.getUsageAndImports({\n ...opt,\n importMap: new Map(),\n });\n const importCode = RendererWebpackBase.createJsImportCodeBlock({\n importMap,\n });\n const [demoAppUsage, demoApp] = await Promise.all([\n getDemoAppUsage({\n children: usage,\n imports: importCode,\n format: true,\n }),\n getDemoAppUsage({\n children: usage,\n }),\n ]);\n\n return this.prepClientRenderResults({\n demoApp,\n usage: demoAppUsage,\n renderOptions: opt,\n importMap,\n });\n }\n };\n\n getUsageAndImports: RendererWebpackBase['getUsageAndImports'] = async ({\n patternId,\n templateId,\n demo,\n state,\n importMap,\n }) => {\n if (!demo) {\n throw new Error(\n `No demo provided while rendering ${patternId} ${templateId}`,\n );\n }\n const pattern = state.patterns[patternId];\n if (!pattern) {\n throw new Error(`Could not find pattern: ${patternId}`);\n }\n if (demo.type === 'data') {\n const template = pattern.templates.find((t) => t.id === templateId);\n if (!template) {\n throw new Error(`Could not find template: ${templateId}`);\n }\n const {\n data: { props, slots, slotsOptionsComputed },\n } = demo;\n const { name: templateName } = await this.addUniqueValueToImportMap({\n importMap,\n path: template.path,\n alias: template.alias || 'default',\n });\n\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 (!slotItem) return false;\n if (slotItem.type !== 'text') {\n if (!slotItem.patternId) return false;\n if (!slotItem.templateId) return false;\n if (slotItem.type === 'template-demo' && !slotItem.demoId) {\n return false;\n }\n }\n return true;\n })\n .map(async (slotItem) => {\n if (slotItem.type === 'text') {\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 if (slotItem.type === 'template-reference') {\n const slottedTemplate = state.patterns[\n slotItem.patternId\n ]?.templates.find((t) => t.id === slotItem.templateId);\n if (!slottedTemplate) {\n throw new Error(\n `Could not find slotted template: ${slotItem.patternId} ${slotItem.templateId}`,\n );\n }\n const templateRefImport =\n await this.addUniqueValueToImportMap({\n importMap,\n path: slottedTemplate.path,\n alias: slottedTemplate.alias || 'default',\n });\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 return templateRefImport.name;\n }\n if (slotItem.type === 'template-demo') {\n const thisDemo = slotItem.demo;\n if (!thisDemo) {\n throw new Error(\n `Could not find slotted template demo ${JSON.stringify(\n slotItem,\n )}`,\n );\n }\n const { usage } = await this.getUsageAndImports({\n patternId: thisDemo.patternId,\n templateId: thisDemo.templateId,\n demo: thisDemo,\n state,\n importMap,\n });\n return usage;\n }\n const _exhaustiveCheck: never = slotItem;\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 importMap,\n };\n }\n\n if (demo.type === 'template') {\n const { templateInfo } = demo;\n const { name: templateName } = await this.addUniqueValueToImportMap({\n importMap,\n path: templateInfo.path,\n alias: templateInfo.alias || 'default',\n });\n const usage = await getUsage({ templateName });\n\n return {\n usage,\n importMap,\n };\n }\n\n const _exhaustiveCheck: never = demo;\n throw new Error(\n `Unhandled demo type for ${patternId}-${templateId}: ${JSON.stringify(\n demo,\n )}`,\n );\n };\n\n inferSpec: Renderer['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 override watch: Renderer['watch'] = async () => {\n super.watch();\n knapsackEvents.onPatternTemplateChanged(() => {\n clearInferSpecCache();\n });\n };\n\n getTemplateMeta: Renderer['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: Renderer['alterTemplateMetaFiles'] = async ({\n files,\n metaDir,\n }) => {\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 getTemplateSuggestions: Renderer['getTemplateSuggestions'] = async ({\n newPath,\n state,\n }) => {\n const usedSuggestions = Object.values(state.patterns).reduce(\n (acc, { templateDemos, templates }) => {\n templates.forEach(({ path, alias, templateLanguageId }) => {\n if (templateLanguageId !== this.id) return;\n acc.push({ path, alias });\n });\n templateDemos.forEach(\n ({ templateInfo: { path, alias }, templateLanguageId }) => {\n if (templateLanguageId !== this.id) return;\n acc.push({ path, alias });\n },\n );\n return acc;\n },\n [] as TemplateSuggestion[],\n );\n\n const codeSrcs = new Set(this.getCodeSrcs().map(({ path }) => path));\n\n const allPaths = [\n ...new Set([\n newPath,\n ...Object.keys(this.pkgPathAliases || {}),\n ...codeSrcs,\n ]),\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: this.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}\nexport const demoAppName = 'DemoApp';\n\nfunction renderDemoAppTemplate({\n imports = '',\n children,\n}: {\n imports: string;\n children: string;\n}) {\n return `${imports}\n\nfunction ${demoAppName}() {\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 format,\n}: {\n children: string;\n imports?: string;\n format?: boolean;\n}): Promise<string> {\n const code = renderDemoAppTemplate({\n children,\n imports,\n });\n if (!format) return code;\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","import type { Demo, Except } from '@knapsack/types';\nimport type { ComponentType } from 'react';\nimport type { RendererMetaBase } from '@knapsack/renderer-webpack-base/client';\n\nexport type Component = ComponentType<Record<string, unknown>>;\n\nexport type DemoWrapperProps = {\n children: React.ReactNode;\n demo: Demo;\n patternId: string;\n templateId: string;\n};\n\nexport type ExtraJsImportNames = 'DemoWrapper' | 'ErrorCatcher';\n/**\n * Found as JSON in HTML `#ks-react-meta`\n */\nexport type KsReactMeta = {\n disableReactStrictMode: boolean;\n demo: Demo;\n demoWrapperProps: Except<DemoWrapperProps, 'children'>;\n} & RendererMetaBase;\n\nexport const rendererMetaScriptTagId = 'ks-react-meta';\n\nexport type RendererMethods = {\n getDemoApp: (components: Record<string, Component>) => Component;\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","fileExists","sleep","usage","_exhaustiveCheck","path","exports"]}
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/react-creators.ts","../src/types.ts","../src/renderer-react.ts"],"names":["renderUsageTemplate","templateName","attributes","children","__name","demoAppName","renderDemoAppTemplate","imports","getUsage","data","props","key","value","extraProps","extraAttributes","slotProps","values","result","formatCode","code","getDemoAppUsage","format","getTypeScriptInfoFromFile","src","tsConfigPath","findUp","path","rdTs","config","extractSpecFromTypeScriptInfo","results","exportName","spec","r","propName","propDef","name","description","defaultValue","required","type","parent","removeWrappingDoubleQuotes","options","enumItem","isNumberProp","error","log","getPropTypesInfoFromFile","reactDocs","builtinResolvers","fileSrc","readFile","FindExportedDefinitionsResolver","extractSpecFromPropTypesInfo","cleanUpSpec","prop","isOptionsProp","getReactModuleInfoUncached","unknownSrc","resolveFromDir","typesInfo","resolvePath","typeScriptInfo","jsInfo","ext","getReactModuleInfoCache","clearInferSpecCache","getReactModuleInfo","args","cacheKey","getReactSpec","reactModuleInfo","getReactDocs","opt","copyReactAssets","distDirAbsolute","publicPath","reactVersion","getModulePkgJson","reactDomVersion","reactRoot","__require","reactDomRoot","copy","reactFileSuffix","isCapitalLetter","char","startsWithCapitalLetter","str","createPatternData","importName","id","title","pkgPath","initialDemoId","createReactPattern","createCreator","importPrefix","dataDir","currentReactPatternsImportNames","readKsPatternConfigs","cur","pattern","reactTemplates","t","allImports","getJsExportNames","_","task","tasks","importNames","patterns","patternId","__","subTask","initialDemo","makeShortId","writeDemo","writeKsPatternConfig","byId","readKsNavConfig","componentsGroup","addKsNavItems","rendererMetaScriptTagId","pkg","findUpPkgJson","errorCatcherAbsolutePath","join","fileExists","KnapsackReactRenderer","_KnapsackReactRenderer","RendererWebpackBase","#demoWrapperPath","#disableReactStrictMode","webpackConfig","demoWrapperPath","rendererIds","disableReactStrictMode","absolutePath","demoWrapperPathExists","pascalCase","usage","demoApp","importMap","demo","state","templateId","meta","convertImportMapToNeededImportsByCodeSrcId","errorHtmlMsg","babelCodeForBrowser","e","html","asset","waits","templateDemoPath","attempt","exists","waitTime","sleep","templateFileContents","importCode","demoAppUsage","template","slots","slotsOptionsComputed","slotNames","slotName","slotItems","slotItemsUsages","slotItem","slottedTemplate","thisDemo","slotOptionsComputed","openTag","closeTag","createSlotOptionsHtmlTags","templateInfo","templatePath","totalProps","totalSlots","knapsackEvents","files","schema","info","typeDefs","metaDir","file","base","parse","isFirst","exportNameWithTemplateId","relative","newPath","usedSuggestions","acc","templateDemos","templates","alias","templateLanguageId","codeSrcs","allPaths","exports","errorMsg","isFirstLetterCapital","s","us"],"mappings":"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","file":"index.js","sourcesContent":["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}\nexport const demoAppName = 'DemoApp';\n\nfunction renderDemoAppTemplate({\n imports = '',\n children,\n}: {\n imports: string;\n children: string;\n}) {\n return `${imports}\n\nfunction ${demoAppName}() {\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 format,\n}: {\n children: string;\n imports?: string;\n format?: boolean;\n}): Promise<string> {\n const code = renderDemoAppTemplate({\n children,\n imports,\n });\n if (!format) return code;\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","import type { Demo, Except } from '@knapsack/types';\nimport type { ComponentType } from 'react';\nimport type { RendererMetaBase } from '@knapsack/renderer-webpack-base/client';\n\nexport type Component = ComponentType<Record<string, unknown>>;\n\nexport type DemoWrapperProps = {\n children: React.ReactNode;\n demo: Demo;\n patternId: string;\n templateId: string;\n};\n\nexport type ExtraJsImportNames = 'DemoWrapper' | 'ErrorCatcher';\n/**\n * Found as JSON in HTML `#ks-react-meta`\n */\nexport type KsReactMeta = {\n disableReactStrictMode: boolean;\n demo: Demo;\n demoWrapperProps: Except<DemoWrapperProps, 'children'>;\n} & RendererMetaBase;\n\nexport const rendererMetaScriptTagId = 'ks-react-meta';\n\nexport type RendererMethods = {\n getDemoApp: (components: Record<string, Component>) => Component;\n};\n","import sleep from 'sleep-promise';\nimport {\n RendererWebpackBase,\n Renderer,\n KsJsImportMap,\n convertImportMapToNeededImportsByCodeSrcId,\n} from '@knapsack/renderer-webpack-base';\nimport { pascalCase, isFirstLetterCapital } from '@knapsack/utils';\nimport { knapsackEvents, log } from '@knapsack/app';\nimport {\n Renderable,\n babelCodeForBrowser,\n createSlotOptionsHtmlTags,\n} from '@knapsack/app/renderers';\nimport {\n KnapsackFile,\n KnapsackPatternTemplate,\n KsTemplateSpec,\n TemplateSuggestion,\n rendererIds,\n RendererId,\n} from '@knapsack/types';\nimport {\n exists as fileExists,\n findUpPkgJson,\n getJsExportNames,\n readFile,\n formatCode,\n} from '@knapsack/file-utils';\nimport { join, relative, parse } from 'path';\nimport {\n clearInferSpecCache,\n copyReactAssets,\n demoAppName,\n getDemoAppUsage,\n getReactDocs,\n getUsage,\n} from './utils';\nimport { createReactPattern } from './react-creators';\nimport {\n ExtraJsImportNames,\n KsReactMeta,\n rendererMetaScriptTagId,\n} from './types';\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\nconst errorCatcherAbsolutePath = join(__dirname, './error-catcher.mjs');\nif (!fileExists(errorCatcherAbsolutePath)) {\n throw new Error(\n `Could not find error catcher at: ${errorCatcherAbsolutePath}`,\n );\n}\n\nexport class KnapsackReactRenderer\n extends RendererWebpackBase\n implements Renderable\n{\n /**\n * `react.js` & `react-dom.js` root relative paths\n */\n assets: string[];\n babelConfig: Record<string, unknown>;\n #demoWrapperPath: string;\n #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 RendererWebpackBase\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 language: 'jsx',\n webpackConfig,\n extraScripts: [\n // this is the code in `./client/init.mts`\n '@knapsack/renderer-react/client',\n ],\n });\n this.language = 'jsx';\n this.assets = [];\n this.#demoWrapperPath = demoWrapperPath;\n this.#disableReactStrictMode = disableReactStrictMode;\n this.creators = [createReactPattern];\n }\n\n override setConfig: Renderer['setConfig'] = (opt) => {\n super.setConfig(opt);\n const {\n absolutePath,\n exists: demoWrapperPathExists,\n type,\n } = this.resolvePathSync({\n path: this.#demoWrapperPath,\n resolveFromDir: this.userConfigDir,\n });\n if (!demoWrapperPathExists) {\n throw new Error(\n `Could not find demo wrapper at: \"${\n this.#demoWrapperPath\n }\"\\nPlease adjust setting in \"knapsack.config.js\" or pass a different path when creating the React Renderer.`,\n );\n }\n this.registerExtraJsImports<ExtraJsImportNames>({\n DemoWrapper: {\n exportName: 'DemoWrapper',\n isDefaultExport: true,\n path: type === 'package' ? this.#demoWrapperPath : absolutePath,\n },\n ErrorCatcher: {\n exportName: 'ErrorCatcher',\n isDefaultExport: true,\n path: errorCatcherAbsolutePath,\n },\n });\n };\n\n init: Renderer['init'] = async () => {\n this.assets = await copyReactAssets(this.outputDir, this.publicPath);\n };\n\n override hydrate: Renderer['hydrate'] = async (opt) => {\n await super.hydrate(opt);\n await this.init({ missingFileVerbosity: 'silent' });\n };\n\n getMeta: Renderer['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 override changeCase: Renderer['changeCase'] = (str) => pascalCase(str);\n\n override createWebpackConfig: RendererWebpackBase['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 async prepClientRenderResults({\n usage,\n demoApp,\n importMap,\n renderOptions: { demo, state, patternId, templateId },\n }: {\n usage: string;\n demoApp: string;\n importMap: KsJsImportMap;\n renderOptions: Parameters<Renderer['render']>[0];\n }): ReturnType<Renderer['render']> {\n const meta = {\n demo,\n disableReactStrictMode: this.#disableReactStrictMode,\n neededImportsByCodeSrcId:\n convertImportMapToNeededImportsByCodeSrcId(importMap),\n demoWrapperProps: {\n patternId,\n templateId,\n demo,\n },\n } as const satisfies KsReactMeta;\n\n let code = `\n window.knapsack = window.knapsack || {};\n window.knapsack.getDemoApp = ({ ${[...importMap.keys()].join(', ')} }) => {\n ${demoApp}\n return ${demoAppName}\n }\n `;\n\n let errorHtmlMsg = '';\n try {\n code = await babelCodeForBrowser({ code });\n } catch (e) {\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 const html = `\n <script type=\"application/json\" id=\"${rendererMetaScriptTagId}\">${JSON.stringify(\n meta,\n )}</script>\n <script type=\"application/javascript\">${code}</script>\n <div id=\"render-root\" class=\"knapsack-pattern-direct-parent\" data-dev-note=\"Knapsack React Template Wrapper\"></div>\n ${this.assets.map((asset) => `<script src=\"${asset}\"></script>`).join('\\n')}\n ${RendererWebpackBase.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 ${errorHtmlMsg}\n `;\n\n return {\n ok: !errorHtmlMsg,\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 render: Renderer['render'] = async (opt) => {\n if (opt.demo?.type === 'template') {\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 const { absolutePath, exists } = await this.resolvePath(\n opt.demo.templateInfo.path,\n );\n if (!exists) {\n throw new Error(\n `Template demo file does not exist: ${absolutePath}`,\n );\n }\n templateDemoPath = absolutePath;\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 const [templateFileContents, { usage, importMap }] = await Promise.all([\n readFile(templateDemoPath),\n this.getUsageAndImports({\n ...opt,\n importMap: new Map(),\n }),\n ]);\n const demoApp = await getDemoAppUsage({\n children: usage,\n });\n const results = await this.prepClientRenderResults({\n usage: templateFileContents,\n demoApp,\n renderOptions: opt,\n importMap,\n });\n\n return results;\n }\n\n if (opt.demo?.type === 'data') {\n const { usage, importMap } = await this.getUsageAndImports({\n ...opt,\n importMap: new Map(),\n });\n const importCode = RendererWebpackBase.createJsImportCodeBlock({\n importMap,\n });\n const [demoAppUsage, demoApp] = await Promise.all([\n getDemoAppUsage({\n children: usage,\n imports: importCode,\n format: true,\n }),\n getDemoAppUsage({\n children: usage,\n }),\n ]);\n\n return this.prepClientRenderResults({\n demoApp,\n usage: demoAppUsage,\n renderOptions: opt,\n importMap,\n });\n }\n };\n\n getUsageAndImports: RendererWebpackBase['getUsageAndImports'] = async ({\n patternId,\n templateId,\n demo,\n state,\n importMap,\n }) => {\n if (!demo) {\n throw new Error(\n `No demo provided while rendering ${patternId} ${templateId}`,\n );\n }\n const pattern = state.patterns[patternId];\n if (!pattern) {\n throw new Error(`Could not find pattern: ${patternId}`);\n }\n if (demo.type === 'data') {\n const template = pattern.templates.find((t) => t.id === templateId);\n if (!template) {\n throw new Error(`Could not find template: ${templateId}`);\n }\n const {\n data: { props, slots, slotsOptionsComputed },\n } = demo;\n const { name: templateName } = await this.addUniqueValueToImportMap({\n importMap,\n path: template.path,\n alias: template.alias || 'default',\n });\n\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 (!slotItem) return false;\n if (slotItem.type !== 'text') {\n if (!slotItem.patternId) return false;\n if (!slotItem.templateId) return false;\n if (slotItem.type === 'template-demo' && !slotItem.demoId) {\n return false;\n }\n }\n return true;\n })\n .map(async (slotItem) => {\n if (slotItem.type === 'text') {\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 if (slotItem.type === 'template-reference') {\n const slottedTemplate = state.patterns[\n slotItem.patternId\n ]?.templates.find((t) => t.id === slotItem.templateId);\n if (!slottedTemplate) {\n throw new Error(\n `Could not find slotted template: ${slotItem.patternId} ${slotItem.templateId}`,\n );\n }\n const templateRefImport =\n await this.addUniqueValueToImportMap({\n importMap,\n path: slottedTemplate.path,\n alias: slottedTemplate.alias || 'default',\n });\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 return templateRefImport.name;\n }\n if (slotItem.type === 'template-demo') {\n const thisDemo = slotItem.demo;\n if (!thisDemo) {\n throw new Error(\n `Could not find slotted template demo ${JSON.stringify(\n slotItem,\n )}`,\n );\n }\n const { usage } = await this.getUsageAndImports({\n patternId: thisDemo.patternId,\n templateId: thisDemo.templateId,\n demo: thisDemo,\n state,\n importMap,\n });\n return usage;\n }\n const _exhaustiveCheck: never = slotItem;\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 importMap,\n };\n }\n\n if (demo.type === 'template') {\n const { templateInfo } = demo;\n const { name: templateName } = await this.addUniqueValueToImportMap({\n importMap,\n path: templateInfo.path,\n alias: templateInfo.alias || 'default',\n });\n const usage = await getUsage({ templateName });\n\n return {\n usage,\n importMap,\n };\n }\n\n const _exhaustiveCheck: never = demo;\n throw new Error(\n `Unhandled demo type for ${patternId}-${templateId}: ${JSON.stringify(\n demo,\n )}`,\n );\n };\n\n inferSpec: Renderer['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 override watch: Renderer['watch'] = async () => {\n super.watch();\n knapsackEvents.onPatternTemplateChanged(() => {\n clearInferSpecCache();\n });\n };\n\n getTemplateMeta: Renderer['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: Renderer['alterTemplateMetaFiles'] = async ({\n files,\n metaDir,\n }) => {\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 getTemplateSuggestions: Renderer['getTemplateSuggestions'] = async ({\n newPath,\n state,\n }) => {\n const usedSuggestions = Object.values(state.patterns).reduce(\n (acc, { templateDemos, templates }) => {\n templates.forEach(({ path, alias, templateLanguageId }) => {\n if (templateLanguageId !== this.id) return;\n acc.push({ path, alias });\n });\n templateDemos.forEach(\n ({ templateInfo: { path, alias }, templateLanguageId }) => {\n if (templateLanguageId !== this.id) return;\n acc.push({ path, alias });\n },\n );\n return acc;\n },\n [] as TemplateSuggestion[],\n );\n\n const codeSrcs = new Set(this.getCodeSrcs().map(({ path }) => path));\n\n const allPaths = [\n ...new Set([\n newPath,\n ...Object.keys(this.pkgPathAliases || {}),\n ...codeSrcs,\n ]),\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: this.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"]}
|