@knapsack/renderer-react 4.66.10 → 4.66.11--canary.e7a10b9.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/CHANGELOG.md CHANGED
@@ -1,19 +1,3 @@
1
- # v4.66.8 (Fri Jul 26 2024)
2
-
3
- #### 🐛 Bug Fix
4
-
5
- - fix bug where code usage block creates invalid HTML [#4390](https://github.com/knapsack-labs/app-monorepo/pull/4390) ([@EvanLovely](https://github.com/EvanLovely))
6
-
7
- #### 🏠 Internal
8
-
9
- - make types for `slotsOptions` and add Renderer support [#4389](https://github.com/knapsack-labs/app-monorepo/pull/4389) ([@EvanLovely](https://github.com/EvanLovely))
10
-
11
- #### Authors: 1
12
-
13
- - Evan Lovely ([@EvanLovely](https://github.com/EvanLovely))
14
-
15
- ---
16
-
17
1
  # v4.66.7 (Tue Jul 23 2024)
18
2
 
19
3
  #### 🐛 Bug Fix
package/dist/index.js CHANGED
@@ -729,7 +729,6 @@ var createReactPattern = (0, import_creator_utils.createCreator)({
729
729
  // src/renderer-react.ts
730
730
  var { pkg } = (0, import_file_utils3.findUpPkgJson)(__dirname);
731
731
  import_app2.log.setupUpdateNotifier({ ...pkg, name: pkg.name, version: pkg.version });
732
- var { hasSlotOptions } = import_app2.KnapsackRendererBase;
733
732
  var KnapsackReactRenderer = class _KnapsackReactRenderer extends import_renderer_webpack_base.KnapsackRendererWebpackBase {
734
733
  static {
735
734
  __name(this, "KnapsackReactRenderer");
@@ -779,7 +778,6 @@ var KnapsackReactRenderer = class _KnapsackReactRenderer extends import_renderer
779
778
  enableDataDemos: true,
780
779
  enableTemplateDemos: true,
781
780
  hasSlotsSupport: true,
782
- hasSlotOptionsSupport: true,
783
781
  version: pkg.version,
784
782
  hasInferSpecSupport: true,
785
783
  syntaxHighlightingLanguage: "jsx",
@@ -1070,7 +1068,7 @@ ${errorHtmlMsg}
1070
1068
  const { pattern, template, patternManifest, demo } = opt;
1071
1069
  if (demo?.type && _KnapsackReactRenderer.isDataDemo(demo)) {
1072
1070
  const {
1073
- data: { props, slots, slotsOptionsComputed }
1071
+ data: { props, slots }
1074
1072
  } = demo;
1075
1073
  const importInfo = this.getJsImport({
1076
1074
  patternId: pattern.id,
@@ -1090,7 +1088,7 @@ ${errorHtmlMsg}
1090
1088
  const slotUsages = await Promise.all(
1091
1089
  slotNames.map(async (slotName) => {
1092
1090
  const slotItems = slots[slotName];
1093
- const slotItemsUsages = await Promise.all(
1091
+ const usages = await Promise.all(
1094
1092
  slotItems.filter((slotItem) => {
1095
1093
  if (!(0, import_types2.isSlottedText)(slotItem)) {
1096
1094
  if (!slotItem.patternId)
@@ -1141,29 +1139,12 @@ ${errorHtmlMsg}
1141
1139
  );
1142
1140
  return {
1143
1141
  slotName,
1144
- slotItemsUsages
1142
+ usages
1145
1143
  };
1146
1144
  })
1147
1145
  );
1148
- slotUsages.forEach(({ slotName, slotItemsUsages }) => {
1149
- const slotOptionsComputed = slotsOptionsComputed?.[slotName];
1150
- if (hasSlotOptions(slotOptionsComputed)) {
1151
- const { attributes, cssClasses, styles, wrappingElementName } = slotOptionsComputed;
1152
- const openTag = `<${wrappingElementName}
1153
- ${(0, import_utils3.isEmpty)(styles) ? "" : `style={${JSON.stringify(styles)}}`}
1154
- ${(0, import_utils3.isEmpty)(cssClasses) ? "" : `className="${cssClasses.join(" ")}"`}
1155
- ${Object.entries(attributes).map(([key, value]) => `${key}="${value}"`).join(" ")}
1156
- >`;
1157
- if (slotName === "children") {
1158
- children.push(openTag);
1159
- } else {
1160
- extraProps.push({
1161
- key: slotName,
1162
- value: openTag
1163
- });
1164
- }
1165
- }
1166
- slotItemsUsages.forEach((usage2) => {
1146
+ slotUsages.forEach(({ slotName, usages }) => {
1147
+ usages.forEach((usage2) => {
1167
1148
  if (slotName === "children") {
1168
1149
  children.push(usage2);
1169
1150
  } else {
@@ -1173,17 +1154,6 @@ ${errorHtmlMsg}
1173
1154
  });
1174
1155
  }
1175
1156
  });
1176
- if (hasSlotOptions(slotOptionsComputed)) {
1177
- const closeTag = `</${slotOptionsComputed.wrappingElementName}>`;
1178
- if (slotName === "children") {
1179
- children.push(closeTag);
1180
- } else {
1181
- extraProps.push({
1182
- key: slotName,
1183
- value: closeTag
1184
- });
1185
- }
1186
- }
1187
1157
  });
1188
1158
  }
1189
1159
  const usage = await getUsage({
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 {\n pascalCase,\n Except,\n isFirstLetterCapital,\n isObject,\n isEmpty,\n} 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 { hasSlotOptions } = 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 if (hasSlotOptions(slotOptionsComputed)) {\n const { attributes, cssClasses, styles, wrappingElementName } =\n slotOptionsComputed;\n const openTag = `<${wrappingElementName}\n ${isEmpty(styles) ? '' : `style={${JSON.stringify(styles)}}`}\n ${isEmpty(cssClasses) ? '' : `className=\"${cssClasses.join(' ')}\"`}\n ${Object.entries(attributes)\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join(' ')}\n >`;\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 (hasSlotOptions(slotOptionsComputed)) {\n const closeTag = `</${slotOptionsComputed.wrappingElementName}>`;\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 {\n resolve: { alias },\n } = this.createWebpackConfig();\n const aliasConfig: Record<string, string> = {};\n if (isObject(alias)) {\n Object.entries(alias).forEach(([key, value]) => {\n if (typeof value === 'string') {\n aliasConfig[key] = value;\n }\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: dataDir,\n alias: aliasConfig,\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","alias","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 {\n pascalCase,\n Except,\n isFirstLetterCapital,\n isObject,\n} from '@knapsack/utils';\nimport { knapsackEvents, log } 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\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 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 },\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 usages = 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 usages,\n };\n }),\n );\n\n slotUsages.forEach(({ slotName, usages }) => {\n usages.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 }\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 {\n resolve: { alias },\n } = this.createWebpackConfig();\n const aliasConfig: Record<string, string> = {};\n if (isObject(alias)) {\n Object.entries(alias).forEach(([key, value]) => {\n if (typeof value === 'string') {\n aliasConfig[key] = value;\n }\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: dataDir,\n alias: aliasConfig,\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","alias","exports"]}
package/dist/index.mjs CHANGED
@@ -21,10 +21,9 @@ import { KnapsackRendererWebpackBase } from "@knapsack/renderer-webpack-base";
21
21
  import {
22
22
  pascalCase,
23
23
  isFirstLetterCapital,
24
- isObject,
25
- isEmpty
24
+ isObject
26
25
  } from "@knapsack/utils";
27
- import { knapsackEvents, log as log2, KnapsackRendererBase } from "@knapsack/app";
26
+ import { knapsackEvents, log as log2 } from "@knapsack/app";
28
27
  import {
29
28
  isSlottedText,
30
29
  isSlottedTemplateReference,
@@ -739,7 +738,6 @@ var createReactPattern = createCreator({
739
738
  // src/renderer-react.ts
740
739
  var { pkg } = findUpPkgJson(__dirname);
741
740
  log2.setupUpdateNotifier({ ...pkg, name: pkg.name, version: pkg.version });
742
- var { hasSlotOptions } = KnapsackRendererBase;
743
741
  var KnapsackReactRenderer = class _KnapsackReactRenderer extends KnapsackRendererWebpackBase {
744
742
  static {
745
743
  __name(this, "KnapsackReactRenderer");
@@ -789,7 +787,6 @@ var KnapsackReactRenderer = class _KnapsackReactRenderer extends KnapsackRendere
789
787
  enableDataDemos: true,
790
788
  enableTemplateDemos: true,
791
789
  hasSlotsSupport: true,
792
- hasSlotOptionsSupport: true,
793
790
  version: pkg.version,
794
791
  hasInferSpecSupport: true,
795
792
  syntaxHighlightingLanguage: "jsx",
@@ -1080,7 +1077,7 @@ ${errorHtmlMsg}
1080
1077
  const { pattern, template, patternManifest, demo } = opt;
1081
1078
  if (demo?.type && _KnapsackReactRenderer.isDataDemo(demo)) {
1082
1079
  const {
1083
- data: { props, slots, slotsOptionsComputed }
1080
+ data: { props, slots }
1084
1081
  } = demo;
1085
1082
  const importInfo = this.getJsImport({
1086
1083
  patternId: pattern.id,
@@ -1100,7 +1097,7 @@ ${errorHtmlMsg}
1100
1097
  const slotUsages = await Promise.all(
1101
1098
  slotNames.map(async (slotName) => {
1102
1099
  const slotItems = slots[slotName];
1103
- const slotItemsUsages = await Promise.all(
1100
+ const usages = await Promise.all(
1104
1101
  slotItems.filter((slotItem) => {
1105
1102
  if (!isSlottedText(slotItem)) {
1106
1103
  if (!slotItem.patternId)
@@ -1151,29 +1148,12 @@ ${errorHtmlMsg}
1151
1148
  );
1152
1149
  return {
1153
1150
  slotName,
1154
- slotItemsUsages
1151
+ usages
1155
1152
  };
1156
1153
  })
1157
1154
  );
1158
- slotUsages.forEach(({ slotName, slotItemsUsages }) => {
1159
- const slotOptionsComputed = slotsOptionsComputed?.[slotName];
1160
- if (hasSlotOptions(slotOptionsComputed)) {
1161
- const { attributes, cssClasses, styles, wrappingElementName } = slotOptionsComputed;
1162
- const openTag = `<${wrappingElementName}
1163
- ${isEmpty(styles) ? "" : `style={${JSON.stringify(styles)}}`}
1164
- ${isEmpty(cssClasses) ? "" : `className="${cssClasses.join(" ")}"`}
1165
- ${Object.entries(attributes).map(([key, value]) => `${key}="${value}"`).join(" ")}
1166
- >`;
1167
- if (slotName === "children") {
1168
- children.push(openTag);
1169
- } else {
1170
- extraProps.push({
1171
- key: slotName,
1172
- value: openTag
1173
- });
1174
- }
1175
- }
1176
- slotItemsUsages.forEach((usage2) => {
1155
+ slotUsages.forEach(({ slotName, usages }) => {
1156
+ usages.forEach((usage2) => {
1177
1157
  if (slotName === "children") {
1178
1158
  children.push(usage2);
1179
1159
  } else {
@@ -1183,17 +1163,6 @@ ${errorHtmlMsg}
1183
1163
  });
1184
1164
  }
1185
1165
  });
1186
- if (hasSlotOptions(slotOptionsComputed)) {
1187
- const closeTag = `</${slotOptionsComputed.wrappingElementName}>`;
1188
- if (slotName === "children") {
1189
- children.push(closeTag);
1190
- } else {
1191
- extraProps.push({
1192
- key: slotName,
1193
- value: closeTag
1194
- });
1195
- }
1196
- }
1197
1166
  });
1198
1167
  }
1199
1168
  const usage = await getUsage({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../node_modules/.pnpm/tsup@8.0.2_@microsoft+api-extractor@7.43.8_@types+node@20.14.9__@swc+core@1.3.57_postcss@8.4._c7ofiv7d7od3vtkxwbcxujiyae/node_modules/tsup/assets/esm_shims.js","../src/renderer-react.ts","../src/utils.ts","../src/react-creators.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import sleep from 'sleep-promise';\nimport { KnapsackRendererWebpackBase } from '@knapsack/renderer-webpack-base';\nimport {\n pascalCase,\n Except,\n isFirstLetterCapital,\n isObject,\n isEmpty,\n} 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 { hasSlotOptions } = 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 if (hasSlotOptions(slotOptionsComputed)) {\n const { attributes, cssClasses, styles, wrappingElementName } =\n slotOptionsComputed;\n const openTag = `<${wrappingElementName}\n ${isEmpty(styles) ? '' : `style={${JSON.stringify(styles)}}`}\n ${isEmpty(cssClasses) ? '' : `className=\"${cssClasses.join(' ')}\"`}\n ${Object.entries(attributes)\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join(' ')}\n >`;\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 (hasSlotOptions(slotOptionsComputed)) {\n const closeTag = `</${slotOptionsComputed.wrappingElementName}>`;\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 {\n resolve: { alias },\n } = this.createWebpackConfig();\n const aliasConfig: Record<string, string> = {};\n if (isObject(alias)) {\n Object.entries(alias).forEach(([key, value]) => {\n if (typeof value === 'string') {\n aliasConfig[key] = value;\n }\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: dataDir,\n alias: aliasConfig,\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":["log","getJsExportNames","readFile","formatCode","path","path","parse","path","log","formatCode","readFile","usage","path","alias","getJsExportNames"]}
1
+ {"version":3,"sources":["../../../../../node_modules/.pnpm/tsup@8.0.2_@microsoft+api-extractor@7.43.8_@types+node@20.14.9__@swc+core@1.3.57_postcss@8.4._c7ofiv7d7od3vtkxwbcxujiyae/node_modules/tsup/assets/esm_shims.js","../src/renderer-react.ts","../src/utils.ts","../src/react-creators.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import sleep from 'sleep-promise';\nimport { KnapsackRendererWebpackBase } from '@knapsack/renderer-webpack-base';\nimport {\n pascalCase,\n Except,\n isFirstLetterCapital,\n isObject,\n} from '@knapsack/utils';\nimport { knapsackEvents, log } 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\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 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 },\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 usages = 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 usages,\n };\n }),\n );\n\n slotUsages.forEach(({ slotName, usages }) => {\n usages.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 }\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 {\n resolve: { alias },\n } = this.createWebpackConfig();\n const aliasConfig: Record<string, string> = {};\n if (isObject(alias)) {\n Object.entries(alias).forEach(([key, value]) => {\n if (typeof value === 'string') {\n aliasConfig[key] = value;\n }\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: dataDir,\n alias: aliasConfig,\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":["log","getJsExportNames","readFile","formatCode","path","path","parse","path","log","formatCode","readFile","usage","path","alias","getJsExportNames"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@knapsack/renderer-react",
3
3
  "description": "Render React",
4
- "version": "4.66.10",
4
+ "version": "4.66.11--canary.e7a10b9.0",
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -31,13 +31,13 @@
31
31
  "author": "Knapsack",
32
32
  "dependencies": {
33
33
  "@babel/preset-react": "^7.24.7",
34
- "@knapsack/app": "4.66.10",
35
- "@knapsack/creator-utils": "4.66.10",
36
- "@knapsack/file-utils": "4.66.10",
37
- "@knapsack/ks-file-utils": "4.66.10",
38
- "@knapsack/renderer-webpack-base": "4.66.10",
39
- "@knapsack/types": "4.66.10",
40
- "@knapsack/utils": "4.66.10",
34
+ "@knapsack/app": "4.66.11--canary.e7a10b9.0",
35
+ "@knapsack/creator-utils": "4.66.11--canary.e7a10b9.0",
36
+ "@knapsack/file-utils": "4.66.11--canary.e7a10b9.0",
37
+ "@knapsack/ks-file-utils": "4.66.11--canary.e7a10b9.0",
38
+ "@knapsack/renderer-webpack-base": "4.66.11--canary.e7a10b9.0",
39
+ "@knapsack/types": "4.66.11--canary.e7a10b9.0",
40
+ "@knapsack/utils": "4.66.11--canary.e7a10b9.0",
41
41
  "react": "^18.3.1",
42
42
  "react-docgen": "^6.0.4",
43
43
  "react-docgen-typescript": "^2.2.2",
@@ -46,10 +46,10 @@
46
46
  "typescript": "^5.5.3"
47
47
  },
48
48
  "devDependencies": {
49
- "@knapsack/eslint-config-starter": "4.66.10",
50
- "@knapsack/sandbox-components": "4.66.10",
51
- "@knapsack/test-ava": "4.66.10",
52
- "@knapsack/typescript-config-starter": "4.66.10",
49
+ "@knapsack/eslint-config-starter": "4.66.11--canary.e7a10b9.0",
50
+ "@knapsack/sandbox-components": "4.66.11--canary.e7a10b9.0",
51
+ "@knapsack/test-ava": "4.66.11--canary.e7a10b9.0",
52
+ "@knapsack/typescript-config-starter": "4.66.11--canary.e7a10b9.0",
53
53
  "@mui/material": "^5.15.18",
54
54
  "@mui/x-data-grid": "^6.19.11",
55
55
  "@types/node": "^20.12.12",
@@ -68,5 +68,5 @@
68
68
  "directory": "apps/client/renderers/renderer-react",
69
69
  "type": "git"
70
70
  },
71
- "gitHead": "852c14bcc2ab1d40b122aa67d656c033faee79a8"
71
+ "gitHead": "e7a10b9e495c62f67afda29cbd64474d05959196"
72
72
  }