@knapsack/renderer-react 4.68.1 → 4.68.2--canary.65c06ca.0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +14 -14
package/dist/index.mjs
CHANGED
@@ -8,7 +8,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
8
8
|
throw Error('Dynamic require of "' + x + '" is not supported');
|
9
9
|
});
|
10
10
|
|
11
|
-
// ../../../../node_modules/.pnpm/tsup@8.0.2_@microsoft+api-extractor@7.43.8_@types+node@20.
|
11
|
+
// ../../../../node_modules/.pnpm/tsup@8.0.2_@microsoft+api-extractor@7.43.8_@types+node@20.16.1__@swc+core@1.3.57_@swc+helpers_cstkf2rtisiifgkfujemx5llme/node_modules/tsup/assets/esm_shims.js
|
12
12
|
import { fileURLToPath } from "url";
|
13
13
|
import path from "path";
|
14
14
|
var getFilename = /* @__PURE__ */ __name(() => fileURLToPath(import.meta.url), "getFilename");
|
package/dist/index.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../../node_modules/.pnpm/tsup@8.0.2_@microsoft+api-extractor@7.43.8_@types+node@20.14.15__@swc+core@1.3.57_postcss@8.4_yxzzvrmcxw2wv2cu2l6odul3pa/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 { pascalCase, Except, isFirstLetterCapital } from '@knapsack/utils';\nimport { knapsackEvents, log, KnapsackRendererBase } from '@knapsack/app';\nimport {\n KsRendererClientGlobal,\n KnapsackFile,\n KsJsImport,\n isSlottedText,\n isSlottedTemplateReference,\n isSlottedTemplateDemo,\n KnapsackPatternTemplate,\n KsTemplateSpec,\n TemplateSuggestion,\n rendererIds,\n RendererId,\n} from '@knapsack/types';\nimport type {\n KnapsackRenderParams,\n KnapsackTemplateRenderer,\n KnapsackTemplateRendererBase,\n KnapsackTemplateRendererResults,\n Patterns,\n} from '@knapsack/app/types';\nimport {\n exists,\n findUpPkgJson,\n getJsExportNames,\n readFile,\n formatCode,\n} from '@knapsack/file-utils';\nimport type { ReactNode } from 'react';\nimport { join, relative, parse } from 'path';\nimport {\n clearInferSpecCache,\n copyReactAssets,\n getDemoAppUsage,\n getReactDocs,\n getUsage,\n} from './utils';\nimport { createReactPattern } from './react-creators';\n\nconst { pkg } = findUpPkgJson(__dirname);\n// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\nlog.setupUpdateNotifier({ ...pkg, name: pkg.name!, version: pkg.version! });\n\n// static methods only\nconst { createSlotOptionsHtmlTags } = KnapsackRendererBase;\n\nexport type DemoWrapperProps = {\n children: React.ReactNode;\n patternsUsed: {\n patternId: string;\n templateId: string;\n demoId?: string;\n }[];\n} & Except<KnapsackRenderParams, 'patternManifest'>;\n\nexport class KnapsackReactRenderer\n extends KnapsackRendererWebpackBase\n implements KnapsackTemplateRenderer\n{\n /**\n * `react.js` & `react-dom.js` root relative paths\n */\n assets: string[];\n babelConfig: Record<string, unknown>;\n creators: KnapsackTemplateRenderer['creators'];\n private demoWrapperPath: string;\n\n private disableReactStrictMode?: boolean;\n\n constructor({\n webpackConfig,\n demoWrapperPath = join(__dirname, './demo-wrapper.mjs'),\n id = rendererIds.react,\n disableReactStrictMode,\n }: {\n webpackConfig?: ConstructorParameters<\n typeof KnapsackRendererWebpackBase\n >[0]['webpackConfig'];\n demoWrapperPath?: string;\n /** When using React v18+, this option allows a workspace to _disable_ React's Strict Mode from running in Knapsack's React Renderer (StrictMode is enabled by default).\n *\n * See https://reactjs.org/docs/strict-mode.html for more info\n * */\n disableReactStrictMode?: boolean;\n /** Don't set if calling from `knapsack.config.js`, only use if creating a new Renderer based on the React Renderer */\n id?: RendererId;\n } = {}) {\n super({\n id,\n extension: '.jsx',\n language: 'jsx',\n webpackConfig,\n });\n this.language = 'jsx';\n this.assets = [];\n this.demoWrapperPath = demoWrapperPath;\n\n // Half-borrowing the API Synax for this from the latest version of Next.js\n this.disableReactStrictMode = disableReactStrictMode;\n this.creators = [createReactPattern];\n }\n\n async init(opt: { patterns: Patterns; cacheDir: string }): Promise<void> {\n await super.init(opt);\n this.assets = await copyReactAssets(this.outputDir, this.publicPath);\n if (!(await exists(this.demoWrapperPath))) {\n throw new Error(\n `Could not find demo wrapper at: \"${this.demoWrapperPath}\"`,\n );\n }\n }\n\n getMeta: KnapsackTemplateRenderer['getMeta'] = () => ({\n id: this.id,\n title: 'React',\n aliasUse: 'optional',\n aliasTitle: 'Named Export',\n aliasIsJsNamedExport: true,\n aliasDescription:\n 'If `export X` was used instead of `export default`, then provide X.',\n enableDataDemos: true,\n enableTemplateDemos: true,\n hasSlotsSupport: true,\n hasSlotOptionsSupport: true,\n version: pkg.version,\n hasInferSpecSupport: true,\n syntaxHighlightingLanguage: 'jsx',\n hasTemplateSuggestionsSupport: true,\n prototypingTemplate: {\n path: '@knapsack/renderer-react/prototype-template',\n spec: {\n isInferred: false,\n props: {\n type: 'object',\n properties: {},\n },\n slots: {\n children: { title: 'Children' },\n },\n },\n },\n });\n\n changeCase(str: string): string {\n return pascalCase(str);\n }\n\n createWebpackConfig(): ReturnType<\n KnapsackRendererWebpackBase['createWebpackConfig']\n > {\n const config = super.createWebpackConfig();\n\n config.externals = {\n react: 'React',\n 'react-dom': 'ReactDOM',\n };\n\n return config;\n }\n\n getJsImports(): ReturnType<KnapsackRendererWebpackBase['getJsImports']> {\n const imports = super.getJsImports();\n imports.push(\n {\n type: 'extra',\n importInfo: {\n type: 'default',\n path: this.demoWrapperPath,\n name: 'DemoWrapper',\n },\n },\n {\n type: 'extra',\n importInfo: {\n type: 'default',\n path: join(__dirname, './error-catcher.mjs'),\n name: 'ErrorCatcher',\n },\n },\n );\n return imports;\n }\n\n async prepClientRenderResults({\n usage,\n demoApp,\n imports: xImports,\n renderOptions: { pattern, template, demo },\n }: {\n usage: string;\n demoApp: string;\n imports: KsJsImport[];\n renderOptions: KnapsackRenderParams;\n }): Promise<KnapsackTemplateRendererResults> {\n const extraImportNames = this.getJsImports().flatMap((imp) =>\n imp.type === 'extra' ? [imp.importInfo.name] : [],\n );\n const { imports, isDeclaredVarsUnique, nameCollisions } =\n this.makeKsJsImportsUnique({ imports: xImports });\n\n if (!isDeclaredVarsUnique) {\n log.error(`${nameCollisions.join(', ')} are declared multiple times`, {\n imports,\n });\n }\n\n // import names; i.e. `KsButton`\n const importNames = [\n ...imports.map(({ importInfo: { name } }) => name),\n ...extraImportNames,\n ];\n\n const patternsUsed: {\n patternId: string;\n templateId: string;\n demoId?: string;\n }[] = imports.flatMap((imp) => {\n if (imp.type === 'pattern-template') {\n return [\n {\n patternId: imp.patternId,\n templateId: imp.templateId,\n },\n ];\n }\n if (imp.type === 'pattern-template-demo') {\n return [\n {\n patternId: imp.patternId,\n templateId: imp.templateId,\n demoId: imp.demoId,\n },\n ];\n }\n return [];\n });\n\n const demoWrapperProps: Omit<DemoWrapperProps, 'children'> = {\n patternsUsed,\n pattern,\n template,\n demo,\n };\n const demoWrapperCode = await getUsage({\n templateName: 'DemoWrapper',\n props: demoWrapperProps,\n children: `<DemoApp />`,\n // extraProps,\n });\n\n /**\n * IMPORTANT: this function is stringified and then executed in the browser - it cannot use anything in scope (other functions, vars, etc)\n */\n async function renderReact({\n patterns,\n theExtraImportNames,\n ksGlobal,\n }: {\n patterns: typeof patternsUsed;\n theExtraImportNames: typeof extraImportNames;\n ksGlobal: KsRendererClientGlobal<ReactNode>;\n }): Promise<Record<string, ReactNode>> {\n if (!ksGlobal) {\n throw new Error('\"window.knapsack\" is null');\n }\n const components = await ksGlobal.getAllImports({\n patterns,\n extras: theExtraImportNames.map((name) => ({ name })),\n });\n return components;\n }\n\n let code = `\n\n${renderReact.toString()}\n${renderReact.name}({\n ksGlobal: window.knapsack,\n patterns: ${JSON.stringify(patternsUsed)},\n theExtraImportNames: ${JSON.stringify(extraImportNames)},\n}).then((components) => {\n const { ${importNames.join(', ')} } = components;\n const root = document.getElementById('render-root');\n\n ${demoApp}\n\n const reactDomVersion = parseInt(ReactDOM.version.split('.')[0], 10);\n\n const ReactRendererResult = () => {\n if (reactDomVersion < 17 || ${this.disableReactStrictMode}){\n return (\n <ErrorCatcher>\n ${demoWrapperCode}\n </ErrorCatcher>\n )\n }\n\n return (\n <React.StrictMode>\n <ErrorCatcher>\n ${demoWrapperCode}\n </ErrorCatcher>\n </React.StrictMode>\n )\n };\n\n\n if (reactDomVersion > 17){\n ReactDOM.createRoot(root).render(\n <ReactRendererResult />\n )\n } else {\n ReactDOM.render(\n <ReactRendererResult />,\n root\n );\n }\n}).catch((err) => {\n console.error(err);\n const root = document.getElementById('render-root');\n // Create a new <div> element to contain the error message\n const errorMsgDiv = document.createElement('div');\n // Insert the new <div> element before the existing element\n root.parentNode.insertBefore(errorMsgDiv, root);\n // add error message so users can see it\n errorMsgDiv.innerHTML = '<h1>Component Error</h1><p>' + err.message + '</p>';\n});\n `;\n\n let codeHadError = false;\n let errorHtmlMsg = '';\n\n try {\n code = await this.babelCodeForBrowser({\n code,\n });\n } catch (e) {\n codeHadError = true;\n console.log(code);\n console.log('---original code before babel error ^---');\n console.trace(e.message);\n code = `console.error(${JSON.stringify(e.message)});`;\n errorHtmlMsg = `<pre><code>${e.message}</code></pre>`;\n }\n\n if (!codeHadError) {\n try {\n code = await formatCode({\n contents: code,\n path: 'x.tsx', // doing this to set format language\n });\n } catch (e) {\n codeHadError = true;\n console.log(code);\n console.log('---original code before prettier error ^---');\n console.trace(e.message);\n code = `console.error(${JSON.stringify(e.message)});`;\n errorHtmlMsg = `<pre><code>${e.message}</code></pre>`;\n }\n }\n\n const html = `\n ${this.assets.map((asset) => `<script src=\"${asset}\"></script>`).join('\\n')}\n\n ${this.createHtmlTagsForAssetPaths({\n assets: this.getWebpackAssetPaths(),\n // we need the scripts to finish adding methods to the global knapsack object synchronously before the client-side code runs that is in the <script> tag below\n scriptTagsAreAsync: false,\n })}\n\n <div id=\"render-root\" class=\"knapsack-pattern-direct-parent\" data-dev-note=\"Knapsack React Template Wrapper\"></div>\n <script type=\"application/javascript\">${code}</script>\n${errorHtmlMsg}\n\n `;\n\n return {\n ok: !codeHadError,\n html: await formatCode({\n contents: html,\n path: 'x.html', // doing this to set format language\n }),\n usage,\n templateLanguage: this.language,\n };\n }\n\n async render(\n opt: KnapsackRenderParams,\n ): Promise<KnapsackTemplateRendererResults> {\n if (KnapsackReactRenderer.isTemplateDemo(opt.demo)) {\n // when getting a template demos path sometimes we have a race condition where the client asks for it before the server knows about it.\n // so we try several times in a row to get it\n /** The amount of time in ms to wait between attempts; when we run out of array items, we give up and throw the error */\n const waits = [5, 10, 20, 50, 100, 1000, 1000];\n let templateDemoPath: string;\n let attempt = 0;\n\n while (true) {\n try {\n templateDemoPath = opt.patternManifest.getTemplateDemoAbsolutePath({\n patternId: opt.pattern.id,\n templateId: opt.template.id,\n demoId: opt.demo.id,\n });\n // got it!\n break;\n } catch (e) {\n const waitTime = waits[attempt];\n if (!waitTime) {\n throw new Error(e);\n }\n attempt += 1;\n // eslint-disable-next-line no-await-in-loop\n await sleep(waitTime);\n }\n }\n\n const [templateFileContents, { usage, imports }] = await Promise.all([\n readFile(templateDemoPath),\n this.getUsageAndImports(opt),\n ]);\n const demoApp = await getDemoAppUsage({\n children: usage,\n });\n const results = await this.prepClientRenderResults({\n usage: templateFileContents,\n demoApp,\n imports,\n renderOptions: opt,\n });\n\n return results;\n }\n\n if (KnapsackReactRenderer.isDataDemo(opt.demo)) {\n const { usage, imports } = await this.getUsageAndImports(opt);\n const { code: importCode } = this.createJsImportCodeBlock({\n imports,\n });\n\n const [demoAppUsage, demoApp] = await Promise.all([\n getDemoAppUsage({\n children: usage,\n imports: importCode,\n }),\n getDemoAppUsage({\n children: usage,\n }),\n ]);\n\n return this.prepClientRenderResults({\n demoApp,\n usage: demoAppUsage,\n imports,\n renderOptions: opt,\n });\n }\n }\n\n async getUsageAndImports(opt: KnapsackRenderParams): Promise<{\n usage: string;\n imports: KsJsImport[];\n }> {\n const { pattern, template, patternManifest, demo } = opt;\n if (demo?.type && KnapsackReactRenderer.isDataDemo(demo)) {\n const {\n data: { props, slots, slotsOptionsComputed },\n } = demo;\n\n const importInfo = this.getJsImport({\n patternId: pattern.id,\n templateId: template.id,\n });\n if (!importInfo) {\n throw new Error(\n `Could not find import for pattern-template: ${pattern.id}-${template.id}`,\n );\n }\n const { type, name: templateName } = importInfo.importInfo;\n\n const importInfos: KsJsImport[] = [importInfo];\n const children: string[] = [];\n const extraProps: { key: string; value: string }[] = [];\n\n if (slots) {\n const slotNames = Object.keys(slots);\n const slotUsages = await Promise.all(\n slotNames.map(async (slotName) => {\n const slotItems = slots[slotName];\n const slotItemsUsages = await Promise.all(\n slotItems\n // remove any incomplete item - happens when users are filling out form\n .filter((slotItem) => {\n if (!isSlottedText(slotItem)) {\n if (!slotItem.patternId) return false;\n if (!slotItem.templateId) return false;\n if (isSlottedTemplateDemo(slotItem) && !slotItem.demoId) {\n return false;\n }\n }\n return true;\n })\n .map(async (slotItem) => {\n if (isSlottedText(slotItem)) {\n if (slotItems.length === 1 && slotName !== 'children') {\n // The ` prevents multi-line strings from causing error (even though they don't show a line break)\n return `\\`${slotItem.text}\\``;\n }\n return slotItem.text;\n }\n\n const slotPattern = patternManifest.getPattern(\n slotItem.patternId,\n );\n\n const slotTemplate = slotPattern.templates.find(\n (t) => t.id === slotItem.templateId,\n );\n if (isSlottedTemplateReference(slotItem)) {\n const { usage, imports } = await this.getUsageAndImports({\n pattern: slotPattern,\n template: slotTemplate,\n patternManifest,\n });\n importInfos.push(...imports);\n return usage;\n }\n if (isSlottedTemplateDemo(slotItem)) {\n const { usage, imports } = await this.getUsageAndImports({\n pattern: slotPattern,\n template: slotTemplate,\n demo:\n slotItem.demo ||\n this.patterns.demosById[slotItem.demoId],\n patternManifest,\n });\n importInfos.push(...imports);\n return usage;\n }\n\n throw new Error(\n `Unknown slot item: ${JSON.stringify(slotItem)}`,\n );\n }),\n );\n return {\n slotName,\n slotItemsUsages,\n };\n }),\n );\n\n slotUsages.forEach(({ slotName, slotItemsUsages }) => {\n const slotOptionsComputed = slotsOptionsComputed?.[slotName];\n const { openTag, closeTag } = createSlotOptionsHtmlTags({\n slotOptionsComputed,\n classAttributeName: 'className',\n stylesValueType: 'object',\n });\n if (openTag) {\n if (slotName === 'children') {\n children.push(openTag);\n } else {\n extraProps.push({\n key: slotName,\n value: openTag,\n });\n }\n }\n\n slotItemsUsages.forEach((usage) => {\n if (slotName === 'children') {\n children.push(usage);\n } else {\n extraProps.push({\n key: slotName,\n value: usage,\n });\n }\n });\n\n if (closeTag) {\n if (slotName === 'children') {\n children.push(closeTag);\n } else {\n extraProps.push({\n key: slotName,\n value: closeTag,\n });\n }\n }\n });\n }\n\n const usage = await getUsage({\n templateName,\n props,\n children: children.join('\\n'),\n extraProps,\n });\n\n return {\n usage,\n imports: importInfos,\n };\n }\n\n if (demo?.type && KnapsackReactRenderer.isTemplateDemo(demo)) {\n const importInfo = this.getJsImport({\n patternId: pattern.id,\n templateId: template.id,\n demoId: demo.id,\n });\n if (!importInfo) {\n throw new Error(\n `Could not find import for pattern-template-demo: ${pattern.id}-${template.id}-${demo.id}`,\n );\n }\n const { type, name: templateName } = importInfo.importInfo;\n\n const usage = await getUsage({ templateName });\n\n return {\n usage,\n imports: [importInfo],\n };\n }\n\n if (!demo) {\n const importInfo = this.getJsImport({\n patternId: pattern.id,\n templateId: template.id,\n });\n if (!importInfo) {\n throw new Error(\n `Could not find import for pattern-template: ${pattern.id}-${template.id}`,\n );\n }\n const { type, name: templateName } = importInfo.importInfo;\n\n return {\n /**\n * i.e. Given a React Component, `Button`, normally this would be `<Button>` with a demo, but since there is none this will just be a reference to it: `Button`\n * @see {KsSlotInfo['isTemplateReference']}\n * @see {SlottedTemplate}\n */\n usage: templateName,\n imports: [importInfo],\n };\n }\n\n throw new Error(\n `Unhandled demo type for ${pattern.id}-${template.id}: ${JSON.stringify(\n demo,\n )}`,\n );\n }\n\n async getUsage(opt: KnapsackRenderParams): Promise<string> {\n const { usage } = await this.getUsageAndImports(opt);\n return usage;\n }\n\n inferSpec: KnapsackTemplateRendererBase['inferSpec'] = async ({\n template,\n templatePath,\n }: {\n template: KnapsackPatternTemplate;\n templatePath: string;\n }): Promise<KsTemplateSpec | false> => {\n const spec = await getReactDocs({\n src: template.path,\n exportName: template.alias || 'default',\n resolveFromDir: this.config.data,\n });\n if (spec !== false) {\n const totalProps = Object.keys(spec?.props?.properties || {}).length;\n const totalSlots = Object.keys(spec?.slots || {}).length;\n if (totalProps === 0 && totalSlots === 0) {\n return false;\n }\n }\n return spec;\n };\n\n async watch(opt: Parameters<KnapsackTemplateRendererBase['watch']>[0]) {\n await super.watch(opt);\n knapsackEvents.onPatternTemplateChanged(() => {\n clearInferSpecCache();\n });\n }\n\n getTemplateMeta: KnapsackTemplateRendererBase['getTemplateMeta'] = async ({\n pattern,\n template,\n }) => {\n const files: KnapsackFile[] = [];\n if (template?.spec?.props) {\n const schema = JSON.parse(JSON.stringify(template.spec.props));\n if (template?.spec?.slots) {\n Object.entries(template.spec.slots).forEach(([id, info]) => {\n schema.properties[id] = {\n typeof: 'function',\n tsType: 'React.ReactNode',\n\n description: info.allowedPatternIds\n ? `${info.description}. Only use: ${info.allowedPatternIds.join(\n ', ',\n )}`\n : info.description,\n };\n schema.required = schema.required ?? [];\n if (info.isRequired) schema.required.push(id);\n });\n }\n const typeDefs =\n await KnapsackReactRenderer.convertSchemaToTypeScriptDefs({\n schema,\n title: `${this.changeCase(pattern.id)}Props`,\n // @todo pull in base url\n description: `[Knapsack Docs](http://localhost:3999/pattern/${pattern.id}/${template.id})`,\n patternId: pattern.id,\n templateId: template.id,\n postBanner: `import * as React from 'react';`,\n });\n\n files.push({\n contents: typeDefs,\n encoding: 'utf8',\n path: `${pattern.id}.${template.id}.spec.d.ts`,\n });\n files.push({\n contents: JSON.stringify(schema, null, ' '),\n encoding: 'utf8',\n path: `${pattern.id}.${template.id}.spec.json`,\n });\n }\n return files;\n };\n\n alterTemplateMetaFiles: KnapsackTemplateRendererBase['alterTemplateMetaFiles'] =\n async ({ files, metaDir }) => {\n const imports: string[] = [];\n\n const ext = '.spec.d.ts';\n files.forEach((file) => {\n if (file.path.endsWith(ext)) {\n const { base } = parse(file.path);\n const [patternId, templateId] = base.split('.');\n const isFirst = templateId === this.id;\n const exportName = this.changeCase(`${patternId}Props`);\n const exportNameWithTemplateId = this.changeCase(\n `${patternId}-${templateId}Props`,\n );\n imports.push(\n `export { ${\n isFirst\n ? exportName\n : `${exportName} as ${exportNameWithTemplateId}`\n } } from './${relative(metaDir, file.path).replace('.d.ts', '')}';`,\n );\n }\n });\n\n // extra line at end of file\n imports.push('');\n\n return [\n ...files,\n {\n contents: imports.join('\\n'),\n encoding: 'utf8',\n path: join(metaDir, 'react.d.ts'),\n },\n ];\n };\n\n async getTemplateSuggestions({\n newPath,\n }: Parameters<\n KnapsackTemplateRendererBase['getTemplateSuggestions']\n >[0]): ReturnType<KnapsackTemplateRendererBase['getTemplateSuggestions']> {\n const { data: dataDir } = this.patterns.userConfig;\n const { allTemplateDemos, allTemplates } = this.getMyTemplates();\n const usedSuggestions: TemplateSuggestion[] = [\n ...allTemplateDemos,\n ...allTemplates,\n ].map(({ path, alias }) => {\n return {\n path,\n alias: alias || 'default',\n };\n });\n\n const allPaths = [\n ...new Set([newPath, ...usedSuggestions.map(({ path }) => path)]),\n ];\n const allSuggestions: TemplateSuggestion[] = await Promise.all(\n allPaths.map(async (path): Promise<TemplateSuggestion[]> => {\n if (!path) return [];\n try {\n const { exports, errorMsg } = await getJsExportNames({\n path,\n resolveFromDir: dataDir,\n pkgPathAliases: this.pkgPathAliases,\n });\n if (errorMsg) {\n throw new Error(errorMsg);\n }\n return (\n exports\n // only allow names that start with a capital letter (i.e. React Component names)\n // will exclude helper functions and custom hooks\n .filter((e) => e === 'default' || isFirstLetterCapital(e))\n .map((name) => ({\n alias: name,\n path,\n }))\n );\n } catch (e) {\n // only want this showing with verbose since template suggestions are not critical\n log.verbose(\n `Error getting import names for ${path}: ${e.message}`,\n null,\n this.logPrefix,\n );\n return [];\n }\n }),\n ).then((results) => {\n // sadly `Promise.all` & `.flatMap` just don't work, so this:\n return results.flat();\n });\n\n const suggestions = allSuggestions.filter((s) => {\n return !usedSuggestions.find(\n (us) => us.alias === s.alias && us.path === s.path,\n );\n });\n\n return {\n suggestions,\n };\n }\n}\n","import { log } from '@knapsack/app';\nimport {\n getModulePkgJson,\n readFile,\n copy,\n formatCode,\n resolvePath,\n findUp,\n} from '@knapsack/file-utils';\nimport { removeWrappingDoubleQuotes } from '@knapsack/utils';\nimport path from 'path';\nimport type { Documentation } from 'react-docgen';\nimport type { ComponentDoc, ParserOptions } from 'react-docgen-typescript';\nimport { KsTemplateSpec, isNumberProp, isOptionsProp } from '@knapsack/types';\n\ntype GetSpecParams = {\n src: string;\n exportName?: string;\n};\n\n/**\n * The name of the type, which is usually corresponds to the function name in `React.PropTypes`. However, for types define with `oneOf`, we use `\"enum\"` and for `oneOfType` we use `\"union\"`. If a custom function is provided or the type cannot be resolved to anything of `React.PropTypes`, we use `\"custom\"`.\n */\ntype RdTypeName =\n | 'number'\n | 'string'\n | 'custom'\n | 'union'\n | 'bool'\n | 'node'\n | 'func';\n\n/**\n * Some types accept parameters which define the type in more detail (such as `arrayOf`, `instanceOf`, `oneOf`, etc). Those are stored in `<typeValue>`. The data type of `<typeValue>` depends on the type definition.\n */\ntype RdTypeValue = string;\n\ntype RdProps = {\n [prop: string]: {\n defaultValue?: {\n value: string;\n computed: boolean;\n };\n type: {\n name: RdTypeName;\n value?: RdTypeValue;\n raw?: string;\n };\n flowType?: string;\n tsType?: string;\n description?: string;\n required: boolean;\n };\n};\n\ntype RdResults = {\n /**\n * Name of function, class, or const\n */\n displayName: string;\n description?: string;\n props: RdProps;\n};\n\nfunction renderUsageTemplate({\n templateName,\n attributes,\n children,\n}: {\n templateName: string;\n attributes: string;\n children: string;\n}) {\n return `\n <${templateName}\n ${attributes}\n ${\n children\n ? `>\n ${children}\n </${templateName}>`\n : '/>'\n }\n `;\n}\n\nfunction renderDemoAppTemplate({\n imports,\n children,\n}: {\n imports: string;\n children: string;\n}) {\n return `${imports}\n\nfunction DemoApp() {\n return (\n ${children}\n )\n}\n`;\n}\n\nexport async function getUsage(data: {\n templateName: string;\n props?: Record<string, unknown>;\n children?: string;\n extraProps?: {\n key: string;\n value: string;\n }[];\n format?: boolean;\n}): Promise<string> {\n const props = Object.keys(data.props || {}).map((key) => {\n const value = data.props[key];\n return {\n key,\n value,\n };\n });\n\n const { templateName, children, extraProps = [] } = data;\n if (!templateName) {\n throw new Error(\n `Cannot getUsage of a React Component when no \"templateName\" is provided.`,\n );\n }\n\n const attributes: string[] = props.map(({ key, value }) => {\n switch (typeof value) {\n case 'string':\n // Is this a function like `() => {}` but not a \"sizes\" attribute for an image like `(min-width: 400px) 50vw, 100vw`?\n if (value.startsWith('(') && value.includes('=>')) {\n return `${key}={${value}}`;\n }\n return `${key}=\"${value}\"`;\n case 'boolean':\n return value ? `${key}` : `${key}={${value}}`;\n default:\n return `${key}={${JSON.stringify(value)}}`;\n }\n });\n\n const extraAttributes: string[] = [];\n const slotProps: { [key: string]: string[] } = {};\n\n extraProps.forEach(({ key, value }) => {\n slotProps[key] = slotProps[key] ?? [];\n slotProps[key].push(value);\n });\n\n Object.entries(slotProps).forEach(([key, values]) => {\n const value = values.length === 1 ? values[0] : `<>${values.join('\\n')}</>`;\n extraAttributes.push(`${key}={${value}}`);\n });\n\n const result = renderUsageTemplate({\n templateName,\n attributes: [...attributes, ...extraAttributes].join(' '),\n children,\n });\n return data.format\n ? formatCode({\n contents: result,\n path: 'x.tsx', // doing this to set format language\n })\n .then((code) => code.trim())\n .catch(() => result.trim()) // if format fails, just return the unformatted code\n : result.trim();\n}\n\nexport async function getDemoAppUsage({\n children,\n imports,\n}: {\n children: string;\n imports?: string;\n}): Promise<string> {\n const code = renderDemoAppTemplate({\n children,\n imports,\n });\n return formatCode({\n contents: code,\n path: 'x.tsx', // doing this to set format language\n });\n}\n\nasync function getTypeScriptInfoFromFile({ src }: { src: string }): Promise<{\n info: ComponentDoc[];\n}> {\n const tsConfigPath = await findUp('tsconfig.json', {\n cwd: path.dirname(src),\n });\n const rdTs = await import('react-docgen-typescript');\n const config: ParserOptions = {\n shouldExtractLiteralValuesFromEnum: true,\n savePropValueAsString: true,\n skipChildrenPropWithoutDoc: false,\n // In addition to the ones listed here, which had not strangely included these below ~ https://github.com/styleguidist/react-docgen-typescript/blob/287e7012843cb26fed8f4bd8ee24e462c25a1414/src/parser.ts#L308\n customComponentTypes: ['VoidFunctionComponent', 'VFC'],\n };\n const parse = tsConfigPath\n ? rdTs.withCustomConfig(tsConfigPath, config).parse\n : rdTs.withDefaultConfig(config).parse;\n return {\n info: parse(src),\n };\n}\n\nfunction extractSpecFromTypeScriptInfo({\n info: results,\n exportName,\n}: {\n info: ComponentDoc[];\n exportName: string;\n}): KsTemplateSpec | false {\n try {\n if (!results) return false;\n const spec: KsTemplateSpec = {\n props: {\n $schema: 'http://json-schema.org/draft-07/schema',\n type: 'object',\n required: [],\n properties: {},\n },\n slots: {\n // children: {\n // title: 'children',\n // },\n },\n };\n\n const isDefaultExport = !exportName || exportName === 'default';\n\n // if `isDefaultExport` then we just grab last result since `export default` TENDS to be last. that'll we can do really...\n const result = isDefaultExport\n ? results.pop()\n : results.find((r) => r.displayName === exportName);\n\n // log.inspect({ result, isDefaultExport, exportName }, 'ts result');\n if (!result) return false;\n\n const { displayName } = result;\n // log.inspect({ result }, 'result');\n Object.entries(result?.props || {}).forEach(([propName, propDef]) => {\n const { name, description, defaultValue, required, type, parent } =\n propDef;\n\n // `type.name` can include `| undefined` if tsConfig has `strict: true`. So we need to handle these scenarios:\n // `string` or `string | undefined`\n // `'left' | 'right'` or `'left' | 'right' | undefined`\n const propType = type?.name\n ?.replace('| undefined', '')\n // remove generics. things like `FC<{}>` and `FC<Props>` should become `FC`\n .replace(/<.*/g, '')\n .trim();\n\n switch (propType) {\n case 'string':\n spec.props.properties[propName] = {\n type: 'string',\n };\n break;\n case 'number':\n spec.props.properties[propName] = {\n type: 'number',\n };\n break;\n case 'boolean':\n case 'bool':\n if (defaultValue && 'value' in defaultValue) {\n // comes in as `'true'` - this turns it to `true`\n defaultValue.value = defaultValue.value === 'true';\n }\n spec.props.properties[propName] = {\n type: 'boolean',\n };\n break;\n case 'enum':\n type EnumType = {\n name: string;\n raw: string;\n value: {\n /** Looks like `'\"option1\"'` - beware of string that contains `\"` */\n value: string;\n }[];\n };\n spec.props.properties[propName] = {\n type: 'string',\n // yes there is a double \"value\" & yes it is confusing\n enum: [\n // ensure list is unique\n ...new Set<string>(\n (type as EnumType).value\n .map(({ value }) => removeWrappingDoubleQuotes(value?.trim()))\n .filter(Boolean),\n ),\n ],\n };\n break;\n case 'ReactNode':\n case 'React.ReactNode':\n case 'React.ReactElement':\n case 'ReactElement':\n spec.slots[propName] = {\n title: propName,\n };\n if (description) {\n spec.slots[propName] = {\n ...spec.slots[propName],\n description,\n };\n }\n break;\n case 'VFC':\n case 'FC':\n spec.slots[propName] = {\n title: propName,\n description: description || 'A reference to a component',\n isTemplateReference: true,\n allowOnlyOne: true,\n disallowText: true,\n };\n break;\n default: {\n if (type?.name?.startsWith('(')) {\n // functions\n spec.props.properties[propName] = {\n // description: `\\`${type.name}\\` ${description}`,\n typeof: 'function',\n tsType: propDef?.type?.name,\n };\n } else if (type?.name?.includes('|')) {\n // enums / unions (multi-choice strings)\n // comes in like this: `{ name: '\"option1\" | \"option2\" | \"option3\"' }`\n const options = type.name\n .split('|')\n .map((enumItem) => removeWrappingDoubleQuotes(enumItem.trim()))\n .filter(Boolean);\n\n if (options?.length) {\n spec.props.properties[propName] = {\n type: 'string',\n // ensuring list is unique\n enum: [...new Set(options)],\n };\n }\n } else {\n spec.props.properties[propName] = {\n tsType: propDef?.type?.name,\n };\n }\n }\n }\n\n // assigning info that all would have\n if (spec.props.properties[propName]) {\n if (required) spec.props.required.push(propName);\n if (description && !spec.props.properties[propName].description) {\n spec.props.properties[propName].description = description;\n }\n if (defaultValue && 'value' in defaultValue) {\n if (isNumberProp(spec.props.properties[propName])) {\n spec.props.properties[propName].default = parseFloat(\n defaultValue.value,\n );\n } else {\n spec.props.properties[propName].default =\n removeWrappingDoubleQuotes(defaultValue.value);\n }\n }\n }\n\n // console.log('type', type);\n });\n\n return spec;\n } catch (error) {\n log.verbose(\n 'Could not infer spec from React TypeScript file',\n {\n exportName,\n error,\n },\n 'react renderer',\n );\n return false;\n }\n}\n\nasync function getPropTypesInfoFromFile({ src }: { src: string }): Promise<{\n info: Documentation[];\n}> {\n const reactDocs = await import('react-docgen');\n const { builtinResolvers } = reactDocs;\n const fileSrc = await readFile(src);\n const { FindExportedDefinitionsResolver } = builtinResolvers;\n const results: Documentation[] = reactDocs.parse(fileSrc, {\n resolver: new FindExportedDefinitionsResolver(),\n handlers: null,\n filename: src,\n // babelrc: false,\n });\n return {\n info: results,\n };\n}\n\nfunction extractSpecFromPropTypesInfo({\n info: results,\n exportName,\n}: {\n info: Documentation[];\n exportName: string;\n}): KsTemplateSpec | false {\n try {\n const isDefaultExport = !exportName || exportName === 'default';\n\n // if `isDefaultExport` then we just grab last result since `export default` TENDS to be last. that'll we can do really...\n const result = isDefaultExport\n ? results.pop()\n : results.find((r) => r.displayName === exportName);\n\n // log.inspect(results, 'JSX PropTypes Results');\n // console.log(JSON.stringify(result, null, ' '));\n\n const spec: KsTemplateSpec = {\n isInferred: true,\n props: {\n $schema: 'http://json-schema.org/draft-07/schema',\n type: 'object',\n required: [],\n properties: {},\n },\n slots: {},\n };\n\n Object.entries(result?.props || {}).forEach(([propName, propDef]) => {\n const { required, description, defaultValue } = propDef;\n switch (propDef?.type?.name) {\n case 'string':\n spec.props.properties[propName] = {\n type: 'string',\n };\n break;\n case 'func':\n spec.props.properties[propName] = {\n type: 'string',\n };\n break;\n case 'bool':\n spec.props.properties[propName] = {\n type: 'boolean',\n };\n break;\n case 'node':\n spec.slots[propName] = {\n title: propName,\n description,\n };\n }\n\n // assigning info that all would have\n if (spec.props.properties[propName]) {\n if (required) spec.props.required.push(propName);\n if (description && !spec.props.properties[propName].description) {\n spec.props.properties[propName].description = description;\n }\n if (defaultValue && 'value' in defaultValue) {\n spec.props.properties[propName].default =\n typeof defaultValue.value === 'string'\n ? removeWrappingDoubleQuotes(defaultValue.value)\n : defaultValue.value;\n }\n }\n });\n\n return spec;\n } catch (error) {\n log.verbose(\n 'Could not infer spec from React PropTypes',\n {\n exportName,\n error,\n },\n 'react renderer',\n );\n return false;\n }\n}\n\nfunction cleanUpSpec({\n spec,\n}: {\n spec: KsTemplateSpec | false;\n}): KsTemplateSpec | false {\n if (spec === false) return spec;\n // ok to mutate b/c spec was just created before passing in here\n Object.entries(spec?.props?.properties || {}).forEach(([propName, prop]) => {\n if (isOptionsProp(prop)) {\n // If the default is not in the enum, it should not be there\n // OR the enum is wrong\n if (!prop.enum.includes(prop.default)) {\n prop.default = undefined;\n }\n }\n });\n\n return spec;\n}\n\nasync function getReactModuleInfoUncached({\n src: unknownSrc,\n resolveFromDir,\n}: {\n src: string;\n resolveFromDir: string;\n}): Promise<\n | {\n type: 'typescript';\n info: ComponentDoc[];\n }\n | {\n type: 'propTypes';\n info: Documentation[];\n }\n | {\n type: 'unknown';\n }\n> {\n const typesInfo = await resolvePath({\n path: unknownSrc,\n resolveFromDir,\n resolveType: 'types',\n });\n if (typesInfo.exists) {\n const typeScriptInfo = await getTypeScriptInfoFromFile({\n src: typesInfo.absolutePath,\n });\n if (typeScriptInfo) {\n return {\n type: 'typescript',\n info: typeScriptInfo.info,\n };\n }\n }\n const jsInfo = await resolvePath({\n path: unknownSrc,\n resolveFromDir,\n });\n if (!jsInfo.exists) return { type: 'unknown' };\n const { ext } = path.parse(jsInfo.absolutePath);\n switch (ext) {\n case '.jsx': {\n const propTypesInfo = await getPropTypesInfoFromFile({\n src: jsInfo.absolutePath,\n });\n return {\n type: 'propTypes',\n info: propTypesInfo.info,\n };\n }\n case '.ts':\n case '.tsx': {\n const typeScriptInfo = await getTypeScriptInfoFromFile({\n src: jsInfo.absolutePath,\n });\n return {\n type: 'typescript',\n info: typeScriptInfo.info,\n };\n }\n default:\n return {\n type: 'unknown',\n };\n }\n}\n\nconst getReactModuleInfoCache = new Map<\n string,\n ReturnType<typeof getReactModuleInfoUncached>\n>();\nexport const clearInferSpecCache = () => {\n log.info(`Clearing React TypeScript inferSpec cache...`);\n getReactModuleInfoCache.clear();\n};\nasync function getReactModuleInfo(\n args: Parameters<typeof getReactModuleInfoUncached>[0],\n) {\n const cacheKey = JSON.stringify(args);\n if (!getReactModuleInfoCache.has(cacheKey)) {\n getReactModuleInfoCache.set(cacheKey, getReactModuleInfoUncached(args));\n }\n return getReactModuleInfoCache.get(cacheKey);\n}\n\nasync function getReactSpec({\n src,\n exportName,\n resolveFromDir,\n}: GetSpecParams & {\n resolveFromDir: string;\n}): Promise<KsTemplateSpec | false> {\n const reactModuleInfo = await getReactModuleInfo({\n src,\n resolveFromDir,\n });\n switch (reactModuleInfo.type) {\n case 'typescript':\n return extractSpecFromTypeScriptInfo({\n info: reactModuleInfo.info,\n exportName,\n });\n case 'propTypes':\n return extractSpecFromPropTypesInfo({\n info: reactModuleInfo.info,\n exportName,\n });\n case 'unknown':\n default:\n return false;\n }\n}\n\nexport async function getReactDocs(\n opt: GetSpecParams & {\n resolveFromDir: string;\n },\n): Promise<KsTemplateSpec | false> {\n return cleanUpSpec({\n spec: await getReactSpec(opt),\n });\n}\n\nexport async function copyReactAssets(\n distDirAbsolute: string,\n publicPath: string,\n): Promise<string[]> {\n try {\n const { version: reactVersion } = getModulePkgJson('react');\n const { version: reactDomVersion } = getModulePkgJson('react-dom');\n\n // switch to resolving the root NPM package dir vs the entire file via require.resolve\n // workaround due to NPM packages using the exports field; prevents these from being auto-resolved\n const reactRoot = path.dirname(\n require.resolve('react', {\n paths: [process.cwd()],\n }),\n );\n const reactDomRoot = path.dirname(\n require.resolve('react-dom', {\n paths: [process.cwd()],\n }),\n );\n await Promise.all([\n copy(\n path.join(reactRoot, 'umd/react.development.js'),\n path.join(distDirAbsolute, `react.development.${reactVersion}.js`),\n ),\n copy(\n path.join(reactRoot, 'umd/react.production.min.js'),\n path.join(distDirAbsolute, `react.production.min.${reactVersion}.js`),\n ),\n copy(\n path.join(reactDomRoot, 'umd/react-dom.production.min.js'),\n path.join(\n distDirAbsolute,\n `react-dom.production.min.${reactDomVersion}.js`,\n ),\n ),\n copy(\n path.join(reactDomRoot, 'umd/react-dom.development.js'),\n path.join(\n distDirAbsolute,\n `react-dom.development.${reactDomVersion}.js`,\n ),\n ),\n ]);\n const reactFileSuffix =\n process.env.NODE_ENV === 'production' ? 'production.min' : 'development';\n\n return [\n path.join(publicPath, `react.${reactFileSuffix}.${reactVersion}.js`),\n path.join(\n publicPath,\n `react-dom.${reactFileSuffix}.${reactDomVersion}.js`,\n ),\n ];\n } catch (error) {\n log.warn(\n 'Error trying to copy \"react\" and \"react-dom\" JS files, are they installed? We want to use your exact versions.',\n error,\n 'templateRenderer:react',\n );\n process.exit(1);\n }\n}\n","import { getJsExportNames } from '@knapsack/file-utils';\nimport { createCreator, tasks, Task } from '@knapsack/creator-utils';\nimport {\n readKsPatternConfigs,\n writeKsPatternConfig,\n readKsNavConfig,\n addKsNavItems,\n writeDemo,\n} from '@knapsack/ks-file-utils';\nimport { Demo, KnapsackPattern } from '@knapsack/types';\nimport { makeShortId } from '@knapsack/utils';\n\nfunction isCapitalLetter(char: string): boolean {\n return char.toUpperCase() === char;\n}\n\nfunction startsWithCapitalLetter(str: string): boolean {\n return isCapitalLetter(str[0]);\n}\n\nfunction createPatternData({\n importName,\n id,\n title = importName,\n pkgPath,\n initialDemoId,\n}: {\n importName: string;\n id: string;\n title?: string;\n pkgPath: string;\n initialDemoId: string;\n}): KnapsackPattern {\n return {\n id,\n title,\n description: '',\n statuses: {\n main: 'ready',\n },\n templates: [\n {\n id: 'react',\n title: 'react',\n path: pkgPath,\n alias: importName,\n templateLanguageId: 'react',\n spec: {\n isInferred: true,\n },\n demoIds: [initialDemoId],\n blockIds: [],\n },\n ],\n tabs: [\n {\n type: 'template',\n id: 'react',\n },\n ],\n subPages: [],\n };\n}\n\nexport const createReactPattern = createCreator({\n id: 'react-patterns',\n title: 'React Ks Patterns',\n description: 'Adds React templates as Knapsack Patterns',\n getQuestions: async () => ({\n pkgPath: {\n type: 'text',\n title: 'Package path',\n },\n importPrefix: {\n type: 'text',\n title: 'Import Prefix to Remove',\n },\n }),\n getTasks: async ({ answers: { pkgPath, importPrefix = '' }, config }) => {\n const dataDir = config.dest;\n const currentPatterns = await readKsPatternConfigs({\n dataDir,\n });\n const currentReactPatternsImportNames = currentPatterns.reduce(\n (cur, pattern) => {\n const reactTemplates =\n pattern.templates?.filter((t) => t.templateLanguageId === 'react') ??\n [];\n cur.push(...reactTemplates.map((t) => t.alias));\n return cur;\n },\n [] as string[],\n );\n const { exports: allImports } = await getJsExportNames({\n path: pkgPath,\n });\n return [\n {\n title: 'Pick Imports to add',\n task: (_, task) =>\n tasks.runSubCreator({\n task,\n config,\n creator: createCreator({\n id: 'react-pattern-import-names',\n getQuestions: async () => ({\n importNames: {\n type: 'choices',\n choices: allImports\n .filter(\n (importName) =>\n startsWithCapitalLetter(importName) &&\n !currentReactPatternsImportNames.includes(importName),\n )\n .map((importName) => ({\n value: importName,\n })),\n },\n }),\n getTasks: async ({ answers: { importNames } }) => {\n const patterns = importNames.map((importName) => ({\n importName,\n patternId: importName.startsWith(importPrefix)\n ? importName.slice(importPrefix.length).toLowerCase()\n : importName.toLowerCase(),\n }));\n return [\n ...patterns.map(\n ({ importName, patternId }): Task => ({\n title: `Add ${importName} React Template`,\n task: async (__, subTask) => {\n const initialDemo: Demo = {\n type: 'data',\n id: makeShortId(),\n title: 'Main',\n patternId,\n templateId: 'react',\n data: {\n props: {},\n slots: {},\n },\n };\n const pattern = createPatternData({\n id: patternId,\n importName,\n pkgPath,\n initialDemoId: initialDemo.id,\n });\n\n await Promise.all([\n writeDemo({\n dataDir,\n demo: initialDemo,\n }),\n writeKsPatternConfig({\n dataDir,\n patternId,\n data: pattern,\n }),\n ]);\n },\n }),\n ),\n {\n title: `Updating Nav`,\n task: async (__, subTask) => {\n const { byId } = await readKsNavConfig({\n dataDir,\n });\n // attempt to find a nav group to put patterns under\n const componentsGroup = Object.values(byId).find(\n ({ path, name, id }) => {\n // we only want groups (i.e. not pages or patterns)\n if (path) return false;\n if (name.toLowerCase() === 'patterns') return true;\n if (name.toLowerCase() === 'components') return true;\n return false;\n },\n );\n await addKsNavItems({\n dataDir,\n navItems: patterns.map(({ patternId }) => ({\n navId: patternId,\n navPath: `/pattern/${patternId}`,\n navParent: componentsGroup?.id || 'root',\n })),\n });\n },\n },\n ];\n },\n }),\n }),\n },\n ];\n },\n});\n"],"mappings":";;;;;;;;;;;AACA,SAAS,qBAAqB;AAC9B,OAAO,UAAU;AAEjB,IAAM,cAAc,6BAAM,cAAc,YAAY,GAAG,GAAnC;AACpB,IAAM,aAAa,6BAAM,KAAK,QAAQ,YAAY,CAAC,GAAhC;AAEZ,IAAM,YAA4B,2BAAW;;;ACPpD,OAAO,WAAW;AAClB,SAAS,mCAAmC;AAC5C,SAAS,YAAoB,4BAA4B;AACzD,SAAS,gBAAgB,OAAAA,MAAK,4BAA4B;AAC1D;AAAA,EAIE;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,OAEK;AAQP;AAAA,EACE;AAAA,EACA;AAAA,EACA,oBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,OACK;AAEP,SAAS,MAAM,UAAU,aAAa;;;AChCtC,SAAS,WAAW;AACpB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,kCAAkC;AAC3C,OAAOC,WAAU;AAGjB,SAAyB,cAAc,qBAAqB;AAmD5D,SAAS,oBAAoB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SAAO;AAAA,OACF,YAAY;AAAA,QACX,UAAU;AAAA,QAEV,WACI;AAAA,UACF,QAAQ;AAAA,UACR,YAAY,MACV,IACN;AAAA;AAEN;AApBS;AAsBT,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA;AACF,GAGG;AACD,SAAO,GAAG,OAAO;AAAA;AAAA;AAAA;AAAA,MAIb,QAAQ;AAAA;AAAA;AAAA;AAId;AAfS;AAiBT,eAAsB,SAAS,MASX;AAClB,QAAM,QAAQ,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ;AACvD,UAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,EAAE,cAAc,UAAU,aAAa,CAAC,EAAE,IAAI;AACpD,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aAAuB,MAAM,IAAI,CAAC,EAAE,KAAK,MAAM,MAAM;AACzD,YAAQ,OAAO,OAAO;AAAA,MACpB,KAAK;AAEH,YAAI,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,IAAI,GAAG;AACjD,iBAAO,GAAG,GAAG,KAAK,KAAK;AAAA,QACzB;AACA,eAAO,GAAG,GAAG,KAAK,KAAK;AAAA,MACzB,KAAK;AACH,eAAO,QAAQ,GAAG,GAAG,KAAK,GAAG,GAAG,KAAK,KAAK;AAAA,MAC5C;AACE,eAAO,GAAG,GAAG,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,IAC3C;AAAA,EACF,CAAC;AAED,QAAM,kBAA4B,CAAC;AACnC,QAAM,YAAyC,CAAC;AAEhD,aAAW,QAAQ,CAAC,EAAE,KAAK,MAAM,MAAM;AACrC,cAAU,GAAG,IAAI,UAAU,GAAG,KAAK,CAAC;AACpC,cAAU,GAAG,EAAE,KAAK,KAAK;AAAA,EAC3B,CAAC;AAED,SAAO,QAAQ,SAAS,EAAE,QAAQ,CAAC,CAAC,KAAK,MAAM,MAAM;AACnD,UAAM,QAAQ,OAAO,WAAW,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,KAAK,IAAI,CAAC;AACtE,oBAAgB,KAAK,GAAG,GAAG,KAAK,KAAK,GAAG;AAAA,EAC1C,CAAC;AAED,QAAM,SAAS,oBAAoB;AAAA,IACjC;AAAA,IACA,YAAY,CAAC,GAAG,YAAY,GAAG,eAAe,EAAE,KAAK,GAAG;AAAA,IACxD;AAAA,EACF,CAAC;AACD,SAAO,KAAK,SACR,WAAW;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA;AAAA,EACR,CAAC,EACE,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,EAC1B,MAAM,MAAM,OAAO,KAAK,CAAC,IAC5B,OAAO,KAAK;AAClB;AAlEsB;AAoEtB,eAAsB,gBAAgB;AAAA,EACpC;AAAA,EACA;AACF,GAGoB;AAClB,QAAM,OAAO,sBAAsB;AAAA,IACjC;AAAA,IACA;AAAA,EACF,CAAC;AACD,SAAO,WAAW;AAAA,IAChB,UAAU;AAAA,IACV,MAAM;AAAA;AAAA,EACR,CAAC;AACH;AAfsB;AAiBtB,eAAe,0BAA0B,EAAE,IAAI,GAE5C;AACD,QAAM,eAAe,MAAM,OAAO,iBAAiB;AAAA,IACjD,KAAKC,MAAK,QAAQ,GAAG;AAAA,EACvB,CAAC;AACD,QAAM,OAAO,MAAM,OAAO,yBAAyB;AACnD,QAAM,SAAwB;AAAA,IAC5B,oCAAoC;AAAA,IACpC,uBAAuB;AAAA,IACvB,4BAA4B;AAAA;AAAA,IAE5B,sBAAsB,CAAC,yBAAyB,KAAK;AAAA,EACvD;AACA,QAAMC,SAAQ,eACV,KAAK,iBAAiB,cAAc,MAAM,EAAE,QAC5C,KAAK,kBAAkB,MAAM,EAAE;AACnC,SAAO;AAAA,IACL,MAAMA,OAAM,GAAG;AAAA,EACjB;AACF;AApBe;AAsBf,SAAS,8BAA8B;AAAA,EACrC,MAAM;AAAA,EACN;AACF,GAG2B;AACzB,MAAI;AACF,QAAI,CAAC;AAAS,aAAO;AACrB,UAAM,OAAuB;AAAA,MAC3B,OAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM;AAAA,QACN,UAAU,CAAC;AAAA,QACX,YAAY,CAAC;AAAA,MACf;AAAA,MACA,OAAO;AAAA;AAAA;AAAA;AAAA,MAIP;AAAA,IACF;AAEA,UAAM,kBAAkB,CAAC,cAAc,eAAe;AAGtD,UAAM,SAAS,kBACX,QAAQ,IAAI,IACZ,QAAQ,KAAK,CAAC,MAAM,EAAE,gBAAgB,UAAU;AAGpD,QAAI,CAAC;AAAQ,aAAO;AAEpB,UAAM,EAAE,YAAY,IAAI;AAExB,WAAO,QAAQ,QAAQ,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,UAAU,OAAO,MAAM;AACnE,YAAM,EAAE,MAAM,aAAa,cAAc,UAAU,MAAM,OAAO,IAC9D;AAKF,YAAM,WAAW,MAAM,MACnB,QAAQ,eAAe,EAAE,EAE1B,QAAQ,QAAQ,EAAE,EAClB,KAAK;AAER,cAAQ,UAAU;AAAA,QAChB,KAAK;AACH,eAAK,MAAM,WAAW,QAAQ,IAAI;AAAA,YAChC,MAAM;AAAA,UACR;AACA;AAAA,QACF,KAAK;AACH,eAAK,MAAM,WAAW,QAAQ,IAAI;AAAA,YAChC,MAAM;AAAA,UACR;AACA;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,cAAI,gBAAgB,WAAW,cAAc;AAE3C,yBAAa,QAAQ,aAAa,UAAU;AAAA,UAC9C;AACA,eAAK,MAAM,WAAW,QAAQ,IAAI;AAAA,YAChC,MAAM;AAAA,UACR;AACA;AAAA,QACF,KAAK;AASH,eAAK,MAAM,WAAW,QAAQ,IAAI;AAAA,YAChC,MAAM;AAAA;AAAA,YAEN,MAAM;AAAA;AAAA,cAEJ,GAAG,IAAI;AAAA,gBACJ,KAAkB,MAChB,IAAI,CAAC,EAAE,MAAM,MAAM,2BAA2B,OAAO,KAAK,CAAC,CAAC,EAC5D,OAAO,OAAO;AAAA,cACnB;AAAA,YACF;AAAA,UACF;AACA;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,eAAK,MAAM,QAAQ,IAAI;AAAA,YACrB,OAAO;AAAA,UACT;AACA,cAAI,aAAa;AACf,iBAAK,MAAM,QAAQ,IAAI;AAAA,cACrB,GAAG,KAAK,MAAM,QAAQ;AAAA,cACtB;AAAA,YACF;AAAA,UACF;AACA;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,eAAK,MAAM,QAAQ,IAAI;AAAA,YACrB,OAAO;AAAA,YACP,aAAa,eAAe;AAAA,YAC5B,qBAAqB;AAAA,YACrB,cAAc;AAAA,YACd,cAAc;AAAA,UAChB;AACA;AAAA,QACF,SAAS;AACP,cAAI,MAAM,MAAM,WAAW,GAAG,GAAG;AAE/B,iBAAK,MAAM,WAAW,QAAQ,IAAI;AAAA;AAAA,cAEhC,QAAQ;AAAA,cACR,QAAQ,SAAS,MAAM;AAAA,YACzB;AAAA,UACF,WAAW,MAAM,MAAM,SAAS,GAAG,GAAG;AAGpC,kBAAM,UAAU,KAAK,KAClB,MAAM,GAAG,EACT,IAAI,CAAC,aAAa,2BAA2B,SAAS,KAAK,CAAC,CAAC,EAC7D,OAAO,OAAO;AAEjB,gBAAI,SAAS,QAAQ;AACnB,mBAAK,MAAM,WAAW,QAAQ,IAAI;AAAA,gBAChC,MAAM;AAAA;AAAA,gBAEN,MAAM,CAAC,GAAG,IAAI,IAAI,OAAO,CAAC;AAAA,cAC5B;AAAA,YACF;AAAA,UACF,OAAO;AACL,iBAAK,MAAM,WAAW,QAAQ,IAAI;AAAA,cAChC,QAAQ,SAAS,MAAM;AAAA,YACzB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAGA,UAAI,KAAK,MAAM,WAAW,QAAQ,GAAG;AACnC,YAAI;AAAU,eAAK,MAAM,SAAS,KAAK,QAAQ;AAC/C,YAAI,eAAe,CAAC,KAAK,MAAM,WAAW,QAAQ,EAAE,aAAa;AAC/D,eAAK,MAAM,WAAW,QAAQ,EAAE,cAAc;AAAA,QAChD;AACA,YAAI,gBAAgB,WAAW,cAAc;AAC3C,cAAI,aAAa,KAAK,MAAM,WAAW,QAAQ,CAAC,GAAG;AACjD,iBAAK,MAAM,WAAW,QAAQ,EAAE,UAAU;AAAA,cACxC,aAAa;AAAA,YACf;AAAA,UACF,OAAO;AACL,iBAAK,MAAM,WAAW,QAAQ,EAAE,UAC9B,2BAA2B,aAAa,KAAK;AAAA,UACjD;AAAA,QACF;AAAA,MACF;AAAA,IAGF,CAAC;AAED,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI;AAAA,MACF;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;AAnLS;AAqLT,eAAe,yBAAyB,EAAE,IAAI,GAE3C;AACD,QAAM,YAAY,MAAM,OAAO,cAAc;AAC7C,QAAM,EAAE,iBAAiB,IAAI;AAC7B,QAAM,UAAU,MAAM,SAAS,GAAG;AAClC,QAAM,EAAE,gCAAgC,IAAI;AAC5C,QAAM,UAA2B,UAAU,MAAM,SAAS;AAAA,IACxD,UAAU,IAAI,gCAAgC;AAAA,IAC9C,UAAU;AAAA,IACV,UAAU;AAAA;AAAA,EAEZ,CAAC;AACD,SAAO;AAAA,IACL,MAAM;AAAA,EACR;AACF;AAhBe;AAkBf,SAAS,6BAA6B;AAAA,EACpC,MAAM;AAAA,EACN;AACF,GAG2B;AACzB,MAAI;AACF,UAAM,kBAAkB,CAAC,cAAc,eAAe;AAGtD,UAAM,SAAS,kBACX,QAAQ,IAAI,IACZ,QAAQ,KAAK,CAAC,MAAM,EAAE,gBAAgB,UAAU;AAKpD,UAAM,OAAuB;AAAA,MAC3B,YAAY;AAAA,MACZ,OAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM;AAAA,QACN,UAAU,CAAC;AAAA,QACX,YAAY,CAAC;AAAA,MACf;AAAA,MACA,OAAO,CAAC;AAAA,IACV;AAEA,WAAO,QAAQ,QAAQ,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,UAAU,OAAO,MAAM;AACnE,YAAM,EAAE,UAAU,aAAa,aAAa,IAAI;AAChD,cAAQ,SAAS,MAAM,MAAM;AAAA,QAC3B,KAAK;AACH,eAAK,MAAM,WAAW,QAAQ,IAAI;AAAA,YAChC,MAAM;AAAA,UACR;AACA;AAAA,QACF,KAAK;AACH,eAAK,MAAM,WAAW,QAAQ,IAAI;AAAA,YAChC,MAAM;AAAA,UACR;AACA;AAAA,QACF,KAAK;AACH,eAAK,MAAM,WAAW,QAAQ,IAAI;AAAA,YAChC,MAAM;AAAA,UACR;AACA;AAAA,QACF,KAAK;AACH,eAAK,MAAM,QAAQ,IAAI;AAAA,YACrB,OAAO;AAAA,YACP;AAAA,UACF;AAAA,MACJ;AAGA,UAAI,KAAK,MAAM,WAAW,QAAQ,GAAG;AACnC,YAAI;AAAU,eAAK,MAAM,SAAS,KAAK,QAAQ;AAC/C,YAAI,eAAe,CAAC,KAAK,MAAM,WAAW,QAAQ,EAAE,aAAa;AAC/D,eAAK,MAAM,WAAW,QAAQ,EAAE,cAAc;AAAA,QAChD;AACA,YAAI,gBAAgB,WAAW,cAAc;AAC3C,eAAK,MAAM,WAAW,QAAQ,EAAE,UAC9B,OAAO,aAAa,UAAU,WAC1B,2BAA2B,aAAa,KAAK,IAC7C,aAAa;AAAA,QACrB;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI;AAAA,MACF;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;AAjFS;AAmFT,SAAS,YAAY;AAAA,EACnB;AACF,GAE2B;AACzB,MAAI,SAAS;AAAO,WAAO;AAE3B,SAAO,QAAQ,MAAM,OAAO,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,UAAU,IAAI,MAAM;AAC1E,QAAI,cAAc,IAAI,GAAG;AAGvB,UAAI,CAAC,KAAK,KAAK,SAAS,KAAK,OAAO,GAAG;AACrC,aAAK,UAAU;AAAA,MACjB;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAlBS;AAoBT,eAAe,2BAA2B;AAAA,EACxC,KAAK;AAAA,EACL;AACF,GAeE;AACA,QAAM,YAAY,MAAM,YAAY;AAAA,IAClC,MAAM;AAAA,IACN;AAAA,IACA,aAAa;AAAA,EACf,CAAC;AACD,MAAI,UAAU,QAAQ;AACpB,UAAM,iBAAiB,MAAM,0BAA0B;AAAA,MACrD,KAAK,UAAU;AAAA,IACjB,CAAC;AACD,QAAI,gBAAgB;AAClB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,eAAe;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AACA,QAAM,SAAS,MAAM,YAAY;AAAA,IAC/B,MAAM;AAAA,IACN;AAAA,EACF,CAAC;AACD,MAAI,CAAC,OAAO;AAAQ,WAAO,EAAE,MAAM,UAAU;AAC7C,QAAM,EAAE,IAAI,IAAID,MAAK,MAAM,OAAO,YAAY;AAC9C,UAAQ,KAAK;AAAA,IACX,KAAK,QAAQ;AACX,YAAM,gBAAgB,MAAM,yBAAyB;AAAA,QACnD,KAAK,OAAO;AAAA,MACd,CAAC;AACD,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,cAAc;AAAA,MACtB;AAAA,IACF;AAAA,IACA,KAAK;AAAA,IACL,KAAK,QAAQ;AACX,YAAM,iBAAiB,MAAM,0BAA0B;AAAA,QACrD,KAAK,OAAO;AAAA,MACd,CAAC;AACD,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,eAAe;AAAA,MACvB;AAAA,IACF;AAAA,IACA;AACE,aAAO;AAAA,QACL,MAAM;AAAA,MACR;AAAA,EACJ;AACF;AAlEe;AAoEf,IAAM,0BAA0B,oBAAI,IAGlC;AACK,IAAM,sBAAsB,6BAAM;AACvC,MAAI,KAAK,8CAA8C;AACvD,0BAAwB,MAAM;AAChC,GAHmC;AAInC,eAAe,mBACb,MACA;AACA,QAAM,WAAW,KAAK,UAAU,IAAI;AACpC,MAAI,CAAC,wBAAwB,IAAI,QAAQ,GAAG;AAC1C,4BAAwB,IAAI,UAAU,2BAA2B,IAAI,CAAC;AAAA,EACxE;AACA,SAAO,wBAAwB,IAAI,QAAQ;AAC7C;AARe;AAUf,eAAe,aAAa;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,GAEoC;AAClC,QAAM,kBAAkB,MAAM,mBAAmB;AAAA,IAC/C;AAAA,IACA;AAAA,EACF,CAAC;AACD,UAAQ,gBAAgB,MAAM;AAAA,IAC5B,KAAK;AACH,aAAO,8BAA8B;AAAA,QACnC,MAAM,gBAAgB;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH,KAAK;AACH,aAAO,6BAA6B;AAAA,QAClC,MAAM,gBAAgB;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH,KAAK;AAAA,IACL;AACE,aAAO;AAAA,EACX;AACF;AA1Be;AA4Bf,eAAsB,aACpB,KAGiC;AACjC,SAAO,YAAY;AAAA,IACjB,MAAM,MAAM,aAAa,GAAG;AAAA,EAC9B,CAAC;AACH;AARsB;AAUtB,eAAsB,gBACpB,iBACA,YACmB;AACnB,MAAI;AACF,UAAM,EAAE,SAAS,aAAa,IAAI,iBAAiB,OAAO;AAC1D,UAAM,EAAE,SAAS,gBAAgB,IAAI,iBAAiB,WAAW;AAIjE,UAAM,YAAYA,MAAK;AAAA,MACrB,UAAQ,QAAQ,SAAS;AAAA,QACvB,OAAO,CAAC,QAAQ,IAAI,CAAC;AAAA,MACvB,CAAC;AAAA,IACH;AACA,UAAM,eAAeA,MAAK;AAAA,MACxB,UAAQ,QAAQ,aAAa;AAAA,QAC3B,OAAO,CAAC,QAAQ,IAAI,CAAC;AAAA,MACvB,CAAC;AAAA,IACH;AACA,UAAM,QAAQ,IAAI;AAAA,MAChB;AAAA,QACEA,MAAK,KAAK,WAAW,0BAA0B;AAAA,QAC/CA,MAAK,KAAK,iBAAiB,qBAAqB,YAAY,KAAK;AAAA,MACnE;AAAA,MACA;AAAA,QACEA,MAAK,KAAK,WAAW,6BAA6B;AAAA,QAClDA,MAAK,KAAK,iBAAiB,wBAAwB,YAAY,KAAK;AAAA,MACtE;AAAA,MACA;AAAA,QACEA,MAAK,KAAK,cAAc,iCAAiC;AAAA,QACzDA,MAAK;AAAA,UACH;AAAA,UACA,4BAA4B,eAAe;AAAA,QAC7C;AAAA,MACF;AAAA,MACA;AAAA,QACEA,MAAK,KAAK,cAAc,8BAA8B;AAAA,QACtDA,MAAK;AAAA,UACH;AAAA,UACA,yBAAyB,eAAe;AAAA,QAC1C;AAAA,MACF;AAAA,IACF,CAAC;AACD,UAAM,kBACJ,QAAQ,IAAI,aAAa,eAAe,mBAAmB;AAE7D,WAAO;AAAA,MACLA,MAAK,KAAK,YAAY,SAAS,eAAe,IAAI,YAAY,KAAK;AAAA,MACnEA,MAAK;AAAA,QACH;AAAA,QACA,aAAa,eAAe,IAAI,eAAe;AAAA,MACjD;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,QAAI;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AA9DsB;;;AC5nBtB,SAAS,wBAAwB;AACjC,SAAS,eAAe,aAAmB;AAC3C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,mBAAmB;AAE5B,SAAS,gBAAgB,MAAuB;AAC9C,SAAO,KAAK,YAAY,MAAM;AAChC;AAFS;AAIT,SAAS,wBAAwB,KAAsB;AACrD,SAAO,gBAAgB,IAAI,CAAC,CAAC;AAC/B;AAFS;AAIT,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AACF,GAMoB;AAClB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,UAAU;AAAA,MACR,MAAM;AAAA,IACR;AAAA,IACA,WAAW;AAAA,MACT;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,QACP,oBAAoB;AAAA,QACpB,MAAM;AAAA,UACJ,YAAY;AAAA,QACd;AAAA,QACA,SAAS,CAAC,aAAa;AAAA,QACvB,UAAU,CAAC;AAAA,MACb;AAAA,IACF;AAAA,IACA,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,UAAU,CAAC;AAAA,EACb;AACF;AA1CS;AA4CF,IAAM,qBAAqB,cAAc;AAAA,EAC9C,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,aAAa;AAAA,EACb,cAAc,aAAa;AAAA,IACzB,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,UAAU,OAAO,EAAE,SAAS,EAAE,SAAS,eAAe,GAAG,GAAG,OAAO,MAAM;AACvE,UAAM,UAAU,OAAO;AACvB,UAAM,kBAAkB,MAAM,qBAAqB;AAAA,MACjD;AAAA,IACF,CAAC;AACD,UAAM,kCAAkC,gBAAgB;AAAA,MACtD,CAAC,KAAK,YAAY;AAChB,cAAM,iBACJ,QAAQ,WAAW,OAAO,CAAC,MAAM,EAAE,uBAAuB,OAAO,KACjE,CAAC;AACH,YAAI,KAAK,GAAG,eAAe,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAC9C,eAAO;AAAA,MACT;AAAA,MACA,CAAC;AAAA,IACH;AACA,UAAM,EAAE,SAAS,WAAW,IAAI,MAAM,iBAAiB;AAAA,MACrD,MAAM;AAAA,IACR,CAAC;AACD,WAAO;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,MAAM,CAAC,GAAG,SACR,MAAM,cAAc;AAAA,UAClB;AAAA,UACA;AAAA,UACA,SAAS,cAAc;AAAA,YACrB,IAAI;AAAA,YACJ,cAAc,aAAa;AAAA,cACzB,aAAa;AAAA,gBACX,MAAM;AAAA,gBACN,SAAS,WACN;AAAA,kBACC,CAAC,eACC,wBAAwB,UAAU,KAClC,CAAC,gCAAgC,SAAS,UAAU;AAAA,gBACxD,EACC,IAAI,CAAC,gBAAgB;AAAA,kBACpB,OAAO;AAAA,gBACT,EAAE;AAAA,cACN;AAAA,YACF;AAAA,YACA,UAAU,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM;AAChD,oBAAM,WAAW,YAAY,IAAI,CAAC,gBAAgB;AAAA,gBAChD;AAAA,gBACA,WAAW,WAAW,WAAW,YAAY,IACzC,WAAW,MAAM,aAAa,MAAM,EAAE,YAAY,IAClD,WAAW,YAAY;AAAA,cAC7B,EAAE;AACF,qBAAO;AAAA,gBACL,GAAG,SAAS;AAAA,kBACV,CAAC,EAAE,YAAY,UAAU,OAAa;AAAA,oBACpC,OAAO,OAAO,UAAU;AAAA,oBACxB,MAAM,OAAO,IAAI,YAAY;AAC3B,4BAAM,cAAoB;AAAA,wBACxB,MAAM;AAAA,wBACN,IAAI,YAAY;AAAA,wBAChB,OAAO;AAAA,wBACP;AAAA,wBACA,YAAY;AAAA,wBACZ,MAAM;AAAA,0BACJ,OAAO,CAAC;AAAA,0BACR,OAAO,CAAC;AAAA,wBACV;AAAA,sBACF;AACA,4BAAM,UAAU,kBAAkB;AAAA,wBAChC,IAAI;AAAA,wBACJ;AAAA,wBACA;AAAA,wBACA,eAAe,YAAY;AAAA,sBAC7B,CAAC;AAED,4BAAM,QAAQ,IAAI;AAAA,wBAChB,UAAU;AAAA,0BACR;AAAA,0BACA,MAAM;AAAA,wBACR,CAAC;AAAA,wBACD,qBAAqB;AAAA,0BACnB;AAAA,0BACA;AAAA,0BACA,MAAM;AAAA,wBACR,CAAC;AAAA,sBACH,CAAC;AAAA,oBACH;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA;AAAA,kBACE,OAAO;AAAA,kBACP,MAAM,OAAO,IAAI,YAAY;AAC3B,0BAAM,EAAE,KAAK,IAAI,MAAM,gBAAgB;AAAA,sBACrC;AAAA,oBACF,CAAC;AAED,0BAAM,kBAAkB,OAAO,OAAO,IAAI,EAAE;AAAA,sBAC1C,CAAC,EAAE,MAAAE,OAAM,MAAM,GAAG,MAAM;AAEtB,4BAAIA;AAAM,iCAAO;AACjB,4BAAI,KAAK,YAAY,MAAM;AAAY,iCAAO;AAC9C,4BAAI,KAAK,YAAY,MAAM;AAAc,iCAAO;AAChD,+BAAO;AAAA,sBACT;AAAA,oBACF;AACA,0BAAM,cAAc;AAAA,sBAClB;AAAA,sBACA,UAAU,SAAS,IAAI,CAAC,EAAE,UAAU,OAAO;AAAA,wBACzC,OAAO;AAAA,wBACP,SAAS,YAAY,SAAS;AAAA,wBAC9B,WAAW,iBAAiB,MAAM;AAAA,sBACpC,EAAE;AAAA,oBACJ,CAAC;AAAA,kBACH;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAAA,MACL;AAAA,IACF;AAAA,EACF;AACF,CAAC;;;AF1JD,IAAM,EAAE,IAAI,IAAI,cAAc,SAAS;AAEvCC,KAAI,oBAAoB,EAAE,GAAG,KAAK,MAAM,IAAI,MAAO,SAAS,IAAI,QAAS,CAAC;AAG1E,IAAM,EAAE,0BAA0B,IAAI;AAW/B,IAAM,wBAAN,MAAM,+BACH,4BAEV;AAAA,EA7DA,OA6DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAIE;AAAA,EACA;AAAA,EACA;AAAA,EACQ;AAAA,EAEA;AAAA,EAER,YAAY;AAAA,IACV;AAAA,IACA,kBAAkB,KAAK,WAAW,oBAAoB;AAAA,IACtD,KAAK,YAAY;AAAA,IACjB;AAAA,EACF,IAYI,CAAC,GAAG;AACN,UAAM;AAAA,MACJ;AAAA,MACA,WAAW;AAAA,MACX,UAAU;AAAA,MACV;AAAA,IACF,CAAC;AACD,SAAK,WAAW;AAChB,SAAK,SAAS,CAAC;AACf,SAAK,kBAAkB;AAGvB,SAAK,yBAAyB;AAC9B,SAAK,WAAW,CAAC,kBAAkB;AAAA,EACrC;AAAA,EAEA,MAAM,KAAK,KAA8D;AACvE,UAAM,MAAM,KAAK,GAAG;AACpB,SAAK,SAAS,MAAM,gBAAgB,KAAK,WAAW,KAAK,UAAU;AACnE,QAAI,CAAE,MAAM,OAAO,KAAK,eAAe,GAAI;AACzC,YAAM,IAAI;AAAA,QACR,oCAAoC,KAAK,eAAe;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAA+C,OAAO;AAAA,IACpD,IAAI,KAAK;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,sBAAsB;AAAA,IACtB,kBACE;AAAA,IACF,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,IACrB,iBAAiB;AAAA,IACjB,uBAAuB;AAAA,IACvB,SAAS,IAAI;AAAA,IACb,qBAAqB;AAAA,IACrB,4BAA4B;AAAA,IAC5B,+BAA+B;AAAA,IAC/B,qBAAqB;AAAA,MACnB,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,YAAY;AAAA,QACZ,OAAO;AAAA,UACL,MAAM;AAAA,UACN,YAAY,CAAC;AAAA,QACf;AAAA,QACA,OAAO;AAAA,UACL,UAAU,EAAE,OAAO,WAAW;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW,KAAqB;AAC9B,WAAO,WAAW,GAAG;AAAA,EACvB;AAAA,EAEA,sBAEE;AACA,UAAM,SAAS,MAAM,oBAAoB;AAEzC,WAAO,YAAY;AAAA,MACjB,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,eAAwE;AACtE,UAAM,UAAU,MAAM,aAAa;AACnC,YAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,YAAY;AAAA,UACV,MAAM;AAAA,UACN,MAAM,KAAK;AAAA,UACX,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,YAAY;AAAA,UACV,MAAM;AAAA,UACN,MAAM,KAAK,WAAW,qBAAqB;AAAA,UAC3C,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,wBAAwB;AAAA,IAC5B;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,UAAU,KAAK;AAAA,EAC3C,GAK6C;AAC3C,UAAM,mBAAmB,KAAK,aAAa,EAAE;AAAA,MAAQ,CAAC,QACpD,IAAI,SAAS,UAAU,CAAC,IAAI,WAAW,IAAI,IAAI,CAAC;AAAA,IAClD;AACA,UAAM,EAAE,SAAS,sBAAsB,eAAe,IACpD,KAAK,sBAAsB,EAAE,SAAS,SAAS,CAAC;AAElD,QAAI,CAAC,sBAAsB;AACzB,MAAAA,KAAI,MAAM,GAAG,eAAe,KAAK,IAAI,CAAC,gCAAgC;AAAA,QACpE;AAAA,MACF,CAAC;AAAA,IACH;AAGA,UAAM,cAAc;AAAA,MAClB,GAAG,QAAQ,IAAI,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,IAAI;AAAA,MACjD,GAAG;AAAA,IACL;AAEA,UAAM,eAIA,QAAQ,QAAQ,CAAC,QAAQ;AAC7B,UAAI,IAAI,SAAS,oBAAoB;AACnC,eAAO;AAAA,UACL;AAAA,YACE,WAAW,IAAI;AAAA,YACf,YAAY,IAAI;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AACA,UAAI,IAAI,SAAS,yBAAyB;AACxC,eAAO;AAAA,UACL;AAAA,YACE,WAAW,IAAI;AAAA,YACf,YAAY,IAAI;AAAA,YAChB,QAAQ,IAAI;AAAA,UACd;AAAA,QACF;AAAA,MACF;AACA,aAAO,CAAC;AAAA,IACV,CAAC;AAED,UAAM,mBAAuD;AAAA,MAC3D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,kBAAkB,MAAM,SAAS;AAAA,MACrC,cAAc;AAAA,MACd,OAAO;AAAA,MACP,UAAU;AAAA;AAAA,IAEZ,CAAC;AAKD,mBAAe,YAAY;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAIuC;AACrC,UAAI,CAAC,UAAU;AACb,cAAM,IAAI,MAAM,2BAA2B;AAAA,MAC7C;AACA,YAAM,aAAa,MAAM,SAAS,cAAc;AAAA,QAC9C;AAAA,QACA,QAAQ,oBAAoB,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE;AAAA,MACtD,CAAC;AACD,aAAO;AAAA,IACT;AAjBe;AAmBf,QAAI,OAAO;AAAA;AAAA,EAEb,YAAY,SAAS,CAAC;AAAA,EACtB,YAAY,IAAI;AAAA;AAAA,cAEJ,KAAK,UAAU,YAAY,CAAC;AAAA,yBACjB,KAAK,UAAU,gBAAgB,CAAC;AAAA;AAAA,YAE7C,YAAY,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,IAG9B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,kCAKuB,KAAK,sBAAsB;AAAA;AAAA;AAAA,YAGjD,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAQf,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BvB,QAAI,eAAe;AACnB,QAAI,eAAe;AAEnB,QAAI;AACF,aAAO,MAAM,KAAK,oBAAoB;AAAA,QACpC;AAAA,MACF,CAAC;AAAA,IACH,SAAS,GAAG;AACV,qBAAe;AACf,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,0CAA0C;AACtD,cAAQ,MAAM,EAAE,OAAO;AACvB,aAAO,iBAAiB,KAAK,UAAU,EAAE,OAAO,CAAC;AACjD,qBAAe,cAAc,EAAE,OAAO;AAAA,IACxC;AAEA,QAAI,CAAC,cAAc;AACjB,UAAI;AACF,eAAO,MAAMC,YAAW;AAAA,UACtB,UAAU;AAAA,UACV,MAAM;AAAA;AAAA,QACR,CAAC;AAAA,MACH,SAAS,GAAG;AACV,uBAAe;AACf,gBAAQ,IAAI,IAAI;AAChB,gBAAQ,IAAI,6CAA6C;AACzD,gBAAQ,MAAM,EAAE,OAAO;AACvB,eAAO,iBAAiB,KAAK,UAAU,EAAE,OAAO,CAAC;AACjD,uBAAe,cAAc,EAAE,OAAO;AAAA,MACxC;AAAA,IACF;AAEA,UAAM,OAAO;AAAA,MACX,KAAK,OAAO,IAAI,CAAC,UAAU,gBAAgB,KAAK,aAAa,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA,MAEzE,KAAK,4BAA4B;AAAA,MACjC,QAAQ,KAAK,qBAAqB;AAAA;AAAA,MAElC,oBAAoB;AAAA,IACtB,CAAC,CAAC;AAAA;AAAA;AAAA,4CAGsC,IAAI;AAAA,EAC9C,YAAY;AAAA;AAAA;AAIV,WAAO;AAAA,MACL,IAAI,CAAC;AAAA,MACL,MAAM,MAAMA,YAAW;AAAA,QACrB,UAAU;AAAA,QACV,MAAM;AAAA;AAAA,MACR,CAAC;AAAA,MACD;AAAA,MACA,kBAAkB,KAAK;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,MAAM,OACJ,KAC0C;AAC1C,QAAI,uBAAsB,eAAe,IAAI,IAAI,GAAG;AAIlD,YAAM,QAAQ,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,KAAM,GAAI;AAC7C,UAAI;AACJ,UAAI,UAAU;AAEd,aAAO,MAAM;AACX,YAAI;AACF,6BAAmB,IAAI,gBAAgB,4BAA4B;AAAA,YACjE,WAAW,IAAI,QAAQ;AAAA,YACvB,YAAY,IAAI,SAAS;AAAA,YACzB,QAAQ,IAAI,KAAK;AAAA,UACnB,CAAC;AAED;AAAA,QACF,SAAS,GAAG;AACV,gBAAM,WAAW,MAAM,OAAO;AAC9B,cAAI,CAAC,UAAU;AACb,kBAAM,IAAI,MAAM,CAAC;AAAA,UACnB;AACA,qBAAW;AAEX,gBAAM,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF;AAEA,YAAM,CAAC,sBAAsB,EAAE,OAAO,QAAQ,CAAC,IAAI,MAAM,QAAQ,IAAI;AAAA,QACnEC,UAAS,gBAAgB;AAAA,QACzB,KAAK,mBAAmB,GAAG;AAAA,MAC7B,CAAC;AACD,YAAM,UAAU,MAAM,gBAAgB;AAAA,QACpC,UAAU;AAAA,MACZ,CAAC;AACD,YAAM,UAAU,MAAM,KAAK,wBAAwB;AAAA,QACjD,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA,eAAe;AAAA,MACjB,CAAC;AAED,aAAO;AAAA,IACT;AAEA,QAAI,uBAAsB,WAAW,IAAI,IAAI,GAAG;AAC9C,YAAM,EAAE,OAAO,QAAQ,IAAI,MAAM,KAAK,mBAAmB,GAAG;AAC5D,YAAM,EAAE,MAAM,WAAW,IAAI,KAAK,wBAAwB;AAAA,QACxD;AAAA,MACF,CAAC;AAED,YAAM,CAAC,cAAc,OAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,QAChD,gBAAgB;AAAA,UACd,UAAU;AAAA,UACV,SAAS;AAAA,QACX,CAAC;AAAA,QACD,gBAAgB;AAAA,UACd,UAAU;AAAA,QACZ,CAAC;AAAA,MACH,CAAC;AAED,aAAO,KAAK,wBAAwB;AAAA,QAClC;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA,eAAe;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAM,mBAAmB,KAGtB;AACD,UAAM,EAAE,SAAS,UAAU,iBAAiB,KAAK,IAAI;AACrD,QAAI,MAAM,QAAQ,uBAAsB,WAAW,IAAI,GAAG;AACxD,YAAM;AAAA,QACJ,MAAM,EAAE,OAAO,OAAO,qBAAqB;AAAA,MAC7C,IAAI;AAEJ,YAAM,aAAa,KAAK,YAAY;AAAA,QAClC,WAAW,QAAQ;AAAA,QACnB,YAAY,SAAS;AAAA,MACvB,CAAC;AACD,UAAI,CAAC,YAAY;AACf,cAAM,IAAI;AAAA,UACR,+CAA+C,QAAQ,EAAE,IAAI,SAAS,EAAE;AAAA,QAC1E;AAAA,MACF;AACA,YAAM,EAAE,MAAM,MAAM,aAAa,IAAI,WAAW;AAEhD,YAAM,cAA4B,CAAC,UAAU;AAC7C,YAAM,WAAqB,CAAC;AAC5B,YAAM,aAA+C,CAAC;AAEtD,UAAI,OAAO;AACT,cAAM,YAAY,OAAO,KAAK,KAAK;AACnC,cAAM,aAAa,MAAM,QAAQ;AAAA,UAC/B,UAAU,IAAI,OAAO,aAAa;AAChC,kBAAM,YAAY,MAAM,QAAQ;AAChC,kBAAM,kBAAkB,MAAM,QAAQ;AAAA,cACpC,UAEG,OAAO,CAAC,aAAa;AACpB,oBAAI,CAAC,cAAc,QAAQ,GAAG;AAC5B,sBAAI,CAAC,SAAS;AAAW,2BAAO;AAChC,sBAAI,CAAC,SAAS;AAAY,2BAAO;AACjC,sBAAI,sBAAsB,QAAQ,KAAK,CAAC,SAAS,QAAQ;AACvD,2BAAO;AAAA,kBACT;AAAA,gBACF;AACA,uBAAO;AAAA,cACT,CAAC,EACA,IAAI,OAAO,aAAa;AACvB,oBAAI,cAAc,QAAQ,GAAG;AAC3B,sBAAI,UAAU,WAAW,KAAK,aAAa,YAAY;AAErD,2BAAO,KAAK,SAAS,IAAI;AAAA,kBAC3B;AACA,yBAAO,SAAS;AAAA,gBAClB;AAEA,sBAAM,cAAc,gBAAgB;AAAA,kBAClC,SAAS;AAAA,gBACX;AAEA,sBAAM,eAAe,YAAY,UAAU;AAAA,kBACzC,CAAC,MAAM,EAAE,OAAO,SAAS;AAAA,gBAC3B;AACA,oBAAI,2BAA2B,QAAQ,GAAG;AACxC,wBAAM,EAAE,OAAAC,QAAO,QAAQ,IAAI,MAAM,KAAK,mBAAmB;AAAA,oBACvD,SAAS;AAAA,oBACT,UAAU;AAAA,oBACV;AAAA,kBACF,CAAC;AACD,8BAAY,KAAK,GAAG,OAAO;AAC3B,yBAAOA;AAAA,gBACT;AACA,oBAAI,sBAAsB,QAAQ,GAAG;AACnC,wBAAM,EAAE,OAAAA,QAAO,QAAQ,IAAI,MAAM,KAAK,mBAAmB;AAAA,oBACvD,SAAS;AAAA,oBACT,UAAU;AAAA,oBACV,MACE,SAAS,QACT,KAAK,SAAS,UAAU,SAAS,MAAM;AAAA,oBACzC;AAAA,kBACF,CAAC;AACD,8BAAY,KAAK,GAAG,OAAO;AAC3B,yBAAOA;AAAA,gBACT;AAEA,sBAAM,IAAI;AAAA,kBACR,sBAAsB,KAAK,UAAU,QAAQ,CAAC;AAAA,gBAChD;AAAA,cACF,CAAC;AAAA,YACL;AACA,mBAAO;AAAA,cACL;AAAA,cACA;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAEA,mBAAW,QAAQ,CAAC,EAAE,UAAU,gBAAgB,MAAM;AACpD,gBAAM,sBAAsB,uBAAuB,QAAQ;AAC3D,gBAAM,EAAE,SAAS,SAAS,IAAI,0BAA0B;AAAA,YACtD;AAAA,YACA,oBAAoB;AAAA,YACpB,iBAAiB;AAAA,UACnB,CAAC;AACD,cAAI,SAAS;AACX,gBAAI,aAAa,YAAY;AAC3B,uBAAS,KAAK,OAAO;AAAA,YACvB,OAAO;AACL,yBAAW,KAAK;AAAA,gBACd,KAAK;AAAA,gBACL,OAAO;AAAA,cACT,CAAC;AAAA,YACH;AAAA,UACF;AAEA,0BAAgB,QAAQ,CAACA,WAAU;AACjC,gBAAI,aAAa,YAAY;AAC3B,uBAAS,KAAKA,MAAK;AAAA,YACrB,OAAO;AACL,yBAAW,KAAK;AAAA,gBACd,KAAK;AAAA,gBACL,OAAOA;AAAA,cACT,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAED,cAAI,UAAU;AACZ,gBAAI,aAAa,YAAY;AAC3B,uBAAS,KAAK,QAAQ;AAAA,YACxB,OAAO;AACL,yBAAW,KAAK;AAAA,gBACd,KAAK;AAAA,gBACL,OAAO;AAAA,cACT,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAEA,YAAM,QAAQ,MAAM,SAAS;AAAA,QAC3B;AAAA,QACA;AAAA,QACA,UAAU,SAAS,KAAK,IAAI;AAAA,QAC5B;AAAA,MACF,CAAC;AAED,aAAO;AAAA,QACL;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF;AAEA,QAAI,MAAM,QAAQ,uBAAsB,eAAe,IAAI,GAAG;AAC5D,YAAM,aAAa,KAAK,YAAY;AAAA,QAClC,WAAW,QAAQ;AAAA,QACnB,YAAY,SAAS;AAAA,QACrB,QAAQ,KAAK;AAAA,MACf,CAAC;AACD,UAAI,CAAC,YAAY;AACf,cAAM,IAAI;AAAA,UACR,oDAAoD,QAAQ,EAAE,IAAI,SAAS,EAAE,IAAI,KAAK,EAAE;AAAA,QAC1F;AAAA,MACF;AACA,YAAM,EAAE,MAAM,MAAM,aAAa,IAAI,WAAW;AAEhD,YAAM,QAAQ,MAAM,SAAS,EAAE,aAAa,CAAC;AAE7C,aAAO;AAAA,QACL;AAAA,QACA,SAAS,CAAC,UAAU;AAAA,MACtB;AAAA,IACF;AAEA,QAAI,CAAC,MAAM;AACT,YAAM,aAAa,KAAK,YAAY;AAAA,QAClC,WAAW,QAAQ;AAAA,QACnB,YAAY,SAAS;AAAA,MACvB,CAAC;AACD,UAAI,CAAC,YAAY;AACf,cAAM,IAAI;AAAA,UACR,+CAA+C,QAAQ,EAAE,IAAI,SAAS,EAAE;AAAA,QAC1E;AAAA,MACF;AACA,YAAM,EAAE,MAAM,MAAM,aAAa,IAAI,WAAW;AAEhD,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAML,OAAO;AAAA,QACP,SAAS,CAAC,UAAU;AAAA,MACtB;AAAA,IACF;AAEA,UAAM,IAAI;AAAA,MACR,2BAA2B,QAAQ,EAAE,IAAI,SAAS,EAAE,KAAK,KAAK;AAAA,QAC5D;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,KAA4C;AACzD,UAAM,EAAE,MAAM,IAAI,MAAM,KAAK,mBAAmB,GAAG;AACnD,WAAO;AAAA,EACT;AAAA,EAEA,YAAuD,OAAO;AAAA,IAC5D;AAAA,IACA;AAAA,EACF,MAGuC;AACrC,UAAM,OAAO,MAAM,aAAa;AAAA,MAC9B,KAAK,SAAS;AAAA,MACd,YAAY,SAAS,SAAS;AAAA,MAC9B,gBAAgB,KAAK,OAAO;AAAA,IAC9B,CAAC;AACD,QAAI,SAAS,OAAO;AAClB,YAAM,aAAa,OAAO,KAAK,MAAM,OAAO,cAAc,CAAC,CAAC,EAAE;AAC9D,YAAM,aAAa,OAAO,KAAK,MAAM,SAAS,CAAC,CAAC,EAAE;AAClD,UAAI,eAAe,KAAK,eAAe,GAAG;AACxC,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,MAAM,KAA2D;AACrE,UAAM,MAAM,MAAM,GAAG;AACrB,mBAAe,yBAAyB,MAAM;AAC5C,0BAAoB;AAAA,IACtB,CAAC;AAAA,EACH;AAAA,EAEA,kBAAmE,OAAO;AAAA,IACxE;AAAA,IACA;AAAA,EACF,MAAM;AACJ,UAAM,QAAwB,CAAC;AAC/B,QAAI,UAAU,MAAM,OAAO;AACzB,YAAM,SAAS,KAAK,MAAM,KAAK,UAAU,SAAS,KAAK,KAAK,CAAC;AAC7D,UAAI,UAAU,MAAM,OAAO;AACzB,eAAO,QAAQ,SAAS,KAAK,KAAK,EAAE,QAAQ,CAAC,CAAC,IAAI,IAAI,MAAM;AAC1D,iBAAO,WAAW,EAAE,IAAI;AAAA,YACtB,QAAQ;AAAA,YACR,QAAQ;AAAA,YAER,aAAa,KAAK,oBACd,GAAG,KAAK,WAAW,eAAe,KAAK,kBAAkB;AAAA,cACvD;AAAA,YACF,CAAC,KACD,KAAK;AAAA,UACX;AACA,iBAAO,WAAW,OAAO,YAAY,CAAC;AACtC,cAAI,KAAK;AAAY,mBAAO,SAAS,KAAK,EAAE;AAAA,QAC9C,CAAC;AAAA,MACH;AACA,YAAM,WACJ,MAAM,uBAAsB,8BAA8B;AAAA,QACxD;AAAA,QACA,OAAO,GAAG,KAAK,WAAW,QAAQ,EAAE,CAAC;AAAA;AAAA,QAErC,aAAa,iDAAiD,QAAQ,EAAE,IAAI,SAAS,EAAE;AAAA,QACvF,WAAW,QAAQ;AAAA,QACnB,YAAY,SAAS;AAAA,QACrB,YAAY;AAAA,MACd,CAAC;AAEH,YAAM,KAAK;AAAA,QACT,UAAU;AAAA,QACV,UAAU;AAAA,QACV,MAAM,GAAG,QAAQ,EAAE,IAAI,SAAS,EAAE;AAAA,MACpC,CAAC;AACD,YAAM,KAAK;AAAA,QACT,UAAU,KAAK,UAAU,QAAQ,MAAM,IAAI;AAAA,QAC3C,UAAU;AAAA,QACV,MAAM,GAAG,QAAQ,EAAE,IAAI,SAAS,EAAE;AAAA,MACpC,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAEA,yBACE,OAAO,EAAE,OAAO,QAAQ,MAAM;AAC5B,UAAM,UAAoB,CAAC;AAE3B,UAAM,MAAM;AACZ,UAAM,QAAQ,CAAC,SAAS;AACtB,UAAI,KAAK,KAAK,SAAS,GAAG,GAAG;AAC3B,cAAM,EAAE,KAAK,IAAI,MAAM,KAAK,IAAI;AAChC,cAAM,CAAC,WAAW,UAAU,IAAI,KAAK,MAAM,GAAG;AAC9C,cAAM,UAAU,eAAe,KAAK;AACpC,cAAM,aAAa,KAAK,WAAW,GAAG,SAAS,OAAO;AACtD,cAAM,2BAA2B,KAAK;AAAA,UACpC,GAAG,SAAS,IAAI,UAAU;AAAA,QAC5B;AACA,gBAAQ;AAAA,UACN,YACE,UACI,aACA,GAAG,UAAU,OAAO,wBAAwB,EAClD,cAAc,SAAS,SAAS,KAAK,IAAI,EAAE,QAAQ,SAAS,EAAE,CAAC;AAAA,QACjE;AAAA,MACF;AAAA,IACF,CAAC;AAGD,YAAQ,KAAK,EAAE;AAEf,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,QACE,UAAU,QAAQ,KAAK,IAAI;AAAA,QAC3B,UAAU;AAAA,QACV,MAAM,KAAK,SAAS,YAAY;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AAAA,EAEF,MAAM,uBAAuB;AAAA,IAC3B;AAAA,EACF,GAE0E;AACxE,UAAM,EAAE,MAAM,QAAQ,IAAI,KAAK,SAAS;AACxC,UAAM,EAAE,kBAAkB,aAAa,IAAI,KAAK,eAAe;AAC/D,UAAM,kBAAwC;AAAA,MAC5C,GAAG;AAAA,MACH,GAAG;AAAA,IACL,EAAE,IAAI,CAAC,EAAE,MAAAC,OAAM,MAAM,MAAM;AACzB,aAAO;AAAA,QACL,MAAAA;AAAA,QACA,OAAO,SAAS;AAAA,MAClB;AAAA,IACF,CAAC;AAED,UAAM,WAAW;AAAA,MACf,GAAG,oBAAI,IAAI,CAAC,SAAS,GAAG,gBAAgB,IAAI,CAAC,EAAE,MAAAA,MAAK,MAAMA,KAAI,CAAC,CAAC;AAAA,IAClE;AACA,UAAM,iBAAuC,MAAM,QAAQ;AAAA,MACzD,SAAS,IAAI,OAAOA,UAAwC;AAC1D,YAAI,CAACA;AAAM,iBAAO,CAAC;AACnB,YAAI;AACF,gBAAM,EAAE,SAAS,SAAS,IAAI,MAAMC,kBAAiB;AAAA,YACnD,MAAAD;AAAA,YACA,gBAAgB;AAAA,YAChB,gBAAgB,KAAK;AAAA,UACvB,CAAC;AACD,cAAI,UAAU;AACZ,kBAAM,IAAI,MAAM,QAAQ;AAAA,UAC1B;AACA,iBACE,QAGG,OAAO,CAAC,MAAM,MAAM,aAAa,qBAAqB,CAAC,CAAC,EACxD,IAAI,CAAC,UAAU;AAAA,YACd,OAAO;AAAA,YACP,MAAAA;AAAA,UACF,EAAE;AAAA,QAER,SAAS,GAAG;AAEV,UAAAJ,KAAI;AAAA,YACF,kCAAkCI,KAAI,KAAK,EAAE,OAAO;AAAA,YACpD;AAAA,YACA,KAAK;AAAA,UACP;AACA,iBAAO,CAAC;AAAA,QACV;AAAA,MACF,CAAC;AAAA,IACH,EAAE,KAAK,CAAC,YAAY;AAElB,aAAO,QAAQ,KAAK;AAAA,IACtB,CAAC;AAED,UAAM,cAAc,eAAe,OAAO,CAAC,MAAM;AAC/C,aAAO,CAAC,gBAAgB;AAAA,QACtB,CAAC,OAAO,GAAG,UAAU,EAAE,SAAS,GAAG,SAAS,EAAE;AAAA,MAChD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AACF;","names":["log","getJsExportNames","readFile","formatCode","path","path","parse","path","log","formatCode","readFile","usage","path","getJsExportNames"]}
|
1
|
+
{"version":3,"sources":["../../../../../node_modules/.pnpm/tsup@8.0.2_@microsoft+api-extractor@7.43.8_@types+node@20.16.1__@swc+core@1.3.57_@swc+helpers_cstkf2rtisiifgkfujemx5llme/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 { pascalCase, Except, isFirstLetterCapital } from '@knapsack/utils';\nimport { knapsackEvents, log, KnapsackRendererBase } from '@knapsack/app';\nimport {\n KsRendererClientGlobal,\n KnapsackFile,\n KsJsImport,\n isSlottedText,\n isSlottedTemplateReference,\n isSlottedTemplateDemo,\n KnapsackPatternTemplate,\n KsTemplateSpec,\n TemplateSuggestion,\n rendererIds,\n RendererId,\n} from '@knapsack/types';\nimport type {\n KnapsackRenderParams,\n KnapsackTemplateRenderer,\n KnapsackTemplateRendererBase,\n KnapsackTemplateRendererResults,\n Patterns,\n} from '@knapsack/app/types';\nimport {\n exists,\n findUpPkgJson,\n getJsExportNames,\n readFile,\n formatCode,\n} from '@knapsack/file-utils';\nimport type { ReactNode } from 'react';\nimport { join, relative, parse } from 'path';\nimport {\n clearInferSpecCache,\n copyReactAssets,\n getDemoAppUsage,\n getReactDocs,\n getUsage,\n} from './utils';\nimport { createReactPattern } from './react-creators';\n\nconst { pkg } = findUpPkgJson(__dirname);\n// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\nlog.setupUpdateNotifier({ ...pkg, name: pkg.name!, version: pkg.version! });\n\n// static methods only\nconst { createSlotOptionsHtmlTags } = KnapsackRendererBase;\n\nexport type DemoWrapperProps = {\n children: React.ReactNode;\n patternsUsed: {\n patternId: string;\n templateId: string;\n demoId?: string;\n }[];\n} & Except<KnapsackRenderParams, 'patternManifest'>;\n\nexport class KnapsackReactRenderer\n extends KnapsackRendererWebpackBase\n implements KnapsackTemplateRenderer\n{\n /**\n * `react.js` & `react-dom.js` root relative paths\n */\n assets: string[];\n babelConfig: Record<string, unknown>;\n creators: KnapsackTemplateRenderer['creators'];\n private demoWrapperPath: string;\n\n private disableReactStrictMode?: boolean;\n\n constructor({\n webpackConfig,\n demoWrapperPath = join(__dirname, './demo-wrapper.mjs'),\n id = rendererIds.react,\n disableReactStrictMode,\n }: {\n webpackConfig?: ConstructorParameters<\n typeof KnapsackRendererWebpackBase\n >[0]['webpackConfig'];\n demoWrapperPath?: string;\n /** When using React v18+, this option allows a workspace to _disable_ React's Strict Mode from running in Knapsack's React Renderer (StrictMode is enabled by default).\n *\n * See https://reactjs.org/docs/strict-mode.html for more info\n * */\n disableReactStrictMode?: boolean;\n /** Don't set if calling from `knapsack.config.js`, only use if creating a new Renderer based on the React Renderer */\n id?: RendererId;\n } = {}) {\n super({\n id,\n extension: '.jsx',\n language: 'jsx',\n webpackConfig,\n });\n this.language = 'jsx';\n this.assets = [];\n this.demoWrapperPath = demoWrapperPath;\n\n // Half-borrowing the API Synax for this from the latest version of Next.js\n this.disableReactStrictMode = disableReactStrictMode;\n this.creators = [createReactPattern];\n }\n\n async init(opt: { patterns: Patterns; cacheDir: string }): Promise<void> {\n await super.init(opt);\n this.assets = await copyReactAssets(this.outputDir, this.publicPath);\n if (!(await exists(this.demoWrapperPath))) {\n throw new Error(\n `Could not find demo wrapper at: \"${this.demoWrapperPath}\"`,\n );\n }\n }\n\n getMeta: KnapsackTemplateRenderer['getMeta'] = () => ({\n id: this.id,\n title: 'React',\n aliasUse: 'optional',\n aliasTitle: 'Named Export',\n aliasIsJsNamedExport: true,\n aliasDescription:\n 'If `export X` was used instead of `export default`, then provide X.',\n enableDataDemos: true,\n enableTemplateDemos: true,\n hasSlotsSupport: true,\n hasSlotOptionsSupport: true,\n version: pkg.version,\n hasInferSpecSupport: true,\n syntaxHighlightingLanguage: 'jsx',\n hasTemplateSuggestionsSupport: true,\n prototypingTemplate: {\n path: '@knapsack/renderer-react/prototype-template',\n spec: {\n isInferred: false,\n props: {\n type: 'object',\n properties: {},\n },\n slots: {\n children: { title: 'Children' },\n },\n },\n },\n });\n\n changeCase(str: string): string {\n return pascalCase(str);\n }\n\n createWebpackConfig(): ReturnType<\n KnapsackRendererWebpackBase['createWebpackConfig']\n > {\n const config = super.createWebpackConfig();\n\n config.externals = {\n react: 'React',\n 'react-dom': 'ReactDOM',\n };\n\n return config;\n }\n\n getJsImports(): ReturnType<KnapsackRendererWebpackBase['getJsImports']> {\n const imports = super.getJsImports();\n imports.push(\n {\n type: 'extra',\n importInfo: {\n type: 'default',\n path: this.demoWrapperPath,\n name: 'DemoWrapper',\n },\n },\n {\n type: 'extra',\n importInfo: {\n type: 'default',\n path: join(__dirname, './error-catcher.mjs'),\n name: 'ErrorCatcher',\n },\n },\n );\n return imports;\n }\n\n async prepClientRenderResults({\n usage,\n demoApp,\n imports: xImports,\n renderOptions: { pattern, template, demo },\n }: {\n usage: string;\n demoApp: string;\n imports: KsJsImport[];\n renderOptions: KnapsackRenderParams;\n }): Promise<KnapsackTemplateRendererResults> {\n const extraImportNames = this.getJsImports().flatMap((imp) =>\n imp.type === 'extra' ? [imp.importInfo.name] : [],\n );\n const { imports, isDeclaredVarsUnique, nameCollisions } =\n this.makeKsJsImportsUnique({ imports: xImports });\n\n if (!isDeclaredVarsUnique) {\n log.error(`${nameCollisions.join(', ')} are declared multiple times`, {\n imports,\n });\n }\n\n // import names; i.e. `KsButton`\n const importNames = [\n ...imports.map(({ importInfo: { name } }) => name),\n ...extraImportNames,\n ];\n\n const patternsUsed: {\n patternId: string;\n templateId: string;\n demoId?: string;\n }[] = imports.flatMap((imp) => {\n if (imp.type === 'pattern-template') {\n return [\n {\n patternId: imp.patternId,\n templateId: imp.templateId,\n },\n ];\n }\n if (imp.type === 'pattern-template-demo') {\n return [\n {\n patternId: imp.patternId,\n templateId: imp.templateId,\n demoId: imp.demoId,\n },\n ];\n }\n return [];\n });\n\n const demoWrapperProps: Omit<DemoWrapperProps, 'children'> = {\n patternsUsed,\n pattern,\n template,\n demo,\n };\n const demoWrapperCode = await getUsage({\n templateName: 'DemoWrapper',\n props: demoWrapperProps,\n children: `<DemoApp />`,\n // extraProps,\n });\n\n /**\n * IMPORTANT: this function is stringified and then executed in the browser - it cannot use anything in scope (other functions, vars, etc)\n */\n async function renderReact({\n patterns,\n theExtraImportNames,\n ksGlobal,\n }: {\n patterns: typeof patternsUsed;\n theExtraImportNames: typeof extraImportNames;\n ksGlobal: KsRendererClientGlobal<ReactNode>;\n }): Promise<Record<string, ReactNode>> {\n if (!ksGlobal) {\n throw new Error('\"window.knapsack\" is null');\n }\n const components = await ksGlobal.getAllImports({\n patterns,\n extras: theExtraImportNames.map((name) => ({ name })),\n });\n return components;\n }\n\n let code = `\n\n${renderReact.toString()}\n${renderReact.name}({\n ksGlobal: window.knapsack,\n patterns: ${JSON.stringify(patternsUsed)},\n theExtraImportNames: ${JSON.stringify(extraImportNames)},\n}).then((components) => {\n const { ${importNames.join(', ')} } = components;\n const root = document.getElementById('render-root');\n\n ${demoApp}\n\n const reactDomVersion = parseInt(ReactDOM.version.split('.')[0], 10);\n\n const ReactRendererResult = () => {\n if (reactDomVersion < 17 || ${this.disableReactStrictMode}){\n return (\n <ErrorCatcher>\n ${demoWrapperCode}\n </ErrorCatcher>\n )\n }\n\n return (\n <React.StrictMode>\n <ErrorCatcher>\n ${demoWrapperCode}\n </ErrorCatcher>\n </React.StrictMode>\n )\n };\n\n\n if (reactDomVersion > 17){\n ReactDOM.createRoot(root).render(\n <ReactRendererResult />\n )\n } else {\n ReactDOM.render(\n <ReactRendererResult />,\n root\n );\n }\n}).catch((err) => {\n console.error(err);\n const root = document.getElementById('render-root');\n // Create a new <div> element to contain the error message\n const errorMsgDiv = document.createElement('div');\n // Insert the new <div> element before the existing element\n root.parentNode.insertBefore(errorMsgDiv, root);\n // add error message so users can see it\n errorMsgDiv.innerHTML = '<h1>Component Error</h1><p>' + err.message + '</p>';\n});\n `;\n\n let codeHadError = false;\n let errorHtmlMsg = '';\n\n try {\n code = await this.babelCodeForBrowser({\n code,\n });\n } catch (e) {\n codeHadError = true;\n console.log(code);\n console.log('---original code before babel error ^---');\n console.trace(e.message);\n code = `console.error(${JSON.stringify(e.message)});`;\n errorHtmlMsg = `<pre><code>${e.message}</code></pre>`;\n }\n\n if (!codeHadError) {\n try {\n code = await formatCode({\n contents: code,\n path: 'x.tsx', // doing this to set format language\n });\n } catch (e) {\n codeHadError = true;\n console.log(code);\n console.log('---original code before prettier error ^---');\n console.trace(e.message);\n code = `console.error(${JSON.stringify(e.message)});`;\n errorHtmlMsg = `<pre><code>${e.message}</code></pre>`;\n }\n }\n\n const html = `\n ${this.assets.map((asset) => `<script src=\"${asset}\"></script>`).join('\\n')}\n\n ${this.createHtmlTagsForAssetPaths({\n assets: this.getWebpackAssetPaths(),\n // we need the scripts to finish adding methods to the global knapsack object synchronously before the client-side code runs that is in the <script> tag below\n scriptTagsAreAsync: false,\n })}\n\n <div id=\"render-root\" class=\"knapsack-pattern-direct-parent\" data-dev-note=\"Knapsack React Template Wrapper\"></div>\n <script type=\"application/javascript\">${code}</script>\n${errorHtmlMsg}\n\n `;\n\n return {\n ok: !codeHadError,\n html: await formatCode({\n contents: html,\n path: 'x.html', // doing this to set format language\n }),\n usage,\n templateLanguage: this.language,\n };\n }\n\n async render(\n opt: KnapsackRenderParams,\n ): Promise<KnapsackTemplateRendererResults> {\n if (KnapsackReactRenderer.isTemplateDemo(opt.demo)) {\n // when getting a template demos path sometimes we have a race condition where the client asks for it before the server knows about it.\n // so we try several times in a row to get it\n /** The amount of time in ms to wait between attempts; when we run out of array items, we give up and throw the error */\n const waits = [5, 10, 20, 50, 100, 1000, 1000];\n let templateDemoPath: string;\n let attempt = 0;\n\n while (true) {\n try {\n templateDemoPath = opt.patternManifest.getTemplateDemoAbsolutePath({\n patternId: opt.pattern.id,\n templateId: opt.template.id,\n demoId: opt.demo.id,\n });\n // got it!\n break;\n } catch (e) {\n const waitTime = waits[attempt];\n if (!waitTime) {\n throw new Error(e);\n }\n attempt += 1;\n // eslint-disable-next-line no-await-in-loop\n await sleep(waitTime);\n }\n }\n\n const [templateFileContents, { usage, imports }] = await Promise.all([\n readFile(templateDemoPath),\n this.getUsageAndImports(opt),\n ]);\n const demoApp = await getDemoAppUsage({\n children: usage,\n });\n const results = await this.prepClientRenderResults({\n usage: templateFileContents,\n demoApp,\n imports,\n renderOptions: opt,\n });\n\n return results;\n }\n\n if (KnapsackReactRenderer.isDataDemo(opt.demo)) {\n const { usage, imports } = await this.getUsageAndImports(opt);\n const { code: importCode } = this.createJsImportCodeBlock({\n imports,\n });\n\n const [demoAppUsage, demoApp] = await Promise.all([\n getDemoAppUsage({\n children: usage,\n imports: importCode,\n }),\n getDemoAppUsage({\n children: usage,\n }),\n ]);\n\n return this.prepClientRenderResults({\n demoApp,\n usage: demoAppUsage,\n imports,\n renderOptions: opt,\n });\n }\n }\n\n async getUsageAndImports(opt: KnapsackRenderParams): Promise<{\n usage: string;\n imports: KsJsImport[];\n }> {\n const { pattern, template, patternManifest, demo } = opt;\n if (demo?.type && KnapsackReactRenderer.isDataDemo(demo)) {\n const {\n data: { props, slots, slotsOptionsComputed },\n } = demo;\n\n const importInfo = this.getJsImport({\n patternId: pattern.id,\n templateId: template.id,\n });\n if (!importInfo) {\n throw new Error(\n `Could not find import for pattern-template: ${pattern.id}-${template.id}`,\n );\n }\n const { type, name: templateName } = importInfo.importInfo;\n\n const importInfos: KsJsImport[] = [importInfo];\n const children: string[] = [];\n const extraProps: { key: string; value: string }[] = [];\n\n if (slots) {\n const slotNames = Object.keys(slots);\n const slotUsages = await Promise.all(\n slotNames.map(async (slotName) => {\n const slotItems = slots[slotName];\n const slotItemsUsages = await Promise.all(\n slotItems\n // remove any incomplete item - happens when users are filling out form\n .filter((slotItem) => {\n if (!isSlottedText(slotItem)) {\n if (!slotItem.patternId) return false;\n if (!slotItem.templateId) return false;\n if (isSlottedTemplateDemo(slotItem) && !slotItem.demoId) {\n return false;\n }\n }\n return true;\n })\n .map(async (slotItem) => {\n if (isSlottedText(slotItem)) {\n if (slotItems.length === 1 && slotName !== 'children') {\n // The ` prevents multi-line strings from causing error (even though they don't show a line break)\n return `\\`${slotItem.text}\\``;\n }\n return slotItem.text;\n }\n\n const slotPattern = patternManifest.getPattern(\n slotItem.patternId,\n );\n\n const slotTemplate = slotPattern.templates.find(\n (t) => t.id === slotItem.templateId,\n );\n if (isSlottedTemplateReference(slotItem)) {\n const { usage, imports } = await this.getUsageAndImports({\n pattern: slotPattern,\n template: slotTemplate,\n patternManifest,\n });\n importInfos.push(...imports);\n return usage;\n }\n if (isSlottedTemplateDemo(slotItem)) {\n const { usage, imports } = await this.getUsageAndImports({\n pattern: slotPattern,\n template: slotTemplate,\n demo:\n slotItem.demo ||\n this.patterns.demosById[slotItem.demoId],\n patternManifest,\n });\n importInfos.push(...imports);\n return usage;\n }\n\n throw new Error(\n `Unknown slot item: ${JSON.stringify(slotItem)}`,\n );\n }),\n );\n return {\n slotName,\n slotItemsUsages,\n };\n }),\n );\n\n slotUsages.forEach(({ slotName, slotItemsUsages }) => {\n const slotOptionsComputed = slotsOptionsComputed?.[slotName];\n const { openTag, closeTag } = createSlotOptionsHtmlTags({\n slotOptionsComputed,\n classAttributeName: 'className',\n stylesValueType: 'object',\n });\n if (openTag) {\n if (slotName === 'children') {\n children.push(openTag);\n } else {\n extraProps.push({\n key: slotName,\n value: openTag,\n });\n }\n }\n\n slotItemsUsages.forEach((usage) => {\n if (slotName === 'children') {\n children.push(usage);\n } else {\n extraProps.push({\n key: slotName,\n value: usage,\n });\n }\n });\n\n if (closeTag) {\n if (slotName === 'children') {\n children.push(closeTag);\n } else {\n extraProps.push({\n key: slotName,\n value: closeTag,\n });\n }\n }\n });\n }\n\n const usage = await getUsage({\n templateName,\n props,\n children: children.join('\\n'),\n extraProps,\n });\n\n return {\n usage,\n imports: importInfos,\n };\n }\n\n if (demo?.type && KnapsackReactRenderer.isTemplateDemo(demo)) {\n const importInfo = this.getJsImport({\n patternId: pattern.id,\n templateId: template.id,\n demoId: demo.id,\n });\n if (!importInfo) {\n throw new Error(\n `Could not find import for pattern-template-demo: ${pattern.id}-${template.id}-${demo.id}`,\n );\n }\n const { type, name: templateName } = importInfo.importInfo;\n\n const usage = await getUsage({ templateName });\n\n return {\n usage,\n imports: [importInfo],\n };\n }\n\n if (!demo) {\n const importInfo = this.getJsImport({\n patternId: pattern.id,\n templateId: template.id,\n });\n if (!importInfo) {\n throw new Error(\n `Could not find import for pattern-template: ${pattern.id}-${template.id}`,\n );\n }\n const { type, name: templateName } = importInfo.importInfo;\n\n return {\n /**\n * i.e. Given a React Component, `Button`, normally this would be `<Button>` with a demo, but since there is none this will just be a reference to it: `Button`\n * @see {KsSlotInfo['isTemplateReference']}\n * @see {SlottedTemplate}\n */\n usage: templateName,\n imports: [importInfo],\n };\n }\n\n throw new Error(\n `Unhandled demo type for ${pattern.id}-${template.id}: ${JSON.stringify(\n demo,\n )}`,\n );\n }\n\n async getUsage(opt: KnapsackRenderParams): Promise<string> {\n const { usage } = await this.getUsageAndImports(opt);\n return usage;\n }\n\n inferSpec: KnapsackTemplateRendererBase['inferSpec'] = async ({\n template,\n templatePath,\n }: {\n template: KnapsackPatternTemplate;\n templatePath: string;\n }): Promise<KsTemplateSpec | false> => {\n const spec = await getReactDocs({\n src: template.path,\n exportName: template.alias || 'default',\n resolveFromDir: this.config.data,\n });\n if (spec !== false) {\n const totalProps = Object.keys(spec?.props?.properties || {}).length;\n const totalSlots = Object.keys(spec?.slots || {}).length;\n if (totalProps === 0 && totalSlots === 0) {\n return false;\n }\n }\n return spec;\n };\n\n async watch(opt: Parameters<KnapsackTemplateRendererBase['watch']>[0]) {\n await super.watch(opt);\n knapsackEvents.onPatternTemplateChanged(() => {\n clearInferSpecCache();\n });\n }\n\n getTemplateMeta: KnapsackTemplateRendererBase['getTemplateMeta'] = async ({\n pattern,\n template,\n }) => {\n const files: KnapsackFile[] = [];\n if (template?.spec?.props) {\n const schema = JSON.parse(JSON.stringify(template.spec.props));\n if (template?.spec?.slots) {\n Object.entries(template.spec.slots).forEach(([id, info]) => {\n schema.properties[id] = {\n typeof: 'function',\n tsType: 'React.ReactNode',\n\n description: info.allowedPatternIds\n ? `${info.description}. Only use: ${info.allowedPatternIds.join(\n ', ',\n )}`\n : info.description,\n };\n schema.required = schema.required ?? [];\n if (info.isRequired) schema.required.push(id);\n });\n }\n const typeDefs =\n await KnapsackReactRenderer.convertSchemaToTypeScriptDefs({\n schema,\n title: `${this.changeCase(pattern.id)}Props`,\n // @todo pull in base url\n description: `[Knapsack Docs](http://localhost:3999/pattern/${pattern.id}/${template.id})`,\n patternId: pattern.id,\n templateId: template.id,\n postBanner: `import * as React from 'react';`,\n });\n\n files.push({\n contents: typeDefs,\n encoding: 'utf8',\n path: `${pattern.id}.${template.id}.spec.d.ts`,\n });\n files.push({\n contents: JSON.stringify(schema, null, ' '),\n encoding: 'utf8',\n path: `${pattern.id}.${template.id}.spec.json`,\n });\n }\n return files;\n };\n\n alterTemplateMetaFiles: KnapsackTemplateRendererBase['alterTemplateMetaFiles'] =\n async ({ files, metaDir }) => {\n const imports: string[] = [];\n\n const ext = '.spec.d.ts';\n files.forEach((file) => {\n if (file.path.endsWith(ext)) {\n const { base } = parse(file.path);\n const [patternId, templateId] = base.split('.');\n const isFirst = templateId === this.id;\n const exportName = this.changeCase(`${patternId}Props`);\n const exportNameWithTemplateId = this.changeCase(\n `${patternId}-${templateId}Props`,\n );\n imports.push(\n `export { ${\n isFirst\n ? exportName\n : `${exportName} as ${exportNameWithTemplateId}`\n } } from './${relative(metaDir, file.path).replace('.d.ts', '')}';`,\n );\n }\n });\n\n // extra line at end of file\n imports.push('');\n\n return [\n ...files,\n {\n contents: imports.join('\\n'),\n encoding: 'utf8',\n path: join(metaDir, 'react.d.ts'),\n },\n ];\n };\n\n async getTemplateSuggestions({\n newPath,\n }: Parameters<\n KnapsackTemplateRendererBase['getTemplateSuggestions']\n >[0]): ReturnType<KnapsackTemplateRendererBase['getTemplateSuggestions']> {\n const { data: dataDir } = this.patterns.userConfig;\n const { allTemplateDemos, allTemplates } = this.getMyTemplates();\n const usedSuggestions: TemplateSuggestion[] = [\n ...allTemplateDemos,\n ...allTemplates,\n ].map(({ path, alias }) => {\n return {\n path,\n alias: alias || 'default',\n };\n });\n\n const allPaths = [\n ...new Set([newPath, ...usedSuggestions.map(({ path }) => path)]),\n ];\n const allSuggestions: TemplateSuggestion[] = await Promise.all(\n allPaths.map(async (path): Promise<TemplateSuggestion[]> => {\n if (!path) return [];\n try {\n const { exports, errorMsg } = await getJsExportNames({\n path,\n resolveFromDir: dataDir,\n pkgPathAliases: this.pkgPathAliases,\n });\n if (errorMsg) {\n throw new Error(errorMsg);\n }\n return (\n exports\n // only allow names that start with a capital letter (i.e. React Component names)\n // will exclude helper functions and custom hooks\n .filter((e) => e === 'default' || isFirstLetterCapital(e))\n .map((name) => ({\n alias: name,\n path,\n }))\n );\n } catch (e) {\n // only want this showing with verbose since template suggestions are not critical\n log.verbose(\n `Error getting import names for ${path}: ${e.message}`,\n null,\n this.logPrefix,\n );\n return [];\n }\n }),\n ).then((results) => {\n // sadly `Promise.all` & `.flatMap` just don't work, so this:\n return results.flat();\n });\n\n const suggestions = allSuggestions.filter((s) => {\n return !usedSuggestions.find(\n (us) => us.alias === s.alias && us.path === s.path,\n );\n });\n\n return {\n suggestions,\n };\n }\n}\n","import { log } from '@knapsack/app';\nimport {\n getModulePkgJson,\n readFile,\n copy,\n formatCode,\n resolvePath,\n findUp,\n} from '@knapsack/file-utils';\nimport { removeWrappingDoubleQuotes } from '@knapsack/utils';\nimport path from 'path';\nimport type { Documentation } from 'react-docgen';\nimport type { ComponentDoc, ParserOptions } from 'react-docgen-typescript';\nimport { KsTemplateSpec, isNumberProp, isOptionsProp } from '@knapsack/types';\n\ntype GetSpecParams = {\n src: string;\n exportName?: string;\n};\n\n/**\n * The name of the type, which is usually corresponds to the function name in `React.PropTypes`. However, for types define with `oneOf`, we use `\"enum\"` and for `oneOfType` we use `\"union\"`. If a custom function is provided or the type cannot be resolved to anything of `React.PropTypes`, we use `\"custom\"`.\n */\ntype RdTypeName =\n | 'number'\n | 'string'\n | 'custom'\n | 'union'\n | 'bool'\n | 'node'\n | 'func';\n\n/**\n * Some types accept parameters which define the type in more detail (such as `arrayOf`, `instanceOf`, `oneOf`, etc). Those are stored in `<typeValue>`. The data type of `<typeValue>` depends on the type definition.\n */\ntype RdTypeValue = string;\n\ntype RdProps = {\n [prop: string]: {\n defaultValue?: {\n value: string;\n computed: boolean;\n };\n type: {\n name: RdTypeName;\n value?: RdTypeValue;\n raw?: string;\n };\n flowType?: string;\n tsType?: string;\n description?: string;\n required: boolean;\n };\n};\n\ntype RdResults = {\n /**\n * Name of function, class, or const\n */\n displayName: string;\n description?: string;\n props: RdProps;\n};\n\nfunction renderUsageTemplate({\n templateName,\n attributes,\n children,\n}: {\n templateName: string;\n attributes: string;\n children: string;\n}) {\n return `\n <${templateName}\n ${attributes}\n ${\n children\n ? `>\n ${children}\n </${templateName}>`\n : '/>'\n }\n `;\n}\n\nfunction renderDemoAppTemplate({\n imports,\n children,\n}: {\n imports: string;\n children: string;\n}) {\n return `${imports}\n\nfunction DemoApp() {\n return (\n ${children}\n )\n}\n`;\n}\n\nexport async function getUsage(data: {\n templateName: string;\n props?: Record<string, unknown>;\n children?: string;\n extraProps?: {\n key: string;\n value: string;\n }[];\n format?: boolean;\n}): Promise<string> {\n const props = Object.keys(data.props || {}).map((key) => {\n const value = data.props[key];\n return {\n key,\n value,\n };\n });\n\n const { templateName, children, extraProps = [] } = data;\n if (!templateName) {\n throw new Error(\n `Cannot getUsage of a React Component when no \"templateName\" is provided.`,\n );\n }\n\n const attributes: string[] = props.map(({ key, value }) => {\n switch (typeof value) {\n case 'string':\n // Is this a function like `() => {}` but not a \"sizes\" attribute for an image like `(min-width: 400px) 50vw, 100vw`?\n if (value.startsWith('(') && value.includes('=>')) {\n return `${key}={${value}}`;\n }\n return `${key}=\"${value}\"`;\n case 'boolean':\n return value ? `${key}` : `${key}={${value}}`;\n default:\n return `${key}={${JSON.stringify(value)}}`;\n }\n });\n\n const extraAttributes: string[] = [];\n const slotProps: { [key: string]: string[] } = {};\n\n extraProps.forEach(({ key, value }) => {\n slotProps[key] = slotProps[key] ?? [];\n slotProps[key].push(value);\n });\n\n Object.entries(slotProps).forEach(([key, values]) => {\n const value = values.length === 1 ? values[0] : `<>${values.join('\\n')}</>`;\n extraAttributes.push(`${key}={${value}}`);\n });\n\n const result = renderUsageTemplate({\n templateName,\n attributes: [...attributes, ...extraAttributes].join(' '),\n children,\n });\n return data.format\n ? formatCode({\n contents: result,\n path: 'x.tsx', // doing this to set format language\n })\n .then((code) => code.trim())\n .catch(() => result.trim()) // if format fails, just return the unformatted code\n : result.trim();\n}\n\nexport async function getDemoAppUsage({\n children,\n imports,\n}: {\n children: string;\n imports?: string;\n}): Promise<string> {\n const code = renderDemoAppTemplate({\n children,\n imports,\n });\n return formatCode({\n contents: code,\n path: 'x.tsx', // doing this to set format language\n });\n}\n\nasync function getTypeScriptInfoFromFile({ src }: { src: string }): Promise<{\n info: ComponentDoc[];\n}> {\n const tsConfigPath = await findUp('tsconfig.json', {\n cwd: path.dirname(src),\n });\n const rdTs = await import('react-docgen-typescript');\n const config: ParserOptions = {\n shouldExtractLiteralValuesFromEnum: true,\n savePropValueAsString: true,\n skipChildrenPropWithoutDoc: false,\n // In addition to the ones listed here, which had not strangely included these below ~ https://github.com/styleguidist/react-docgen-typescript/blob/287e7012843cb26fed8f4bd8ee24e462c25a1414/src/parser.ts#L308\n customComponentTypes: ['VoidFunctionComponent', 'VFC'],\n };\n const parse = tsConfigPath\n ? rdTs.withCustomConfig(tsConfigPath, config).parse\n : rdTs.withDefaultConfig(config).parse;\n return {\n info: parse(src),\n };\n}\n\nfunction extractSpecFromTypeScriptInfo({\n info: results,\n exportName,\n}: {\n info: ComponentDoc[];\n exportName: string;\n}): KsTemplateSpec | false {\n try {\n if (!results) return false;\n const spec: KsTemplateSpec = {\n props: {\n $schema: 'http://json-schema.org/draft-07/schema',\n type: 'object',\n required: [],\n properties: {},\n },\n slots: {\n // children: {\n // title: 'children',\n // },\n },\n };\n\n const isDefaultExport = !exportName || exportName === 'default';\n\n // if `isDefaultExport` then we just grab last result since `export default` TENDS to be last. that'll we can do really...\n const result = isDefaultExport\n ? results.pop()\n : results.find((r) => r.displayName === exportName);\n\n // log.inspect({ result, isDefaultExport, exportName }, 'ts result');\n if (!result) return false;\n\n const { displayName } = result;\n // log.inspect({ result }, 'result');\n Object.entries(result?.props || {}).forEach(([propName, propDef]) => {\n const { name, description, defaultValue, required, type, parent } =\n propDef;\n\n // `type.name` can include `| undefined` if tsConfig has `strict: true`. So we need to handle these scenarios:\n // `string` or `string | undefined`\n // `'left' | 'right'` or `'left' | 'right' | undefined`\n const propType = type?.name\n ?.replace('| undefined', '')\n // remove generics. things like `FC<{}>` and `FC<Props>` should become `FC`\n .replace(/<.*/g, '')\n .trim();\n\n switch (propType) {\n case 'string':\n spec.props.properties[propName] = {\n type: 'string',\n };\n break;\n case 'number':\n spec.props.properties[propName] = {\n type: 'number',\n };\n break;\n case 'boolean':\n case 'bool':\n if (defaultValue && 'value' in defaultValue) {\n // comes in as `'true'` - this turns it to `true`\n defaultValue.value = defaultValue.value === 'true';\n }\n spec.props.properties[propName] = {\n type: 'boolean',\n };\n break;\n case 'enum':\n type EnumType = {\n name: string;\n raw: string;\n value: {\n /** Looks like `'\"option1\"'` - beware of string that contains `\"` */\n value: string;\n }[];\n };\n spec.props.properties[propName] = {\n type: 'string',\n // yes there is a double \"value\" & yes it is confusing\n enum: [\n // ensure list is unique\n ...new Set<string>(\n (type as EnumType).value\n .map(({ value }) => removeWrappingDoubleQuotes(value?.trim()))\n .filter(Boolean),\n ),\n ],\n };\n break;\n case 'ReactNode':\n case 'React.ReactNode':\n case 'React.ReactElement':\n case 'ReactElement':\n spec.slots[propName] = {\n title: propName,\n };\n if (description) {\n spec.slots[propName] = {\n ...spec.slots[propName],\n description,\n };\n }\n break;\n case 'VFC':\n case 'FC':\n spec.slots[propName] = {\n title: propName,\n description: description || 'A reference to a component',\n isTemplateReference: true,\n allowOnlyOne: true,\n disallowText: true,\n };\n break;\n default: {\n if (type?.name?.startsWith('(')) {\n // functions\n spec.props.properties[propName] = {\n // description: `\\`${type.name}\\` ${description}`,\n typeof: 'function',\n tsType: propDef?.type?.name,\n };\n } else if (type?.name?.includes('|')) {\n // enums / unions (multi-choice strings)\n // comes in like this: `{ name: '\"option1\" | \"option2\" | \"option3\"' }`\n const options = type.name\n .split('|')\n .map((enumItem) => removeWrappingDoubleQuotes(enumItem.trim()))\n .filter(Boolean);\n\n if (options?.length) {\n spec.props.properties[propName] = {\n type: 'string',\n // ensuring list is unique\n enum: [...new Set(options)],\n };\n }\n } else {\n spec.props.properties[propName] = {\n tsType: propDef?.type?.name,\n };\n }\n }\n }\n\n // assigning info that all would have\n if (spec.props.properties[propName]) {\n if (required) spec.props.required.push(propName);\n if (description && !spec.props.properties[propName].description) {\n spec.props.properties[propName].description = description;\n }\n if (defaultValue && 'value' in defaultValue) {\n if (isNumberProp(spec.props.properties[propName])) {\n spec.props.properties[propName].default = parseFloat(\n defaultValue.value,\n );\n } else {\n spec.props.properties[propName].default =\n removeWrappingDoubleQuotes(defaultValue.value);\n }\n }\n }\n\n // console.log('type', type);\n });\n\n return spec;\n } catch (error) {\n log.verbose(\n 'Could not infer spec from React TypeScript file',\n {\n exportName,\n error,\n },\n 'react renderer',\n );\n return false;\n }\n}\n\nasync function getPropTypesInfoFromFile({ src }: { src: string }): Promise<{\n info: Documentation[];\n}> {\n const reactDocs = await import('react-docgen');\n const { builtinResolvers } = reactDocs;\n const fileSrc = await readFile(src);\n const { FindExportedDefinitionsResolver } = builtinResolvers;\n const results: Documentation[] = reactDocs.parse(fileSrc, {\n resolver: new FindExportedDefinitionsResolver(),\n handlers: null,\n filename: src,\n // babelrc: false,\n });\n return {\n info: results,\n };\n}\n\nfunction extractSpecFromPropTypesInfo({\n info: results,\n exportName,\n}: {\n info: Documentation[];\n exportName: string;\n}): KsTemplateSpec | false {\n try {\n const isDefaultExport = !exportName || exportName === 'default';\n\n // if `isDefaultExport` then we just grab last result since `export default` TENDS to be last. that'll we can do really...\n const result = isDefaultExport\n ? results.pop()\n : results.find((r) => r.displayName === exportName);\n\n // log.inspect(results, 'JSX PropTypes Results');\n // console.log(JSON.stringify(result, null, ' '));\n\n const spec: KsTemplateSpec = {\n isInferred: true,\n props: {\n $schema: 'http://json-schema.org/draft-07/schema',\n type: 'object',\n required: [],\n properties: {},\n },\n slots: {},\n };\n\n Object.entries(result?.props || {}).forEach(([propName, propDef]) => {\n const { required, description, defaultValue } = propDef;\n switch (propDef?.type?.name) {\n case 'string':\n spec.props.properties[propName] = {\n type: 'string',\n };\n break;\n case 'func':\n spec.props.properties[propName] = {\n type: 'string',\n };\n break;\n case 'bool':\n spec.props.properties[propName] = {\n type: 'boolean',\n };\n break;\n case 'node':\n spec.slots[propName] = {\n title: propName,\n description,\n };\n }\n\n // assigning info that all would have\n if (spec.props.properties[propName]) {\n if (required) spec.props.required.push(propName);\n if (description && !spec.props.properties[propName].description) {\n spec.props.properties[propName].description = description;\n }\n if (defaultValue && 'value' in defaultValue) {\n spec.props.properties[propName].default =\n typeof defaultValue.value === 'string'\n ? removeWrappingDoubleQuotes(defaultValue.value)\n : defaultValue.value;\n }\n }\n });\n\n return spec;\n } catch (error) {\n log.verbose(\n 'Could not infer spec from React PropTypes',\n {\n exportName,\n error,\n },\n 'react renderer',\n );\n return false;\n }\n}\n\nfunction cleanUpSpec({\n spec,\n}: {\n spec: KsTemplateSpec | false;\n}): KsTemplateSpec | false {\n if (spec === false) return spec;\n // ok to mutate b/c spec was just created before passing in here\n Object.entries(spec?.props?.properties || {}).forEach(([propName, prop]) => {\n if (isOptionsProp(prop)) {\n // If the default is not in the enum, it should not be there\n // OR the enum is wrong\n if (!prop.enum.includes(prop.default)) {\n prop.default = undefined;\n }\n }\n });\n\n return spec;\n}\n\nasync function getReactModuleInfoUncached({\n src: unknownSrc,\n resolveFromDir,\n}: {\n src: string;\n resolveFromDir: string;\n}): Promise<\n | {\n type: 'typescript';\n info: ComponentDoc[];\n }\n | {\n type: 'propTypes';\n info: Documentation[];\n }\n | {\n type: 'unknown';\n }\n> {\n const typesInfo = await resolvePath({\n path: unknownSrc,\n resolveFromDir,\n resolveType: 'types',\n });\n if (typesInfo.exists) {\n const typeScriptInfo = await getTypeScriptInfoFromFile({\n src: typesInfo.absolutePath,\n });\n if (typeScriptInfo) {\n return {\n type: 'typescript',\n info: typeScriptInfo.info,\n };\n }\n }\n const jsInfo = await resolvePath({\n path: unknownSrc,\n resolveFromDir,\n });\n if (!jsInfo.exists) return { type: 'unknown' };\n const { ext } = path.parse(jsInfo.absolutePath);\n switch (ext) {\n case '.jsx': {\n const propTypesInfo = await getPropTypesInfoFromFile({\n src: jsInfo.absolutePath,\n });\n return {\n type: 'propTypes',\n info: propTypesInfo.info,\n };\n }\n case '.ts':\n case '.tsx': {\n const typeScriptInfo = await getTypeScriptInfoFromFile({\n src: jsInfo.absolutePath,\n });\n return {\n type: 'typescript',\n info: typeScriptInfo.info,\n };\n }\n default:\n return {\n type: 'unknown',\n };\n }\n}\n\nconst getReactModuleInfoCache = new Map<\n string,\n ReturnType<typeof getReactModuleInfoUncached>\n>();\nexport const clearInferSpecCache = () => {\n log.info(`Clearing React TypeScript inferSpec cache...`);\n getReactModuleInfoCache.clear();\n};\nasync function getReactModuleInfo(\n args: Parameters<typeof getReactModuleInfoUncached>[0],\n) {\n const cacheKey = JSON.stringify(args);\n if (!getReactModuleInfoCache.has(cacheKey)) {\n getReactModuleInfoCache.set(cacheKey, getReactModuleInfoUncached(args));\n }\n return getReactModuleInfoCache.get(cacheKey);\n}\n\nasync function getReactSpec({\n src,\n exportName,\n resolveFromDir,\n}: GetSpecParams & {\n resolveFromDir: string;\n}): Promise<KsTemplateSpec | false> {\n const reactModuleInfo = await getReactModuleInfo({\n src,\n resolveFromDir,\n });\n switch (reactModuleInfo.type) {\n case 'typescript':\n return extractSpecFromTypeScriptInfo({\n info: reactModuleInfo.info,\n exportName,\n });\n case 'propTypes':\n return extractSpecFromPropTypesInfo({\n info: reactModuleInfo.info,\n exportName,\n });\n case 'unknown':\n default:\n return false;\n }\n}\n\nexport async function getReactDocs(\n opt: GetSpecParams & {\n resolveFromDir: string;\n },\n): Promise<KsTemplateSpec | false> {\n return cleanUpSpec({\n spec: await getReactSpec(opt),\n });\n}\n\nexport async function copyReactAssets(\n distDirAbsolute: string,\n publicPath: string,\n): Promise<string[]> {\n try {\n const { version: reactVersion } = getModulePkgJson('react');\n const { version: reactDomVersion } = getModulePkgJson('react-dom');\n\n // switch to resolving the root NPM package dir vs the entire file via require.resolve\n // workaround due to NPM packages using the exports field; prevents these from being auto-resolved\n const reactRoot = path.dirname(\n require.resolve('react', {\n paths: [process.cwd()],\n }),\n );\n const reactDomRoot = path.dirname(\n require.resolve('react-dom', {\n paths: [process.cwd()],\n }),\n );\n await Promise.all([\n copy(\n path.join(reactRoot, 'umd/react.development.js'),\n path.join(distDirAbsolute, `react.development.${reactVersion}.js`),\n ),\n copy(\n path.join(reactRoot, 'umd/react.production.min.js'),\n path.join(distDirAbsolute, `react.production.min.${reactVersion}.js`),\n ),\n copy(\n path.join(reactDomRoot, 'umd/react-dom.production.min.js'),\n path.join(\n distDirAbsolute,\n `react-dom.production.min.${reactDomVersion}.js`,\n ),\n ),\n copy(\n path.join(reactDomRoot, 'umd/react-dom.development.js'),\n path.join(\n distDirAbsolute,\n `react-dom.development.${reactDomVersion}.js`,\n ),\n ),\n ]);\n const reactFileSuffix =\n process.env.NODE_ENV === 'production' ? 'production.min' : 'development';\n\n return [\n path.join(publicPath, `react.${reactFileSuffix}.${reactVersion}.js`),\n path.join(\n publicPath,\n `react-dom.${reactFileSuffix}.${reactDomVersion}.js`,\n ),\n ];\n } catch (error) {\n log.warn(\n 'Error trying to copy \"react\" and \"react-dom\" JS files, are they installed? We want to use your exact versions.',\n error,\n 'templateRenderer:react',\n );\n process.exit(1);\n }\n}\n","import { getJsExportNames } from '@knapsack/file-utils';\nimport { createCreator, tasks, Task } from '@knapsack/creator-utils';\nimport {\n readKsPatternConfigs,\n writeKsPatternConfig,\n readKsNavConfig,\n addKsNavItems,\n writeDemo,\n} from '@knapsack/ks-file-utils';\nimport { Demo, KnapsackPattern } from '@knapsack/types';\nimport { makeShortId } from '@knapsack/utils';\n\nfunction isCapitalLetter(char: string): boolean {\n return char.toUpperCase() === char;\n}\n\nfunction startsWithCapitalLetter(str: string): boolean {\n return isCapitalLetter(str[0]);\n}\n\nfunction createPatternData({\n importName,\n id,\n title = importName,\n pkgPath,\n initialDemoId,\n}: {\n importName: string;\n id: string;\n title?: string;\n pkgPath: string;\n initialDemoId: string;\n}): KnapsackPattern {\n return {\n id,\n title,\n description: '',\n statuses: {\n main: 'ready',\n },\n templates: [\n {\n id: 'react',\n title: 'react',\n path: pkgPath,\n alias: importName,\n templateLanguageId: 'react',\n spec: {\n isInferred: true,\n },\n demoIds: [initialDemoId],\n blockIds: [],\n },\n ],\n tabs: [\n {\n type: 'template',\n id: 'react',\n },\n ],\n subPages: [],\n };\n}\n\nexport const createReactPattern = createCreator({\n id: 'react-patterns',\n title: 'React Ks Patterns',\n description: 'Adds React templates as Knapsack Patterns',\n getQuestions: async () => ({\n pkgPath: {\n type: 'text',\n title: 'Package path',\n },\n importPrefix: {\n type: 'text',\n title: 'Import Prefix to Remove',\n },\n }),\n getTasks: async ({ answers: { pkgPath, importPrefix = '' }, config }) => {\n const dataDir = config.dest;\n const currentPatterns = await readKsPatternConfigs({\n dataDir,\n });\n const currentReactPatternsImportNames = currentPatterns.reduce(\n (cur, pattern) => {\n const reactTemplates =\n pattern.templates?.filter((t) => t.templateLanguageId === 'react') ??\n [];\n cur.push(...reactTemplates.map((t) => t.alias));\n return cur;\n },\n [] as string[],\n );\n const { exports: allImports } = await getJsExportNames({\n path: pkgPath,\n });\n return [\n {\n title: 'Pick Imports to add',\n task: (_, task) =>\n tasks.runSubCreator({\n task,\n config,\n creator: createCreator({\n id: 'react-pattern-import-names',\n getQuestions: async () => ({\n importNames: {\n type: 'choices',\n choices: allImports\n .filter(\n (importName) =>\n startsWithCapitalLetter(importName) &&\n !currentReactPatternsImportNames.includes(importName),\n )\n .map((importName) => ({\n value: importName,\n })),\n },\n }),\n getTasks: async ({ answers: { importNames } }) => {\n const patterns = importNames.map((importName) => ({\n importName,\n patternId: importName.startsWith(importPrefix)\n ? importName.slice(importPrefix.length).toLowerCase()\n : importName.toLowerCase(),\n }));\n return [\n ...patterns.map(\n ({ importName, patternId }): Task => ({\n title: `Add ${importName} React Template`,\n task: async (__, subTask) => {\n const initialDemo: Demo = {\n type: 'data',\n id: makeShortId(),\n title: 'Main',\n patternId,\n templateId: 'react',\n data: {\n props: {},\n slots: {},\n },\n };\n const pattern = createPatternData({\n id: patternId,\n importName,\n pkgPath,\n initialDemoId: initialDemo.id,\n });\n\n await Promise.all([\n writeDemo({\n dataDir,\n demo: initialDemo,\n }),\n writeKsPatternConfig({\n dataDir,\n patternId,\n data: pattern,\n }),\n ]);\n },\n }),\n ),\n {\n title: `Updating Nav`,\n task: async (__, subTask) => {\n const { byId } = await readKsNavConfig({\n dataDir,\n });\n // attempt to find a nav group to put patterns under\n const componentsGroup = Object.values(byId).find(\n ({ path, name, id }) => {\n // we only want groups (i.e. not pages or patterns)\n if (path) return false;\n if (name.toLowerCase() === 'patterns') return true;\n if (name.toLowerCase() === 'components') return true;\n return false;\n },\n );\n await addKsNavItems({\n dataDir,\n navItems: patterns.map(({ patternId }) => ({\n navId: patternId,\n navPath: `/pattern/${patternId}`,\n navParent: componentsGroup?.id || 'root',\n })),\n });\n },\n },\n ];\n },\n }),\n }),\n },\n ];\n },\n});\n"],"mappings":"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","names":["log","getJsExportNames","readFile","formatCode","path","path","parse","path","log","formatCode","readFile","usage","path","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.68.
|
4
|
+
"version": "4.68.2--canary.65c06ca.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.68.
|
35
|
-
"@knapsack/creator-utils": "4.68.
|
36
|
-
"@knapsack/file-utils": "4.68.
|
37
|
-
"@knapsack/ks-file-utils": "4.68.
|
38
|
-
"@knapsack/renderer-webpack-base": "4.68.
|
39
|
-
"@knapsack/types": "4.68.
|
40
|
-
"@knapsack/utils": "4.68.
|
34
|
+
"@knapsack/app": "4.68.2--canary.65c06ca.0",
|
35
|
+
"@knapsack/creator-utils": "4.68.2--canary.65c06ca.0",
|
36
|
+
"@knapsack/file-utils": "4.68.2--canary.65c06ca.0",
|
37
|
+
"@knapsack/ks-file-utils": "4.68.2--canary.65c06ca.0",
|
38
|
+
"@knapsack/renderer-webpack-base": "4.68.2--canary.65c06ca.0",
|
39
|
+
"@knapsack/types": "4.68.2--canary.65c06ca.0",
|
40
|
+
"@knapsack/utils": "4.68.2--canary.65c06ca.0",
|
41
41
|
"react": "^18.3.1",
|
42
42
|
"react-docgen": "^6.0.4",
|
43
43
|
"react-docgen-typescript": "^2.2.2",
|
@@ -46,13 +46,13 @@
|
|
46
46
|
"typescript": "^5.5.3"
|
47
47
|
},
|
48
48
|
"devDependencies": {
|
49
|
-
"@knapsack/eslint-config-starter": "4.68.
|
50
|
-
"@knapsack/sandbox-components": "4.68.
|
51
|
-
"@knapsack/test-ava": "4.68.
|
52
|
-
"@knapsack/typescript-config-starter": "4.68.
|
49
|
+
"@knapsack/eslint-config-starter": "4.68.2--canary.65c06ca.0",
|
50
|
+
"@knapsack/sandbox-components": "4.68.2--canary.65c06ca.0",
|
51
|
+
"@knapsack/test-ava": "4.68.2--canary.65c06ca.0",
|
52
|
+
"@knapsack/typescript-config-starter": "4.68.2--canary.65c06ca.0",
|
53
53
|
"@mui/material": "^5.15.18",
|
54
54
|
"@mui/x-data-grid": "^6.19.11",
|
55
|
-
"@types/node": "^20.
|
55
|
+
"@types/node": "^20.16.1",
|
56
56
|
"@types/react": "^18.3.3",
|
57
57
|
"@types/webpack": "^5.28.5",
|
58
58
|
"ava": "^6.1.3",
|
@@ -68,5 +68,5 @@
|
|
68
68
|
"directory": "apps/client/renderers/renderer-react",
|
69
69
|
"type": "git"
|
70
70
|
},
|
71
|
-
"gitHead": "
|
71
|
+
"gitHead": "65c06ca3ba9652c9fee8042352fbf18423ba4852"
|
72
72
|
}
|