@frontmcp/nx 1.10.9-rc.1 → 1.10.9-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/executors/build/build.impl.js +0 -1
  2. package/executors/build/schema.js +0 -1
  3. package/executors/build-exec/build-exec.impl.js +0 -1
  4. package/executors/build-exec/schema.js +0 -1
  5. package/executors/deploy/deploy.impl.js +0 -1
  6. package/executors/deploy/schema.js +0 -1
  7. package/executors/dev/dev.impl.js +0 -1
  8. package/executors/dev/schema.js +0 -1
  9. package/executors/executor-context.js +0 -1
  10. package/executors/frontmcp-cli.js +1 -2
  11. package/executors/inspector/inspector.impl.js +0 -1
  12. package/executors/inspector/schema.js +0 -1
  13. package/executors/serve/schema.js +0 -1
  14. package/executors/serve/serve.impl.js +0 -1
  15. package/executors/test/schema.js +0 -1
  16. package/executors/test/test.impl.js +0 -1
  17. package/generators/adapter/adapter.js +0 -1
  18. package/generators/adapter/schema.js +0 -1
  19. package/generators/agent/agent.js +0 -1
  20. package/generators/agent/schema.js +0 -1
  21. package/generators/app/app.js +0 -1
  22. package/generators/app/lib/index.js +0 -1
  23. package/generators/app/lib/normalize-options.js +0 -1
  24. package/generators/app/schema.js +0 -1
  25. package/generators/auth-provider/auth-provider.js +0 -1
  26. package/generators/auth-provider/schema.js +0 -1
  27. package/generators/flow/flow.js +0 -1
  28. package/generators/flow/schema.js +0 -1
  29. package/generators/init/init.js +1 -2
  30. package/generators/init/schema.js +0 -1
  31. package/generators/job/job.js +0 -1
  32. package/generators/job/schema.js +0 -1
  33. package/generators/lib/lib/index.js +0 -1
  34. package/generators/lib/lib/normalize-options.js +1 -2
  35. package/generators/lib/lib.js +0 -1
  36. package/generators/lib/schema.js +0 -1
  37. package/generators/plugin/plugin.js +0 -1
  38. package/generators/plugin/schema.js +0 -1
  39. package/generators/prompt/prompt.js +0 -1
  40. package/generators/prompt/schema.js +0 -1
  41. package/generators/provider/provider.js +0 -1
  42. package/generators/provider/schema.js +0 -1
  43. package/generators/resource/resource.js +0 -1
  44. package/generators/resource/schema.js +0 -1
  45. package/generators/server/lib/index.js +0 -1
  46. package/generators/server/lib/normalize-options.js +0 -1
  47. package/generators/server/schema.js +0 -1
  48. package/generators/server/server.js +0 -1
  49. package/generators/skill/schema.js +0 -1
  50. package/generators/skill/skill.js +0 -1
  51. package/generators/skill-dir/schema.js +0 -1
  52. package/generators/skill-dir/skill-dir.js +0 -1
  53. package/generators/tool/schema.js +0 -1
  54. package/generators/tool/tool.js +0 -1
  55. package/generators/ui-component/schema.js +0 -1
  56. package/generators/ui-component/ui-component.js +0 -1
  57. package/generators/ui-page/schema.js +0 -1
  58. package/generators/ui-page/ui-page.js +0 -1
  59. package/generators/ui-shared/add-ui-entry.js +2 -3
  60. package/generators/ui-shared/ensure-ui-package.js +1 -2
  61. package/generators/ui-shell/schema.js +0 -1
  62. package/generators/ui-shell/ui-shell.js +0 -1
  63. package/generators/workflow/schema.js +0 -1
  64. package/generators/workflow/workflow.js +0 -1
  65. package/generators/workspace/lib/index.js +0 -1
  66. package/generators/workspace/lib/normalize-options.js +0 -1
  67. package/generators/workspace/schema.js +0 -1
  68. package/generators/workspace/workspace.js +1 -2
  69. package/index.js +0 -1
  70. package/package.json +2 -2
  71. package/utils/add-dependencies.js +0 -1
  72. package/utils/names.js +0 -1
  73. package/utils/normalize-options.js +0 -1
  74. package/utils/package-manager.js +0 -1
  75. package/utils/project-paths.js +1 -2
  76. package/utils/versions.js +0 -1
  77. package/executors/build/build.impl.js.map +0 -1
  78. package/executors/build/schema.js.map +0 -1
  79. package/executors/build-exec/build-exec.impl.js.map +0 -1
  80. package/executors/build-exec/schema.js.map +0 -1
  81. package/executors/deploy/deploy.impl.js.map +0 -1
  82. package/executors/deploy/schema.js.map +0 -1
  83. package/executors/dev/dev.impl.js.map +0 -1
  84. package/executors/dev/schema.js.map +0 -1
  85. package/executors/executor-context.js.map +0 -1
  86. package/executors/frontmcp-cli.js.map +0 -1
  87. package/executors/inspector/inspector.impl.js.map +0 -1
  88. package/executors/inspector/schema.js.map +0 -1
  89. package/executors/serve/schema.js.map +0 -1
  90. package/executors/serve/serve.impl.js.map +0 -1
  91. package/executors/test/schema.js.map +0 -1
  92. package/executors/test/test.impl.js.map +0 -1
  93. package/generators/adapter/adapter.js.map +0 -1
  94. package/generators/adapter/schema.js.map +0 -1
  95. package/generators/agent/agent.js.map +0 -1
  96. package/generators/agent/schema.js.map +0 -1
  97. package/generators/app/app.js.map +0 -1
  98. package/generators/app/lib/index.js.map +0 -1
  99. package/generators/app/lib/normalize-options.js.map +0 -1
  100. package/generators/app/schema.js.map +0 -1
  101. package/generators/auth-provider/auth-provider.js.map +0 -1
  102. package/generators/auth-provider/schema.js.map +0 -1
  103. package/generators/flow/flow.js.map +0 -1
  104. package/generators/flow/schema.js.map +0 -1
  105. package/generators/init/init.js.map +0 -1
  106. package/generators/init/schema.js.map +0 -1
  107. package/generators/job/job.js.map +0 -1
  108. package/generators/job/schema.js.map +0 -1
  109. package/generators/lib/lib/index.js.map +0 -1
  110. package/generators/lib/lib/normalize-options.js.map +0 -1
  111. package/generators/lib/lib.js.map +0 -1
  112. package/generators/lib/schema.js.map +0 -1
  113. package/generators/plugin/plugin.js.map +0 -1
  114. package/generators/plugin/schema.js.map +0 -1
  115. package/generators/prompt/prompt.js.map +0 -1
  116. package/generators/prompt/schema.js.map +0 -1
  117. package/generators/provider/provider.js.map +0 -1
  118. package/generators/provider/schema.js.map +0 -1
  119. package/generators/resource/resource.js.map +0 -1
  120. package/generators/resource/schema.js.map +0 -1
  121. package/generators/server/lib/index.js.map +0 -1
  122. package/generators/server/lib/normalize-options.js.map +0 -1
  123. package/generators/server/schema.js.map +0 -1
  124. package/generators/server/server.js.map +0 -1
  125. package/generators/skill/schema.js.map +0 -1
  126. package/generators/skill/skill.js.map +0 -1
  127. package/generators/skill-dir/schema.js.map +0 -1
  128. package/generators/skill-dir/skill-dir.js.map +0 -1
  129. package/generators/tool/schema.js.map +0 -1
  130. package/generators/tool/tool.js.map +0 -1
  131. package/generators/ui-component/schema.js.map +0 -1
  132. package/generators/ui-component/ui-component.js.map +0 -1
  133. package/generators/ui-page/schema.js.map +0 -1
  134. package/generators/ui-page/ui-page.js.map +0 -1
  135. package/generators/ui-shared/add-ui-entry.js.map +0 -1
  136. package/generators/ui-shared/ensure-ui-package.js.map +0 -1
  137. package/generators/ui-shell/schema.js.map +0 -1
  138. package/generators/ui-shell/ui-shell.js.map +0 -1
  139. package/generators/workflow/schema.js.map +0 -1
  140. package/generators/workflow/workflow.js.map +0 -1
  141. package/generators/workspace/lib/index.js.map +0 -1
  142. package/generators/workspace/lib/normalize-options.js.map +0 -1
  143. package/generators/workspace/schema.js.map +0 -1
  144. package/generators/workspace/workspace.js.map +0 -1
  145. package/index.js.map +0 -1
  146. package/utils/add-dependencies.js.map +0 -1
  147. package/utils/names.js.map +0 -1
  148. package/utils/normalize-options.js.map +0 -1
  149. package/utils/package-manager.js.map +0 -1
  150. package/utils/project-paths.js.map +0 -1
  151. package/utils/versions.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/executors/serve/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface ServeExecutorSchema {\n entry?: string;\n port?: number;\n maxRestarts?: number;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve.impl.js","sourceRoot":"","sources":["../../../../src/executors/serve/serve.impl.ts"],"names":[],"mappings":";;AAIA,gCAsBC;AAzBD,wDAAuF;AAGxE,KAAK,SAAS,CAAC,CAAC,aAAa,CAC1C,OAA4B,EAC5B,OAAwB;IAExB,MAAM,IAAI,GAAa,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,OAAO,CAAC,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACxD,IAAI,OAAO,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAA,4BAAU,EAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAEhG,MAAM,KAAK,GAAG,IAAA,+BAAa,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACxB,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,IAAA,6BAAW,EAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;IACtD,CAAC;YAAS,CAAC;QACT,IAAA,2BAAS,EAAC,KAAK,CAAC,CAAC;IACnB,CAAC;AACH,CAAC","sourcesContent":["import type { ExecutorContext } from '../executor-context.js';\nimport { spawnFrontmcp, stopChild, toAbsolute, waitForExit } from '../frontmcp-cli.js';\nimport type { ServeExecutorSchema } from './schema.js';\n\nexport default async function* serveExecutor(\n options: ServeExecutorSchema,\n context: ExecutorContext,\n): AsyncGenerator<{ success: boolean }> {\n const args: string[] = ['start'];\n if (context.projectName) args.push(context.projectName);\n if (options.entry) args.push('--entry', toAbsolute(context, options.entry));\n if (options.port !== undefined) args.push('--port', String(options.port));\n if (options.maxRestarts !== undefined) args.push('--max-restarts', String(options.maxRestarts));\n\n const child = spawnFrontmcp(context, args);\n if (!child) {\n yield { success: false };\n return;\n }\n\n try {\n yield { success: true };\n yield { success: (await waitForExit(child)) === 0 };\n } finally {\n stopChild(child);\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/executors/test/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface TestExecutorSchema {\n runInBand?: boolean;\n watch?: boolean;\n coverage?: boolean;\n verbose?: boolean;\n timeout?: number;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"test.impl.js","sourceRoot":"","sources":["../../../../src/executors/test/test.impl.ts"],"names":[],"mappings":";;AAIA,+BAWC;AAdD,wDAAiD;AAGlC,KAAK,UAAU,YAAY,CACxC,OAA2B,EAC3B,OAAwB;IAExB,MAAM,IAAI,GAAa,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,OAAO,CAAC,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAChD,IAAI,OAAO,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,OAAO,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,OAAO,CAAC,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACrE,OAAO,IAAA,6BAAW,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC","sourcesContent":["import type { ExecutorContext } from '../executor-context.js';\nimport { runFrontmcp } from '../frontmcp-cli.js';\nimport type { TestExecutorSchema } from './schema.js';\n\nexport default async function testExecutor(\n options: TestExecutorSchema,\n context: ExecutorContext,\n): Promise<{ success: boolean }> {\n const args: string[] = ['test'];\n if (options.runInBand) args.push('--runInBand');\n if (options.watch) args.push('--watch');\n if (options.coverage) args.push('--coverage');\n if (options.verbose) args.push('--verbose');\n if (options.timeout) args.push('--timeout', String(options.timeout));\n return runFrontmcp(context, args);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/generators/adapter/adapter.ts"],"names":[],"mappings":";;AAKA,4CAWC;AAhBD,uCAA2F;AAC3F,+BAA4B;AAE5B,2EAA6E;AAEtE,KAAK,UAAU,gBAAgB,CAAC,IAAU,EAAE,MAA8B;IAC/E,MAAM,OAAO,GAAG,IAAA,gDAAyB,EAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAEpE,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE;QAC/D,GAAG,OAAO;QACV,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,kBAAe,gBAAgB,CAAC","sourcesContent":["import { type Tree, formatFiles, generateFiles, type GeneratorCallback } from '@nx/devkit';\nimport { join } from 'path';\nimport type { AdapterGeneratorSchema } from './schema.js';\nimport { normalizePrimitiveOptions } from '../../utils/normalize-options.js';\n\nexport async function adapterGenerator(tree: Tree, schema: AdapterGeneratorSchema): Promise<GeneratorCallback | void> {\n const options = normalizePrimitiveOptions(tree, schema, 'adapters');\n\n generateFiles(tree, join(__dirname, 'files'), options.directory, {\n ...options,\n tmpl: '',\n });\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n}\n\nexport default adapterGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/adapter/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface AdapterGeneratorSchema {\n name: string;\n project: string;\n directory?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../../src/generators/agent/agent.ts"],"names":[],"mappings":";;AAQA,wCAiCC;AAzCD,+BAAsC;AAEtC,uCAAkG;AAElG,mDAAkD;AAClD,2EAA6E;AAGtE,KAAK,UAAU,cAAc,CAAC,IAAU,EAAE,MAA4B;IAC3E,MAAM,OAAO,GAAG,IAAA,gDAAyB,EAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;SAClC,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAA,cAAK,EAAC,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAA,qBAAU,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACxE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SACtF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,UAAU,GAAG,IAAA,eAAQ,EAAC,OAAO,CAAC,SAAS,EAAE,IAAA,WAAI,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC;aACjF,KAAK,CAAC,IAAI,CAAC;aACX,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,OAAO;YACL,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;SACxE,CAAC;IACJ,CAAC,CAAC,CAAC;IACL,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAE7D,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE;QAC/D,GAAG,OAAO;QACV,KAAK;QACL,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;QACjD,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,gBAAgB;QAC/D,QAAQ;QACR,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,kBAAe,cAAc,CAAC","sourcesContent":["import { join, relative } from 'path';\n\nimport { formatFiles, generateFiles, names, type GeneratorCallback, type Tree } from '@nx/devkit';\n\nimport { toFileName } from '../../utils/names.js';\nimport { normalizePrimitiveOptions } from '../../utils/normalize-options.js';\nimport type { AgentGeneratorSchema } from './schema.js';\n\nexport async function agentGenerator(tree: Tree, schema: AgentGeneratorSchema): Promise<GeneratorCallback | void> {\n const options = normalizePrimitiveOptions(tree, schema, 'agents');\n const model = schema.model ?? 'gpt-4';\n const toolsDir = join(options.projectSourceRoot, 'tools');\n const toolRefs = (schema.tools ?? '')\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean)\n .map((t) => ({ className: names(t).className, fileName: toFileName(t) }))\n .filter((t, i, all) => all.findIndex((other) => other.className === t.className) === i)\n .map((t) => {\n const importPath = relative(options.directory, join(toolsDir, `${t.fileName}.tool`))\n .split('\\\\')\n .join('/');\n return {\n className: t.className,\n importPath: importPath.startsWith('.') ? importPath : `./${importPath}`,\n };\n });\n const isAnthropic = model.toLowerCase().startsWith('claude');\n\n generateFiles(tree, join(__dirname, 'files'), options.directory, {\n ...options,\n model,\n llmProvider: isAnthropic ? 'anthropic' : 'openai',\n apiKeyEnv: isAnthropic ? 'ANTHROPIC_API_KEY' : 'OPENAI_API_KEY',\n toolRefs,\n tmpl: '',\n });\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n}\n\nexport default agentGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/agent/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface AgentGeneratorSchema {\n name: string;\n project: string;\n model?: string;\n tools?: string;\n directory?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../src/generators/app/app.ts"],"names":[],"mappings":";;AAOA,oCAEC;AATD,+BAA4B;AAE5B,uCAA2F;AAE3F,6CAAkD;AAG3C,KAAK,UAAU,YAAY,CAAC,IAAU,EAAE,MAA0B;IACvE,OAAO,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAAU,EAAE,MAA0B;IACxE,MAAM,OAAO,GAAG,IAAA,2BAAgB,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE/C,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE;QAChE,GAAG,OAAO;QACV,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,kBAAe,YAAY,CAAC","sourcesContent":["import { join } from 'path';\n\nimport { formatFiles, generateFiles, type GeneratorCallback, type Tree } from '@nx/devkit';\n\nimport { normalizeOptions } from './lib/index.js';\nimport type { AppGeneratorSchema } from './schema.js';\n\nexport async function appGenerator(tree: Tree, schema: AppGeneratorSchema): Promise<GeneratorCallback | void> {\n return appGeneratorInternal(tree, schema);\n}\n\nasync function appGeneratorInternal(tree: Tree, schema: AppGeneratorSchema): Promise<GeneratorCallback | void> {\n const options = normalizeOptions(tree, schema);\n\n generateFiles(tree, join(__dirname, 'files'), options.outputRoot, {\n ...options,\n tmpl: '',\n });\n\n if (!options.skipFormat) {\n await formatFiles(tree);\n }\n}\n\nexport default appGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/generators/app/lib/index.ts"],"names":[],"mappings":";;;AAAA,+DAA0D;AAAjD,wHAAA,gBAAgB,OAAA","sourcesContent":["export { normalizeOptions } from './normalize-options.js';\nexport type { NormalizedAppOptions } from './normalize-options.js';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"normalize-options.js","sourceRoot":"","sources":["../../../../../src/generators/app/lib/normalize-options.ts"],"names":[],"mappings":";;AAsBA,4CAmBC;AAzCD,uCAAiE;AAEjE,sEAAyH;AAoBzH,SAAgB,gBAAgB,CAAC,IAAU,EAAE,MAA0B;IACrE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAA,cAAK,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,IAAI,IAAA,0BAAiB,EAAC,MAAM,CAAC,aAAa,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvG,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAA,sCAAmB,EAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACtF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAE9F,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,QAAQ;QACrB,WAAW;QACX,UAAU;QACV,MAAM;QACN,GAAG,IAAA,sCAAmB,EAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;QAClD,SAAS;QACT,QAAQ;QACR,YAAY;QACZ,UAAU;QACV,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK;KACvC,CAAC;AACJ,CAAC","sourcesContent":["import { type Tree, names, joinPathFragments } from '@nx/devkit';\nimport type { AppGeneratorSchema } from '../schema.js';\nimport { getProjectTsOptions, resolveProjectPaths, type ProjectModuleResolution } from '../../../utils/project-paths.js';\n\nexport interface NormalizedAppOptions {\n name: string;\n projectName: string;\n /** Project root relative to the Nx workspace root. */\n projectRoot: string;\n /** Where the files are written, relative to the tree root. */\n outputRoot: string;\n /** Path from the project back to the workspace root, e.g. `../../`. */\n offset: string;\n moduleResolution: ProjectModuleResolution;\n resetCustomConditions: boolean;\n className: string;\n fileName: string;\n propertyName: string;\n parsedTags: string[];\n skipFormat: boolean;\n}\n\nexport function normalizeOptions(tree: Tree, schema: AppGeneratorSchema): NormalizedAppOptions {\n const { className, fileName, propertyName } = names(schema.name);\n const outputRoot = schema.directory ?? joinPathFragments(schema.workspaceRoot ?? '', 'apps', fileName);\n const { projectRoot, offset } = resolveProjectPaths(outputRoot, schema.workspaceRoot);\n const parsedTags = schema.tags ? schema.tags.split(',').map((t) => t.trim()) : ['scope:apps'];\n\n return {\n name: schema.name,\n projectName: fileName,\n projectRoot,\n outputRoot,\n offset,\n ...getProjectTsOptions(tree, schema.workspaceRoot),\n className,\n fileName,\n propertyName,\n parsedTags,\n skipFormat: schema.skipFormat ?? false,\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/app/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface AppGeneratorSchema {\n name: string;\n directory?: string;\n /** Set when the tree root is above the Nx workspace (the `workspace` generator scaffolds into `<name>/`). */\n workspaceRoot?: string;\n tags?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-provider.js","sourceRoot":"","sources":["../../../../src/generators/auth-provider/auth-provider.ts"],"names":[],"mappings":";;AAKA,sDAkBC;AAvBD,uCAAkG;AAClG,+BAA4B;AAE5B,2EAA6E;AAEtE,KAAK,UAAU,qBAAqB,CACzC,IAAU,EACV,MAAmC;IAEnC,MAAM,OAAO,GAAG,IAAA,gDAAyB,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;IACzC,MAAM,YAAY,GAAG,IAAA,cAAK,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;IAErD,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE;QAC/D,GAAG,OAAO;QACV,QAAQ;QACR,YAAY;QACZ,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,kBAAe,qBAAqB,CAAC","sourcesContent":["import { type Tree, formatFiles, generateFiles, names, type GeneratorCallback } from '@nx/devkit';\nimport { join } from 'path';\nimport type { AuthProviderGeneratorSchema } from './schema.js';\nimport { normalizePrimitiveOptions } from '../../utils/normalize-options.js';\n\nexport async function authProviderGenerator(\n tree: Tree,\n schema: AuthProviderGeneratorSchema,\n): Promise<GeneratorCallback | void> {\n const options = normalizePrimitiveOptions(tree, schema, 'auth');\n const authType = schema.type ?? 'bearer';\n const constantName = names(schema.name).constantName;\n\n generateFiles(tree, join(__dirname, 'files'), options.directory, {\n ...options,\n authType,\n constantName,\n tmpl: '',\n });\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n}\n\nexport default authProviderGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/auth-provider/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface AuthProviderGeneratorSchema {\n name: string;\n project: string;\n type?: 'oauth' | 'api-key' | 'bearer' | 'basic' | 'custom';\n directory?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../../../src/generators/flow/flow.ts"],"names":[],"mappings":";;AAKA,sCAWC;AAhBD,uCAA2F;AAC3F,+BAA4B;AAE5B,2EAA6E;AAEtE,KAAK,UAAU,aAAa,CAAC,IAAU,EAAE,MAA2B;IACzE,MAAM,OAAO,GAAG,IAAA,gDAAyB,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAEjE,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE;QAC/D,GAAG,OAAO;QACV,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,kBAAe,aAAa,CAAC","sourcesContent":["import { type Tree, formatFiles, generateFiles, type GeneratorCallback } from '@nx/devkit';\nimport { join } from 'path';\nimport type { FlowGeneratorSchema } from './schema.js';\nimport { normalizePrimitiveOptions } from '../../utils/normalize-options.js';\n\nexport async function flowGenerator(tree: Tree, schema: FlowGeneratorSchema): Promise<GeneratorCallback | void> {\n const options = normalizePrimitiveOptions(tree, schema, 'flows');\n\n generateFiles(tree, join(__dirname, 'files'), options.directory, {\n ...options,\n tmpl: '',\n });\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n}\n\nexport default flowGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/flow/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface FlowGeneratorSchema {\n name: string;\n project: string;\n directory?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../src/generators/init/init.ts"],"names":[],"mappings":";;AAkCA,sCAiBC;AAnDD,uCAAsG;AAEtG,yEAA0E;AAC1E,yDAAsH;AAGtH,MAAM,eAAe,GAAG,CAAC,oBAAoB,EAAE,yBAAyB,CAAU,CAAC;AACnF,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAE1C;;;GAGG;AACH,SAAS,sBAAsB,CAAC,IAAU;IACxC,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9F,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;QACvC,cAAc,CAAC,QAAQ,CAAC,GAAG;YACzB,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC;YACzB,GAAG,cAAc,CAAC,QAAQ,CAAC;SAC5B,CAAC;IACJ,CAAC;IACD,kGAAkG;IAClG,cAAc,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;IAElF,IAAA,qBAAY,EAAC,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;AACpD,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,IAAU,EAAE,SAA8B,EAAE;IAC9E,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAE7B,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe;QACxC,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS;QACjB,CAAC,CAAC,IAAA,6CAAuB,EACrB,IAAI,EACJ,EAAE,GAAG,IAAA,qCAAuB,GAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EACjD,EAAE,GAAG,IAAA,wCAA0B,GAAE,EAAE,GAAG,IAAA,oCAAsB,GAAE,EAAE,EAChE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC/B,CAAC;IAEN,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,kBAAe,aAAa,CAAC","sourcesContent":["import { formatFiles, readNxJson, updateNxJson, type GeneratorCallback, type Tree } from '@nx/devkit';\n\nimport { addFrontmcpDependencies } from '../../utils/add-dependencies.js';\nimport { getFrontmcpDependencies, getFrontmcpDevDependencies, getJestDevDependencies } from '../../utils/versions.js';\nimport type { InitGeneratorSchema } from './schema.js';\n\nconst BUILD_EXECUTORS = ['@frontmcp/nx:build', '@frontmcp/nx:build-exec'] as const;\nconst TEST_EXECUTOR = '@frontmcp/nx:test';\n\n/**\n * Executors are only cached when the target (or a `targetDefaults` entry for\n * the executor) says so — Nx does not read that from the plugin itself.\n */\nfunction makeExecutorsCacheable(tree: Tree): void {\n const nxJson = readNxJson(tree);\n if (!nxJson) return;\n\n const targetDefaults = nxJson.targetDefaults ?? {};\n const inputs = nxJson.namedInputs?.['production'] ? ['production', '^production'] : undefined;\n\n for (const executor of BUILD_EXECUTORS) {\n targetDefaults[executor] = {\n cache: true,\n dependsOn: ['^build'],\n ...(inputs && { inputs }),\n ...targetDefaults[executor],\n };\n }\n // Default inputs, as in the workspace generator's nx.json: `production` leaves out the spec files\n targetDefaults[TEST_EXECUTOR] = { cache: true, ...targetDefaults[TEST_EXECUTOR] };\n\n updateNxJson(tree, { ...nxJson, targetDefaults });\n}\n\nexport async function initGenerator(tree: Tree, schema: InitGeneratorSchema = {}): Promise<GeneratorCallback> {\n makeExecutorsCacheable(tree);\n\n const installTask = schema.skipPackageJson\n ? () => undefined\n : addFrontmcpDependencies(\n tree,\n { ...getFrontmcpDependencies(), tslib: '^2.3.0' },\n { ...getFrontmcpDevDependencies(), ...getJestDevDependencies() },\n { keepExistingVersions: true },\n );\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n\n return installTask;\n}\n\nexport default initGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/init/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface InitGeneratorSchema {\n skipPackageJson?: boolean;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"job.js","sourceRoot":"","sources":["../../../../src/generators/job/job.ts"],"names":[],"mappings":";;AAKA,oCAWC;AAhBD,uCAA2F;AAC3F,+BAA4B;AAE5B,2EAA6E;AAEtE,KAAK,UAAU,YAAY,CAAC,IAAU,EAAE,MAA0B;IACvE,MAAM,OAAO,GAAG,IAAA,gDAAyB,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhE,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE;QAC/D,GAAG,OAAO;QACV,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,kBAAe,YAAY,CAAC","sourcesContent":["import { type Tree, formatFiles, generateFiles, type GeneratorCallback } from '@nx/devkit';\nimport { join } from 'path';\nimport type { JobGeneratorSchema } from './schema.js';\nimport { normalizePrimitiveOptions } from '../../utils/normalize-options.js';\n\nexport async function jobGenerator(tree: Tree, schema: JobGeneratorSchema): Promise<GeneratorCallback | void> {\n const options = normalizePrimitiveOptions(tree, schema, 'jobs');\n\n generateFiles(tree, join(__dirname, 'files'), options.directory, {\n ...options,\n tmpl: '',\n });\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n}\n\nexport default jobGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/job/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface JobGeneratorSchema {\n name: string;\n project: string;\n directory?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/generators/lib/lib/index.ts"],"names":[],"mappings":";;;AAAA,+DAA0D;AAAjD,wHAAA,gBAAgB,OAAA","sourcesContent":["export { normalizeOptions } from './normalize-options.js';\nexport type { NormalizedLibOptions } from './normalize-options.js';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"normalize-options.js","sourceRoot":"","sources":["../../../../../src/generators/lib/lib/normalize-options.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Tree, names, joinPathFragments, readJson } from '@nx/devkit';\nimport type { LibGeneratorSchema } from '../schema.js';\nimport { getProjectTsOptions, resolveProjectPaths, type ProjectModuleResolution } from '../../../utils/project-paths.js';\n\nexport interface NormalizedLibOptions {\n name: string;\n projectName: string;\n projectRoot: string;\n offset: string;\n moduleResolution: ProjectModuleResolution;\n resetCustomConditions: boolean;\n className: string;\n fileName: string;\n propertyName: string;\n libType: 'generic' | 'plugin' | 'adapter' | 'tool-register';\n publishable: boolean;\n importPath: string;\n parsedTags: string[];\n skipFormat: boolean;\n}\n\ninterface WorkspaceManifest {\n name?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\nfunction readWorkspaceManifest(tree: Tree): WorkspaceManifest {\n return tree.exists('package.json') ? readJson<WorkspaceManifest>(tree, 'package.json') : {};\n}\n\n/** The workspace's own npm scope (`@acme/source` → `@acme/<name>`), else the bare name. */\nfunction defaultImportPath(workspace: WorkspaceManifest, fileName: string): string {\n const scope = /^(@[^/]+)\\//.exec(workspace.name ?? '')?.[1];\n return scope ? `${scope}/${fileName}` : fileName;\n}\n\n/** A `paths` key that resolves the import path: the exact key, else a single-`*` wildcard key, as TypeScript matches them. */\nfunction findMappingKey(paths: Record<string, string[]>, importPath: string): string | undefined {\n if (paths[importPath]) return importPath;\n return Object.keys(paths).find((key) => {\n const [prefix, suffix, ...rest] = key.split('*');\n return (\n suffix !== undefined &&\n rest.length === 0 &&\n importPath.length >= prefix.length + suffix.length &&\n importPath.startsWith(prefix) &&\n importPath.endsWith(suffix)\n );\n });\n}\n\n/** Refuse an import path that would point an existing alias or an installed package at the new library. */\nfunction assertImportPathIsFree(tree: Tree, workspace: WorkspaceManifest, importPath: string): void {\n const paths = tree.exists('tsconfig.base.json')\n ? (readJson<{ compilerOptions?: { paths?: Record<string, string[]> } }>(tree, 'tsconfig.base.json').compilerOptions\n ?.paths ?? {})\n : {};\n const mappingKey = findMappingKey(paths, importPath);\n if (mappingKey) {\n const via = mappingKey === importPath ? '' : ` by \"${mappingKey}\"`;\n throw new Error(\n `The import path \"${importPath}\" is already mapped in tsconfig.base.json${via} to ${paths[mappingKey].join(', ')}. Pass --importPath with another name.`,\n );\n }\n if (workspace.dependencies?.[importPath] ?? workspace.devDependencies?.[importPath]) {\n throw new Error(\n `The import path \"${importPath}\" is a package this workspace depends on; the library would shadow it. Pass --importPath with another name.`,\n );\n }\n}\n\nexport function normalizeOptions(tree: Tree, schema: LibGeneratorSchema): NormalizedLibOptions {\n const { className, fileName, propertyName } = names(schema.name);\n const { projectRoot, offset } = resolveProjectPaths(schema.directory ?? joinPathFragments('libs', fileName));\n const libType = schema.libType ?? 'generic';\n const publishable = schema.publishable ?? false;\n const workspace = readWorkspaceManifest(tree);\n const importPath = schema.importPath ?? defaultImportPath(workspace, fileName);\n assertImportPathIsFree(tree, workspace, importPath);\n const parsedTags = schema.tags\n ? schema.tags.split(',').map((t) => t.trim())\n : ['scope:libs'];\n\n if (publishable) {\n parsedTags.push('scope:publishable');\n }\n\n return {\n name: schema.name,\n projectName: fileName,\n projectRoot,\n offset,\n ...getProjectTsOptions(tree),\n className,\n fileName,\n propertyName,\n libType,\n publishable,\n importPath,\n parsedTags,\n skipFormat: schema.skipFormat ?? false,\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../../../src/generators/lib/lib.ts"],"names":[],"mappings":";;AAkDA,oCAEC;AApDD,+BAA4B;AAE5B,uCAAgH;AAEhH,mEAA8D;AAC9D,yDAA6D;AAC7D,6CAA6E;AAG7E;;;GAGG;AACH,MAAM,eAAe,GAA6D;IAChF,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACnB,CAAC;AAOF;;;;;GAKG;AACH,SAAS,2BAA2B,CAAC,IAAU,EAAE,OAA6B;IAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAQ,EAAuB,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1G,MAAM,cAAc,GAAG,CAAC,IAAY,EAAsB,EAAE,CAC1D,SAAS,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC;IAEtE,IAAA,kBAAS,EAAC,IAAI,EAAE,GAAG,OAAO,CAAC,WAAW,eAAe,EAAE;QACrD,IAAI,EAAE,OAAO,CAAC,UAAU;QACxB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,mBAAmB;QAC1B,KAAK,EAAE,CAAC,MAAM,CAAC;QACf,YAAY,EAAE;YACZ,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI;gBACnC,eAAe,EAAE,cAAc,CAAC,eAAe,CAAC,IAAI,IAAI,IAAA,gCAAkB,GAAE,EAAE;aAC/E,CAAC;YACF,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,IAAI,QAAQ;SAC3C;KACF,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,IAAU,EAAE,MAA0B;IACvE,OAAO,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAAU,EAAE,MAA0B;IACxE,MAAM,OAAO,GAAG,IAAA,2BAAgB,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAE/C,+DAA+D;IAC/D,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,mBAAmB,CAAC,EAAE,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAE9F,gEAAgE;IAChE,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAEnG,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAChD,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QAC3F,gFAAgF;QAChF,MAAM,gBAAgB,GAAG,IAAA,WAAI,EAAC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,uBAAuB,CAAC,CAAC;QAClF,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,2BAA2B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,IAAA,iCAAc,EAAC,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,WAAW,eAAe,CAAC,CAAC;IAEhF,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,kBAAe,YAAY,CAAC","sourcesContent":["import { join } from 'path';\n\nimport { formatFiles, generateFiles, readJson, writeJson, type GeneratorCallback, type Tree } from '@nx/devkit';\n\nimport { addTsPathAlias } from '../../utils/project-paths.js';\nimport { getFrontmcpVersion } from '../../utils/versions.js';\nimport { normalizeOptions, type NormalizedLibOptions } from './lib/index.js';\nimport type { LibGeneratorSchema } from './schema.js';\n\n/**\n * Plugin and adapter libraries start from the class the `plugin` / `adapter` generators write,\n * so there is one template per class instead of two that drift apart.\n */\nconst CLASS_GENERATOR: Partial<Record<NormalizedLibOptions['libType'], string>> = {\n plugin: 'plugin',\n adapter: 'adapter',\n};\n\ninterface WorkspacePackageJson {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\n/**\n * A publishable library is published from its own folder after its `build` target compiles\n * `tsconfig.lib.json` into `dist/`, so the manifest points there and lists what the emitted JavaScript\n * requires: tslib (the base config sets `importHelpers`) and, for the FrontMCP library types, the SDK.\n * Both use the workspace's range when it declares one.\n */\nfunction writePublishablePackageJson(tree: Tree, options: NormalizedLibOptions): void {\n const workspace = tree.exists('package.json') ? readJson<WorkspacePackageJson>(tree, 'package.json') : {};\n const workspaceRange = (name: string): string | undefined =>\n workspace.dependencies?.[name] ?? workspace.devDependencies?.[name];\n\n writeJson(tree, `${options.projectRoot}/package.json`, {\n name: options.importPath,\n version: '0.0.1',\n type: 'commonjs',\n main: './dist/index.js',\n types: './dist/index.d.ts',\n files: ['dist'],\n dependencies: {\n ...(options.libType !== 'generic' && {\n '@frontmcp/sdk': workspaceRange('@frontmcp/sdk') ?? `~${getFrontmcpVersion()}`,\n }),\n tslib: workspaceRange('tslib') ?? '^2.3.0',\n },\n });\n}\n\nexport async function libGenerator(tree: Tree, schema: LibGeneratorSchema): Promise<GeneratorCallback | void> {\n return libGeneratorInternal(tree, schema);\n}\n\nasync function libGeneratorInternal(tree: Tree, schema: LibGeneratorSchema): Promise<GeneratorCallback | void> {\n const options = normalizeOptions(tree, schema);\n const substitutions = { ...options, tmpl: '' };\n\n // Generate project config files (project.json, tsconfig, jest)\n generateFiles(tree, join(__dirname, 'lib-project-files'), options.projectRoot, substitutions);\n\n // Generate type-specific source files (barrel and starter spec)\n generateFiles(tree, join(__dirname, 'files', options.libType), options.projectRoot, substitutions);\n\n const classGenerator = CLASS_GENERATOR[options.libType];\n if (classGenerator) {\n const srcDir = join(options.projectRoot, 'src');\n generateFiles(tree, join(__dirname, '..', classGenerator, 'files'), srcDir, substitutions);\n // The plugin generator's opt-in context extension is not part of a new library.\n const contextExtension = join(srcDir, `${options.fileName}.context-extension.ts`);\n if (tree.exists(contextExtension)) tree.delete(contextExtension);\n }\n\n if (options.publishable) {\n writePublishablePackageJson(tree, options);\n }\n\n addTsPathAlias(tree, options.importPath, `${options.projectRoot}/src/index.ts`);\n\n if (!options.skipFormat) {\n await formatFiles(tree);\n }\n}\n\nexport default libGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/lib/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface LibGeneratorSchema {\n name: string;\n directory?: string;\n libType?: 'generic' | 'plugin' | 'adapter' | 'tool-register';\n publishable?: boolean;\n importPath?: string;\n tags?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../../src/generators/plugin/plugin.ts"],"names":[],"mappings":";;AAMA,0CAsBC;AA5BD,uCAA2F;AAC3F,+BAA4B;AAE5B,2EAA6E;AAC7E,mDAAsD;AAE/C,KAAK,UAAU,eAAe,CAAC,IAAU,EAAE,MAA6B;IAC7E,MAAM,OAAO,GAAG,IAAA,gDAAyB,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,IAAI,KAAK,CAAC;IAClE,MAAM,YAAY,GAAG,IAAA,yBAAc,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE;QAC/D,GAAG,OAAO;QACV,YAAY;QACZ,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,iDAAiD;IACjD,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,MAAM,aAAa,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,QAAQ,uBAAuB,CAAC,CAAC;QAC1F,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,kBAAe,eAAe,CAAC","sourcesContent":["import { type Tree, formatFiles, generateFiles, type GeneratorCallback } from '@nx/devkit';\nimport { join } from 'path';\nimport type { PluginGeneratorSchema } from './schema.js';\nimport { normalizePrimitiveOptions } from '../../utils/normalize-options.js';\nimport { toPropertyName } from '../../utils/names.js';\n\nexport async function pluginGenerator(tree: Tree, schema: PluginGeneratorSchema): Promise<GeneratorCallback | void> {\n const options = normalizePrimitiveOptions(tree, schema, 'plugins');\n const withContextExtension = schema.withContextExtension ?? false;\n const propertyName = toPropertyName(schema.name);\n\n generateFiles(tree, join(__dirname, 'files'), options.directory, {\n ...options,\n propertyName,\n tmpl: '',\n });\n\n // Remove context extension file if not requested\n if (!withContextExtension) {\n const extensionPath = join(options.directory, `${options.fileName}.context-extension.ts`);\n if (tree.exists(extensionPath)) {\n tree.delete(extensionPath);\n }\n }\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n}\n\nexport default pluginGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/plugin/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface PluginGeneratorSchema {\n name: string;\n project: string;\n withContextExtension?: boolean;\n directory?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../../src/generators/prompt/prompt.ts"],"names":[],"mappings":";;AAKA,0CAkBC;AAvBD,uCAA2F;AAC3F,+BAA4B;AAE5B,2EAA6E;AAEtE,KAAK,UAAU,eAAe,CAAC,IAAU,EAAE,MAA6B;IAC7E,MAAM,OAAO,GAAG,IAAA,gDAAyB,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS;QACjC,CAAC,CAAC,MAAM,CAAC,SAAS;aACb,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC;QACpB,CAAC,CAAC,EAAE,CAAC;IAEP,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE;QAC/D,GAAG,OAAO;QACV,UAAU;QACV,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,kBAAe,eAAe,CAAC","sourcesContent":["import { type Tree, formatFiles, generateFiles, type GeneratorCallback } from '@nx/devkit';\nimport { join } from 'path';\nimport type { PromptGeneratorSchema } from './schema.js';\nimport { normalizePrimitiveOptions } from '../../utils/normalize-options.js';\n\nexport async function promptGenerator(tree: Tree, schema: PromptGeneratorSchema): Promise<GeneratorCallback | void> {\n const options = normalizePrimitiveOptions(tree, schema, 'prompts');\n const promptArgs = schema.arguments\n ? schema.arguments\n .split(',')\n .map((a) => a.trim())\n .filter(Boolean)\n : [];\n\n generateFiles(tree, join(__dirname, 'files'), options.directory, {\n ...options,\n promptArgs,\n tmpl: '',\n });\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n}\n\nexport default promptGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/prompt/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface PromptGeneratorSchema {\n name: string;\n project: string;\n arguments?: string;\n directory?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../../src/generators/provider/provider.ts"],"names":[],"mappings":";;AAOA,8CAkBC;AAzBD,+BAA4B;AAE5B,uCAA2F;AAE3F,2EAA6E;AAGtE,KAAK,UAAU,iBAAiB,CACrC,IAAU,EACV,MAA+B;IAE/B,MAAM,OAAO,GAAG,IAAA,gDAAyB,EAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,WAAW,CAAC;IAC1C,MAAM,SAAS,GAAG,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/D,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE;QAC/D,GAAG,OAAO;QACV,KAAK;QACL,SAAS;QACT,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,kBAAe,iBAAiB,CAAC","sourcesContent":["import { join } from 'path';\n\nimport { formatFiles, generateFiles, type GeneratorCallback, type Tree } from '@nx/devkit';\n\nimport { normalizePrimitiveOptions } from '../../utils/normalize-options.js';\nimport type { ProviderGeneratorSchema } from './schema.js';\n\nexport async function providerGenerator(\n tree: Tree,\n schema: ProviderGeneratorSchema,\n): Promise<GeneratorCallback | void> {\n const options = normalizePrimitiveOptions(tree, schema, 'providers');\n const scope = schema.scope ?? 'singleton';\n const scopeEnum = scope === 'singleton' ? 'GLOBAL' : 'CONTEXT';\n\n generateFiles(tree, join(__dirname, 'files'), options.directory, {\n ...options,\n scope,\n scopeEnum,\n tmpl: '',\n });\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n}\n\nexport default providerGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/provider/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface ProviderGeneratorSchema {\n name: string;\n project: string;\n scope?: 'singleton' | 'request' | 'context';\n directory?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../../src/generators/resource/resource.ts"],"names":[],"mappings":";;AAKA,8CAgBC;AArBD,uCAA2F;AAC3F,+BAA4B;AAE5B,2EAA6E;AAEtE,KAAK,UAAU,iBAAiB,CACrC,IAAU,EACV,MAA+B;IAE/B,MAAM,OAAO,GAAG,IAAA,gDAAyB,EAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;IAE5C,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE;QAC/D,GAAG,OAAO;QACV,UAAU;QACV,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,kBAAe,iBAAiB,CAAC","sourcesContent":["import { type Tree, formatFiles, generateFiles, type GeneratorCallback } from '@nx/devkit';\nimport { join } from 'path';\nimport type { ResourceGeneratorSchema } from './schema.js';\nimport { normalizePrimitiveOptions } from '../../utils/normalize-options.js';\n\nexport async function resourceGenerator(\n tree: Tree,\n schema: ResourceGeneratorSchema,\n): Promise<GeneratorCallback | void> {\n const options = normalizePrimitiveOptions(tree, schema, 'resources');\n const isTemplate = schema.template ?? false;\n\n generateFiles(tree, join(__dirname, 'files'), options.directory, {\n ...options,\n isTemplate,\n tmpl: '',\n });\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n}\n\nexport default resourceGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/resource/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface ResourceGeneratorSchema {\n name: string;\n project: string;\n template?: boolean;\n directory?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/generators/server/lib/index.ts"],"names":[],"mappings":";;;AAAA,+DAA0D;AAAjD,wHAAA,gBAAgB,OAAA","sourcesContent":["export { normalizeOptions } from './normalize-options.js';\nexport type { NormalizedServerOptions } from './normalize-options.js';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"normalize-options.js","sourceRoot":"","sources":["../../../../../src/generators/server/lib/normalize-options.ts"],"names":[],"mappings":";;AA4BA,4CAwCC;AApED,uCAA8E;AAC9E,+BAA6B;AAE7B,0EAA2G;AAC3G,sEAAyH;AAwBzH,SAAgB,gBAAgB,CAAC,IAAU,EAAE,MAA6B;IACxE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAA,cAAK,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAA,sCAAmB,EAAC,MAAM,CAAC,SAAS,IAAI,IAAA,0BAAiB,EAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChH,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI;QAC5B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAEtB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE7E,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC1C,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAA,cAAK,EAAC,OAAO,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,UAAU,EAAE,UAAU,IAAI,IAAA,0BAAiB,EAAC,UAAU,EAAE,IAAI,IAAI,IAAA,0BAAiB,EAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;QACjI,MAAM,UAAU,GAAG,YAAK,CAAC,QAAQ,CAAC,IAAA,0BAAiB,EAAC,WAAW,EAAE,KAAK,CAAC,EAAE,IAAA,0BAAiB,EAAC,aAAa,EAAE,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC;QAC7H,OAAO,EAAE,SAAS,EAAE,GAAG,QAAQ,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,EAAE,CAAC;IAClH,CAAC,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC;IAC3D,qGAAqG;IACrG,MAAM,YAAY,GAChB,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,oBAAoB,EAAE,8BAA8B,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAElH,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,UAAU,QAAQ,EAAE;QACjC,WAAW;QACX,MAAM;QACN,GAAG,IAAA,sCAAmB,EAAC,IAAI,CAAC;QAC5B,SAAS;QACT,QAAQ;QACR,gBAAgB;QAChB,QAAQ;QACR,UAAU;QACV,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM;QAC7B,YAAY;QACZ,cAAc,EAAE,IAAA,8CAAyB,EAAC,IAAI,CAAC;QAC/C,UAAU;QACV,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK;KACvC,CAAC;AACJ,CAAC","sourcesContent":["import { type Tree, getProjects, joinPathFragments, names } from '@nx/devkit';\nimport { posix } from 'path';\nimport type { ServerGeneratorSchema } from '../schema.js';\nimport { getPackageManagerCommands, type PackageManagerCommands } from '../../../utils/package-manager.js';\nimport { getProjectTsOptions, resolveProjectPaths, type ProjectModuleResolution } from '../../../utils/project-paths.js';\n\nexport interface NormalizedServerOptions {\n name: string;\n projectName: string;\n projectRoot: string;\n offset: string;\n moduleResolution: ProjectModuleResolution;\n resetCustomConditions: boolean;\n className: string;\n fileName: string;\n deploymentTarget: 'node' | 'vercel' | 'lambda' | 'cloudflare';\n appNames: string[];\n /** Each composed app with the import specifier `main.ts` uses, relative to the server's `src/`. */\n appImports: Array<{ className: string; importPath: string }>;\n redis: 'docker' | 'existing' | 'none';\n /** What the build target writes and Nx caches: `dist/`, plus the Build Output API tree for vercel. */\n buildOutputs: string[];\n /** Commands of the workspace's package manager, for the deployment config files. */\n packageManager: PackageManagerCommands;\n parsedTags: string[];\n skipFormat: boolean;\n}\n\nexport function normalizeOptions(tree: Tree, schema: ServerGeneratorSchema): NormalizedServerOptions {\n const { className, fileName } = names(schema.name);\n const { projectRoot, offset } = resolveProjectPaths(schema.directory ?? joinPathFragments('servers', fileName));\n const parsedTags = schema.tags\n ? schema.tags.split(',').map((t) => t.trim())\n : ['scope:servers'];\n\n const appNames = schema.apps.split(',').map((a) => a.trim()).filter(Boolean);\n\n const projects = getProjects(tree);\n const appImports = appNames.map((appName) => {\n const { className: appClass, fileName: appFile } = names(appName);\n const appProject = projects.get(appName) ?? projects.get(appFile);\n const appSourceRoot = appProject?.sourceRoot ?? joinPathFragments(appProject?.root ?? joinPathFragments('apps', appFile), 'src');\n const importPath = posix.relative(joinPathFragments(projectRoot, 'src'), joinPathFragments(appSourceRoot, `${appFile}.app`));\n return { className: `${appClass}App`, importPath: importPath.startsWith('.') ? importPath : `./${importPath}` };\n });\n\n const deploymentTarget = schema.deploymentTarget ?? 'node';\n // `frontmcp build --target vercel` writes `.vercel/output` (Build Output API) in the project folder.\n const buildOutputs =\n deploymentTarget === 'vercel' ? ['{projectRoot}/dist', '{projectRoot}/.vercel/output'] : ['{projectRoot}/dist'];\n\n return {\n name: schema.name,\n projectName: `server-${fileName}`,\n projectRoot,\n offset,\n ...getProjectTsOptions(tree),\n className,\n fileName,\n deploymentTarget,\n appNames,\n appImports,\n redis: schema.redis ?? 'none',\n buildOutputs,\n packageManager: getPackageManagerCommands(tree),\n parsedTags,\n skipFormat: schema.skipFormat ?? false,\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/server/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface ServerGeneratorSchema {\n name: string;\n directory?: string;\n deploymentTarget?: 'node' | 'vercel' | 'lambda' | 'cloudflare';\n apps: string;\n redis?: 'docker' | 'existing' | 'none';\n skills?: 'recommended' | 'minimal' | 'full' | 'none';\n tags?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/generators/server/server.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs';\nimport { join } from 'path';\n\nimport {\n formatFiles,\n generateFiles,\n installPackagesTask,\n names as nxNames,\n type GeneratorCallback,\n type Tree,\n} from '@nx/devkit';\n\nimport { addFrontmcpDependencies } from '../../utils/add-dependencies.js';\nimport { ensureYarnBerryPinned } from '../../utils/package-manager.js';\nimport { getLambdaDependencies } from '../../utils/versions.js';\nimport { normalizeOptions } from './lib/index.js';\nimport type { ServerGeneratorSchema } from './schema.js';\n\nexport async function serverGenerator(tree: Tree, schema: ServerGeneratorSchema): Promise<GeneratorCallback | void> {\n return serverGeneratorInternal(tree, schema);\n}\n\nasync function serverGeneratorInternal(tree: Tree, schema: ServerGeneratorSchema): Promise<GeneratorCallback | void> {\n const options = normalizeOptions(tree, schema);\n\n const templateVars = {\n ...options,\n names: nxNames,\n tmpl: '',\n dot: '.',\n };\n\n // Generate common files (main.ts, project.json, tsconfig)\n generateFiles(tree, join(__dirname, 'files', 'common'), options.projectRoot, templateVars);\n\n // Generate target-specific files\n const targetDir = join(__dirname, 'files', options.deploymentTarget);\n generateFiles(tree, targetDir, options.projectRoot, templateVars);\n if (options.deploymentTarget === 'node') {\n ensureYarnBerryPinned(tree);\n }\n\n // Copy skills from catalog\n const bundle = schema.skills ?? 'recommended';\n if (bundle !== 'none') {\n scaffoldCatalogSkills(tree, options.projectRoot, options.deploymentTarget, bundle);\n }\n\n // The lambda build wraps the server with @codegenie/serverless-express and fails without it.\n if (options.deploymentTarget === 'lambda') {\n addFrontmcpDependencies(tree, getLambdaDependencies(), {}, { keepExistingVersions: true });\n }\n\n if (!options.skipFormat) {\n await formatFiles(tree);\n }\n\n // The shell's package.json joins the workspace: install, so the lock file the Dockerfile installs from lists it.\n return () => installPackagesTask(tree, true);\n}\n\nfunction scaffoldCatalogSkills(tree: Tree, projectRoot: string, target: string, bundle: string): void {\n // Load skills catalog via @frontmcp/skills package at runtime\n let skills: {\n loadManifest: () => {\n skills: Array<{ name: string; path: string; targets: string[]; hasResources: boolean; bundle?: string[] }>;\n };\n resolveSkillPath: (entry: { path: string }) => string;\n getSkillsByTarget: (\n s: Array<{ targets: string[] }>,\n t: string,\n ) => Array<{ name: string; path: string; targets: string[]; hasResources: boolean; bundle?: string[] }>;\n getSkillsByBundle: (\n s: Array<{ bundle?: string[] }>,\n b: string,\n ) => Array<{ name: string; path: string; targets: string[]; hasResources: boolean; bundle?: string[] }>;\n };\n try {\n skills = require('@frontmcp/skills');\n } catch {\n return;\n }\n\n let manifest;\n try {\n manifest = skills.loadManifest();\n } catch {\n return;\n }\n\n const targetFiltered = skills.getSkillsByTarget(manifest.skills, target);\n const matchingSkills = skills.getSkillsByBundle(targetFiltered, bundle);\n\n for (const skill of matchingSkills) {\n const sourceDir = skills.resolveSkillPath(skill);\n const destDir = join(projectRoot, 'skills', skill.name);\n copyDirToTree(tree, sourceDir, destDir);\n }\n}\n\nfunction copyDirToTree(tree: Tree, sourceDir: string, destDir: string): void {\n if (!fs.existsSync(sourceDir)) return;\n const entries = fs.readdirSync(sourceDir, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = join(sourceDir, entry.name);\n const destPath = join(destDir, entry.name);\n if (entry.isDirectory()) {\n copyDirToTree(tree, srcPath, destPath);\n } else {\n const content = fs.readFileSync(srcPath);\n tree.write(destPath, content);\n }\n }\n}\n\nexport default serverGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/skill/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface SkillGeneratorSchema {\n name: string;\n project: string;\n tools?: string;\n directory?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../../src/generators/skill/skill.ts"],"names":[],"mappings":";;AAKA,wCAkBC;AAvBD,uCAA2F;AAC3F,+BAA4B;AAE5B,2EAA6E;AAEtE,KAAK,UAAU,cAAc,CAAC,IAAU,EAAE,MAA4B;IAC3E,MAAM,OAAO,GAAG,IAAA,gDAAyB,EAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK;QAC3B,CAAC,CAAC,MAAM,CAAC,KAAK;aACT,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC;QACpB,CAAC,CAAC,EAAE,CAAC;IAEP,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE;QAC/D,GAAG,OAAO;QACV,QAAQ;QACR,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,kBAAe,cAAc,CAAC","sourcesContent":["import { type Tree, formatFiles, generateFiles, type GeneratorCallback } from '@nx/devkit';\nimport { join } from 'path';\nimport type { SkillGeneratorSchema } from './schema.js';\nimport { normalizePrimitiveOptions } from '../../utils/normalize-options.js';\n\nexport async function skillGenerator(tree: Tree, schema: SkillGeneratorSchema): Promise<GeneratorCallback | void> {\n const options = normalizePrimitiveOptions(tree, schema, 'skills');\n const toolRefs = schema.tools\n ? schema.tools\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean)\n : [];\n\n generateFiles(tree, join(__dirname, 'files'), options.directory, {\n ...options,\n toolRefs,\n tmpl: '',\n });\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n}\n\nexport default skillGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/skill-dir/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface SkillDirGeneratorSchema {\n name: string;\n project: string;\n description?: string;\n directory?: string;\n tags?: string;\n withReferences?: boolean;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-dir.js","sourceRoot":"","sources":["../../../../src/generators/skill-dir/skill-dir.ts"],"names":[],"mappings":";;AAIA,8CAmCC;AAvCD,uCAAqH;AACrH,+BAA4B;AAGrB,KAAK,UAAU,iBAAiB,CACrC,IAAU,EACV,MAA+B;IAE/B,MAAM,aAAa,GAAG,IAAA,iCAAwB,EAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,IAAI,QAAQ,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAE7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;QACtB,CAAC,CAAC,MAAM,CAAC,IAAI;aACR,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC;QACf,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IAEhB,MAAM,YAAY,GAAG;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,UAAU,MAAM,CAAC,IAAI,EAAE;QAC1D,IAAI;QACJ,IAAI,EAAE,EAAE;KACT,CAAC;IAEF,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAEvE,4CAA4C;IAC5C,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,IAAA,WAAI,EAAC,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,kBAAe,iBAAiB,CAAC","sourcesContent":["import { type Tree, formatFiles, generateFiles, readProjectConfiguration, type GeneratorCallback } from '@nx/devkit';\nimport { join } from 'path';\nimport type { SkillDirGeneratorSchema } from './schema.js';\n\nexport async function skillDirGenerator(\n tree: Tree,\n schema: SkillDirGeneratorSchema,\n): Promise<GeneratorCallback | void> {\n const projectConfig = readProjectConfiguration(tree, schema.project);\n const projectRoot = projectConfig.root;\n const baseDir = schema.directory ?? 'skills';\n const targetDir = join(projectRoot, baseDir);\n\n const tags = schema.tags\n ? schema.tags\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean)\n .join(', ')\n : schema.name;\n\n const templateVars = {\n name: schema.name,\n description: schema.description ?? `Skill: ${schema.name}`,\n tags,\n tmpl: '',\n };\n\n generateFiles(tree, join(__dirname, 'files'), targetDir, templateVars);\n\n // Create references/ directory if requested\n if (schema.withReferences) {\n const refDir = join(targetDir, schema.name, 'references');\n tree.write(join(refDir, '.gitkeep'), '');\n }\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n}\n\nexport default skillDirGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/tool/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface ToolGeneratorSchema {\n name: string;\n project: string;\n directory?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../../src/generators/tool/tool.ts"],"names":[],"mappings":";;AAKA,sCAWC;AAhBD,uCAA2F;AAC3F,+BAA4B;AAE5B,2EAA6E;AAEtE,KAAK,UAAU,aAAa,CAAC,IAAU,EAAE,MAA2B;IACzE,MAAM,OAAO,GAAG,IAAA,gDAAyB,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAEjE,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE;QAC/D,GAAG,OAAO;QACV,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,kBAAe,aAAa,CAAC","sourcesContent":["import { type Tree, formatFiles, generateFiles, type GeneratorCallback } from '@nx/devkit';\nimport { join } from 'path';\nimport type { ToolGeneratorSchema } from './schema.js';\nimport { normalizePrimitiveOptions } from '../../utils/normalize-options.js';\n\nexport async function toolGenerator(tree: Tree, schema: ToolGeneratorSchema): Promise<GeneratorCallback | void> {\n const options = normalizePrimitiveOptions(tree, schema, 'tools');\n\n generateFiles(tree, join(__dirname, 'files'), options.directory, {\n ...options,\n tmpl: '',\n });\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n}\n\nexport default toolGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/ui-component/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface UiComponentGeneratorSchema {\n name: string;\n description?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-component.js","sourceRoot":"","sources":["../../../../src/generators/ui-component/ui-component.ts"],"names":[],"mappings":";;AAWA,oDAiCC;AA5CD,+BAA4B;AAE5B,uCAAkG;AAElG,kEAA0D;AAC1D,4EAAoE;AAGpE,MAAM,YAAY,GAAG,eAAe,CAAC;AACrC,MAAM,WAAW,GAAG,yBAAyB,CAAC;AAEvC,KAAK,UAAU,oBAAoB,CACxC,IAAU,EACV,MAAkC;IAElC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAK,EAAC,WAAW,CAAC,CAAC;IAEzC,MAAM,WAAW,GAAG,IAAA,sCAAe,EAAC,IAAI,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAEtH,0CAA0C;IAC1C,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,YAAY,MAAM,EAAE;QACnE,SAAS;QACT,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;QACrC,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,2EAA2E;IAC3E,IAAA,4BAAU,EAAC,IAAI,EAAE;QACf,WAAW,EAAE,YAAY;QACzB,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,WAAW;KACxB,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,kBAAe,oBAAoB,CAAC","sourcesContent":["import { join } from 'path';\n\nimport { formatFiles, generateFiles, names, type GeneratorCallback, type Tree } from '@nx/devkit';\n\nimport { addUiEntry } from '../ui-shared/add-ui-entry.js';\nimport { ensureUiPackage } from '../ui-shared/ensure-ui-package.js';\nimport type { UiComponentGeneratorSchema } from './schema.js';\n\nconst PACKAGE_ROOT = 'ui/components';\nconst IMPORT_PATH = '@frontmcp/ui-components';\n\nexport async function uiComponentGenerator(\n tree: Tree,\n schema: UiComponentGeneratorSchema,\n): Promise<GeneratorCallback | void> {\n const trimmedName = schema.name?.trim();\n if (!trimmedName) {\n throw new Error('Generator name must not be blank');\n }\n\n const { className } = names(trimmedName);\n\n const installTask = ensureUiPackage(tree, { packageRoot: PACKAGE_ROOT, projectName: 'ui-components', kind: 'react' });\n\n // Generate component files from templates\n generateFiles(tree, join(__dirname, 'files'), `${PACKAGE_ROOT}/src`, {\n className,\n name: schema.name,\n description: schema.description ?? '',\n tmpl: '',\n });\n\n // Add entry point to project.json, tsconfig.base.json, and barrel index.ts\n addUiEntry(tree, {\n packageRoot: PACKAGE_ROOT,\n entryName: className,\n importPath: IMPORT_PATH,\n });\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n\n return installTask;\n}\n\nexport default uiComponentGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/ui-page/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface UiPageGeneratorSchema {\n name: string;\n description?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-page.js","sourceRoot":"","sources":["../../../../src/generators/ui-page/ui-page.ts"],"names":[],"mappings":";;AAWA,0CA8BC;AAzCD,+BAA4B;AAE5B,uCAAkG;AAElG,kEAA0D;AAC1D,4EAAoE;AAGpE,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAElC,KAAK,UAAU,eAAe,CAAC,IAAU,EAAE,MAA6B;IAC7E,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAK,EAAC,WAAW,CAAC,CAAC;IAEzC,MAAM,WAAW,GAAG,IAAA,sCAAe,EAAC,IAAI,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAEjH,qCAAqC;IACrC,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,YAAY,MAAM,EAAE;QACnE,SAAS;QACT,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;QACrC,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,2EAA2E;IAC3E,IAAA,4BAAU,EAAC,IAAI,EAAE;QACf,WAAW,EAAE,YAAY;QACzB,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,WAAW;KACxB,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,kBAAe,eAAe,CAAC","sourcesContent":["import { join } from 'path';\n\nimport { formatFiles, generateFiles, names, type GeneratorCallback, type Tree } from '@nx/devkit';\n\nimport { addUiEntry } from '../ui-shared/add-ui-entry.js';\nimport { ensureUiPackage } from '../ui-shared/ensure-ui-package.js';\nimport type { UiPageGeneratorSchema } from './schema.js';\n\nconst PACKAGE_ROOT = 'ui/pages';\nconst IMPORT_PATH = '@frontmcp/ui-pages';\n\nexport async function uiPageGenerator(tree: Tree, schema: UiPageGeneratorSchema): Promise<GeneratorCallback | void> {\n const trimmedName = schema.name?.trim();\n if (!trimmedName) {\n throw new Error('Generator name must not be blank');\n }\n\n const { className } = names(trimmedName);\n\n const installTask = ensureUiPackage(tree, { packageRoot: PACKAGE_ROOT, projectName: 'ui-pages', kind: 'react' });\n\n // Generate page files from templates\n generateFiles(tree, join(__dirname, 'files'), `${PACKAGE_ROOT}/src`, {\n className,\n name: schema.name,\n description: schema.description ?? '',\n tmpl: '',\n });\n\n // Add entry point to project.json, tsconfig.base.json, and barrel index.ts\n addUiEntry(tree, {\n packageRoot: PACKAGE_ROOT,\n entryName: className,\n importPath: IMPORT_PATH,\n });\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n\n return installTask;\n}\n\nexport default uiPageGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-ui-entry.js","sourceRoot":"","sources":["../../../../src/generators/ui-shared/add-ui-entry.ts"],"names":[],"mappings":";;AAuBA,gCAqCC;AA5DD,uCAAmD;AAEnD,mEAA8D;AAE9D,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAWD;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,IAAU,EAAE,OAA0B;IAC/D,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACvD,MAAM,SAAS,GAAG,GAAG,WAAW,QAAQ,SAAS,WAAW,CAAC;IAE7D,mFAAmF;IACnF,MAAM,eAAe,GAAG,GAAG,WAAW,eAAe,CAAC;IACtD,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,IAAA,mBAAU,EAAC,IAAI,EAAE,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE;YACzC,KAAK,MAAM,MAAM,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC;gBAChD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;gBAC7C,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,IAAI,EAAE,CAAC;oBAC9D,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;wBACpD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC7C,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yDAAyD;IACzD,0EAA0E;IAC1E,8DAA8D;IAC9D,IAAA,iCAAc,EAAC,IAAI,EAAE,GAAG,UAAU,IAAI,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAEpF,sCAAsC;IACtC,MAAM,UAAU,GAAG,GAAG,WAAW,eAAe,CAAC;IACjD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QACtD,MAAM,UAAU,GAAG,oBAAoB,SAAS,MAAM,CAAC;QACvD,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,yBAAyB,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC3F,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import { updateJson, type Tree } from '@nx/devkit';\n\nimport { addTsPathAlias } from '../../utils/project-paths.js';\n\nfunction escapeRegExp(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nexport interface AddUiEntryOptions {\n /** The UI package root, e.g. 'ui/components' */\n packageRoot: string;\n /** The entry name, e.g. 'LoginForm' or 'admin-dashboard' */\n entryName: string;\n /** The npm scope name, e.g. '@frontmcp/ui-components' */\n importPath: string;\n}\n\n/**\n * Adds an entry point to an existing UI package:\n * 1. Updates project.json `additionalEntryPoints` in both build-cjs and build-esm\n * 2. Updates tsconfig.base.json path aliases (wildcard already covers it, but explicit is fine)\n * 3. Adds re-export to the barrel index.ts\n */\nexport function addUiEntry(tree: Tree, options: AddUiEntryOptions): void {\n const { packageRoot, entryName, importPath } = options;\n const entryPath = `${packageRoot}/src/${entryName}/index.ts`;\n\n // 1. Update project.json — add to additionalEntryPoints in build-cjs and build-esm\n const projectJsonPath = `${packageRoot}/project.json`;\n if (tree.exists(projectJsonPath)) {\n updateJson(tree, projectJsonPath, (json) => {\n for (const target of ['build-cjs', 'build-esm']) {\n const opts = json.targets?.[target]?.options;\n if (opts) {\n opts.additionalEntryPoints = opts.additionalEntryPoints ?? [];\n if (!opts.additionalEntryPoints.includes(entryPath)) {\n opts.additionalEntryPoints.push(entryPath);\n }\n }\n }\n return json;\n });\n }\n\n // 2. Update tsconfig.base.json — add explicit path alias\n // The wildcard alias already covers resolution, but adding an explicit\n // entry improves IDE completion and Nx dep graph accuracy.\n addTsPathAlias(tree, `${importPath}/${entryName}`, entryPath, { overwrite: false });\n\n // 3. Add re-export to barrel index.ts\n const barrelPath = `${packageRoot}/src/index.ts`;\n if (tree.exists(barrelPath)) {\n const existing = tree.read(barrelPath, 'utf-8') ?? '';\n const exportLine = `export * from './${entryName}';\\n`;\n const duplicatePattern = new RegExp(`^export \\\\* from '\\\\./${escapeRegExp(entryName)}';?$`, 'm');\n if (!duplicatePattern.test(existing)) {\n const normalized = existing.endsWith('\\n') || existing === '' ? existing : existing + '\\n';\n tree.write(barrelPath, normalized + exportLine);\n }\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ensure-ui-package.js","sourceRoot":"","sources":["../../../../src/generators/ui-shared/ensure-ui-package.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n offsetFromRoot,\n readJson,\n readNxJson,\n runTasksInSerial,\n writeJson,\n type GeneratorCallback,\n type Tree,\n} from '@nx/devkit';\n\nimport { addFrontmcpDependencies } from '../../utils/add-dependencies.js';\nimport { getModuleResolution } from '../../utils/project-paths.js';\nimport {\n getFrontmcpVersion,\n getJestDevDependencies,\n getNxVersion,\n getUiBuildDevDependencies,\n} from '../../utils/versions.js';\n\nexport interface EnsureUiPackageOptions {\n /** e.g. 'ui/components' */\n packageRoot: string;\n /** Nx project name for a package that does not exist yet, e.g. 'ui-components' */\n projectName: string;\n /** 'react' packages render components and are tested in jsdom; 'shell' packages only build HTML strings. */\n kind: 'react' | 'shell';\n}\n\nconst REACT_DEPENDENCIES: Record<string, string> = {\n react: '^19.0.0',\n 'react-dom': '^19.0.0',\n '@mui/material': '^7.0.0',\n '@emotion/react': '^11.14.0',\n '@emotion/styled': '^11.14.0',\n};\n\nconst REACT_DEV_DEPENDENCIES: Record<string, string> = {\n '@types/react': '^19.0.0',\n '@types/react-dom': '^19.0.0',\n '@testing-library/dom': '^10.4.0',\n '@testing-library/react': '^16.0.0',\n 'jest-environment-jsdom': '^30.0.2',\n};\n\nfunction jestPluginInfersTestTarget(tree: Tree): boolean {\n const plugins = readNxJson(tree)?.plugins ?? [];\n return plugins.some((entry) => {\n if (typeof entry === 'string') return entry === '@nx/jest/plugin';\n if (entry.plugin !== '@nx/jest/plugin') return false;\n const targetName = (entry.options as { targetName?: unknown } | undefined)?.targetName;\n return targetName === undefined || targetName === 'test';\n });\n}\n\n/** The Nx version the workspace runs, so `@nx/*` packages added here match it. */\nfunction workspaceNxVersion(tree: Tree): string {\n if (!tree.exists('package.json')) return getNxVersion();\n const { dependencies, devDependencies } = readJson<{\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n }>(tree, 'package.json');\n return devDependencies?.['nx'] ?? dependencies?.['nx'] ?? getNxVersion();\n}\n\nfunction testTarget(packageRoot: string): Record<string, unknown> {\n return {\n executor: 'nx:run-commands',\n cache: true,\n options: { command: 'jest --config jest.config.cjs', cwd: packageRoot },\n };\n}\n\nfunction buildTargets(packageRoot: string): Record<string, unknown> {\n const common = {\n main: `${packageRoot}/src/index.ts`,\n tsConfig: `${packageRoot}/tsconfig.json`,\n bundle: true,\n thirdParty: false,\n platform: 'node',\n additionalEntryPoints: [] as string[],\n };\n return {\n 'build-cjs': {\n executor: '@nx/esbuild:esbuild',\n outputs: ['{options.outputPath}'],\n options: { ...common, outputPath: `dist/${packageRoot}`, format: ['cjs'], declaration: true },\n },\n 'build-esm': {\n executor: '@nx/esbuild:esbuild',\n dependsOn: ['build-cjs'],\n outputs: ['{options.outputPath}'],\n options: {\n ...common,\n outputPath: `dist/${packageRoot}/esm`,\n format: ['esm'],\n declaration: false,\n // build-cjs type-checks the same sources; a noEmit check here fails with TS5069 in TS-solution workspaces.\n skipTypeCheck: true,\n esbuildOptions: { outExtension: { '.js': '.mjs' } },\n },\n },\n build: {\n executor: 'nx:noop',\n dependsOn: ['build-cjs', 'build-esm'],\n },\n };\n}\n\n/**\n * The UI generators emit `.tsx` files that import React and MUI (or the uipack\n * shell builder), and a spec that renders them. Nothing else installs those, so\n * the generators add them — and create the package folder when the workspace\n * does not have one yet, instead of writing files into a folder that no Nx\n * project owns.\n */\nexport function ensureUiPackage(tree: Tree, options: EnsureUiPackageOptions): GeneratorCallback {\n const { packageRoot, projectName, kind } = options;\n\n if (!tree.exists(`${packageRoot}/project.json`)) {\n const offset = offsetFromRoot(packageRoot);\n // `customConditions` (Nx solution workspaces set it) is only valid with a modern `moduleResolution`\n // (TS5098), so a package that inherits it must inherit the base's `module`/`moduleResolution` too.\n const inheritsModernResolution = Boolean(\n tree.exists('tsconfig.base.json') &&\n readJson<{ compilerOptions?: { customConditions?: unknown } }>(tree, 'tsconfig.base.json').compilerOptions\n ?.customConditions,\n );\n writeJson(tree, `${packageRoot}/project.json`, {\n name: projectName,\n $schema: `${offset}node_modules/nx/schemas/project-schema.json`,\n sourceRoot: `${packageRoot}/src`,\n projectType: 'library',\n tags: [],\n targets: {\n ...buildTargets(packageRoot),\n // A workspace without @nx/jest/plugin (e.g. `create-nx-workspace --preset=ts`) infers no test target.\n ...(!jestPluginInfersTestTarget(tree) && { test: testTarget(packageRoot) }),\n },\n });\n writeJson(tree, `${packageRoot}/tsconfig.json`, {\n extends: `${offset}tsconfig.base.json`,\n compilerOptions: {\n ...(!inheritsModernResolution && { module: 'commonjs', moduleResolution: getModuleResolution(tree) }),\n ...(kind === 'react' && { jsx: 'react-jsx' }),\n esModuleInterop: true,\n strict: true,\n },\n include: ['src/**/*.ts', 'src/**/*.tsx'],\n exclude: ['src/**/*.spec.ts', 'src/**/*.spec.tsx'],\n });\n tree.write(\n `${packageRoot}/jest.config.cjs`,\n `module.exports = {\n displayName: '${projectName}',\n testEnvironment: '${kind === 'react' ? 'jsdom' : 'node'}',\n transform: {\n '^.+\\\\\\\\.[tj]sx?$': ['@swc/jest', {\n jsc: {\n target: 'es2022',\n parser: { syntax: 'typescript', tsx: true },\n transform: { react: { runtime: 'automatic' } },\n },\n swcrc: false,\n }],\n },\n moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n};\n`,\n );\n if (!tree.exists(`${packageRoot}/src/index.ts`)) {\n tree.write(`${packageRoot}/src/index.ts`, '');\n }\n }\n\n const range = `~${getFrontmcpVersion()}`;\n const { esbuild, ...uiBuildDevDependencies } = getUiBuildDevDependencies();\n const buildDevDependencies = {\n ...uiBuildDevDependencies,\n '@nx/esbuild': workspaceNxVersion(tree),\n ...getJestDevDependencies(),\n };\n const installUiDependencies =\n kind === 'react'\n ? addFrontmcpDependencies(\n tree,\n REACT_DEPENDENCIES,\n { ...REACT_DEV_DEPENDENCIES, ...buildDevDependencies },\n { keepExistingVersions: true },\n )\n : addFrontmcpDependencies(tree, { '@frontmcp/uipack': range }, buildDevDependencies, {\n keepExistingVersions: true,\n });\n // An existing esbuild range is raised rather than kept when it is older than ours: the `^0.25.0` earlier\n // versions of these generators wrote is below the `>=0.27` peer range of @frontmcp/uipack (npm ERESOLVE).\n // A range at or above ours stays, in whichever section it is in.\n const installEsbuild = addFrontmcpDependencies(tree, {}, { esbuild }, { keepExistingVersions: false });\n return runTasksInSerial(installUiDependencies, installEsbuild);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/ui-shell/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface UiShellGeneratorSchema {\n name: string;\n description?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-shell.js","sourceRoot":"","sources":["../../../../src/generators/ui-shell/ui-shell.ts"],"names":[],"mappings":";;AAWA,4CA0BC;AArCD,+BAA4B;AAE5B,uCAAkG;AAElG,kEAA0D;AAC1D,4EAAoE;AAGpE,MAAM,YAAY,GAAG,WAAW,CAAC;AACjC,MAAM,WAAW,GAAG,qBAAqB,CAAC;AAEnC,KAAK,UAAU,gBAAgB,CAAC,IAAU,EAAE,MAA8B;IAC/E,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAA,cAAK,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEnD,MAAM,WAAW,GAAG,IAAA,sCAAe,EAAC,IAAI,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAElH,0DAA0D;IAC1D,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,YAAY,MAAM,EAAE;QACnE,SAAS;QACT,QAAQ;QACR,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;QACrC,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,2EAA2E;IAC3E,IAAA,4BAAU,EAAC,IAAI,EAAE;QACf,WAAW,EAAE,YAAY;QACzB,SAAS,EAAE,QAAQ;QACnB,UAAU,EAAE,WAAW;KACxB,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,kBAAe,gBAAgB,CAAC","sourcesContent":["import { join } from 'path';\n\nimport { formatFiles, generateFiles, names, type GeneratorCallback, type Tree } from '@nx/devkit';\n\nimport { addUiEntry } from '../ui-shared/add-ui-entry.js';\nimport { ensureUiPackage } from '../ui-shared/ensure-ui-package.js';\nimport type { UiShellGeneratorSchema } from './schema.js';\n\nconst PACKAGE_ROOT = 'ui/shells';\nconst IMPORT_PATH = '@frontmcp/ui-shells';\n\nexport async function uiShellGenerator(tree: Tree, schema: UiShellGeneratorSchema): Promise<GeneratorCallback | void> {\n const { className, fileName } = names(schema.name);\n\n const installTask = ensureUiPackage(tree, { packageRoot: PACKAGE_ROOT, projectName: 'ui-shells', kind: 'shell' });\n\n // Generate shell files from templates (kebab-case naming)\n generateFiles(tree, join(__dirname, 'files'), `${PACKAGE_ROOT}/src`, {\n className,\n fileName,\n name: schema.name,\n description: schema.description ?? '',\n tmpl: '',\n });\n\n // Add entry point to project.json, tsconfig.base.json, and barrel index.ts\n addUiEntry(tree, {\n packageRoot: PACKAGE_ROOT,\n entryName: fileName,\n importPath: IMPORT_PATH,\n });\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n\n return installTask;\n}\n\nexport default uiShellGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/workflow/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface WorkflowGeneratorSchema {\n name: string;\n project: string;\n directory?: string;\n skipFormat?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../../../src/generators/workflow/workflow.ts"],"names":[],"mappings":";;AAKA,8CAcC;AAnBD,uCAA2F;AAC3F,+BAA4B;AAE5B,2EAA6E;AAEtE,KAAK,UAAU,iBAAiB,CACrC,IAAU,EACV,MAA+B;IAE/B,MAAM,OAAO,GAAG,IAAA,gDAAyB,EAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAErE,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE;QAC/D,GAAG,OAAO;QACV,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,kBAAe,iBAAiB,CAAC","sourcesContent":["import { type Tree, formatFiles, generateFiles, type GeneratorCallback } from '@nx/devkit';\nimport { join } from 'path';\nimport type { WorkflowGeneratorSchema } from './schema.js';\nimport { normalizePrimitiveOptions } from '../../utils/normalize-options.js';\n\nexport async function workflowGenerator(\n tree: Tree,\n schema: WorkflowGeneratorSchema,\n): Promise<GeneratorCallback | void> {\n const options = normalizePrimitiveOptions(tree, schema, 'workflows');\n\n generateFiles(tree, join(__dirname, 'files'), options.directory, {\n ...options,\n tmpl: '',\n });\n\n if (!schema.skipFormat) {\n await formatFiles(tree);\n }\n}\n\nexport default workflowGenerator;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/generators/workspace/lib/index.ts"],"names":[],"mappings":";;;AAAA,+DAA0D;AAAjD,wHAAA,gBAAgB,OAAA","sourcesContent":["export { normalizeOptions } from './normalize-options.js';\nexport type { NormalizedWorkspaceOptions } from './normalize-options.js';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"normalize-options.js","sourceRoot":"","sources":["../../../../../src/generators/workspace/lib/normalize-options.ts"],"names":[],"mappings":";;AAMA,4CASC;AATD,SAAgB,gBAAgB,CAAC,MAAgC;IAC/D,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,KAAK;QAC9C,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,KAAK;QACxC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;QAChC,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,IAAI;QAC/C,aAAa,EAAE,MAAM,CAAC,IAAI;KAC3B,CAAC;AACJ,CAAC","sourcesContent":["import type { WorkspaceGeneratorSchema } from '../schema.js';\n\nexport interface NormalizedWorkspaceOptions extends Required<WorkspaceGeneratorSchema> {\n workspaceRoot: string;\n}\n\nexport function normalizeOptions(schema: WorkspaceGeneratorSchema): NormalizedWorkspaceOptions {\n return {\n name: schema.name,\n packageManager: schema.packageManager ?? 'npm',\n skipInstall: schema.skipInstall ?? false,\n skipGit: schema.skipGit ?? false,\n createSampleApp: schema.createSampleApp ?? true,\n workspaceRoot: schema.name,\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/generators/workspace/schema.ts"],"names":[],"mappings":"","sourcesContent":["export interface WorkspaceGeneratorSchema {\n name: string;\n packageManager?: 'npm' | 'yarn' | 'pnpm' | 'bun';\n skipInstall?: boolean;\n skipGit?: boolean;\n createSampleApp?: boolean;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../../src/generators/workspace/workspace.ts"],"names":[],"mappings":"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","sourcesContent":["import { execSync } from 'child_process';\nimport { join } from 'path';\n\nimport { formatFiles, generateFiles, installPackagesTask, type GeneratorCallback, type Tree } from '@nx/devkit';\n\nimport { getFrontmcpVersion, getNxVersion } from '../../utils/versions.js';\nimport { normalizeOptions } from './lib/index.js';\nimport type { WorkspaceGeneratorSchema } from './schema.js';\n\nexport async function workspaceGenerator(tree: Tree, schema: WorkspaceGeneratorSchema): Promise<GeneratorCallback> {\n return workspaceGeneratorInternal(tree, schema);\n}\n\nasync function workspaceGeneratorInternal(tree: Tree, schema: WorkspaceGeneratorSchema): Promise<GeneratorCallback> {\n const options = normalizeOptions(schema);\n const frontmcpVersion = `~${getFrontmcpVersion()}`;\n const nxVersion = getNxVersion();\n\n generateFiles(tree, join(__dirname, 'files'), options.workspaceRoot, {\n ...options,\n frontmcpVersion,\n nxVersion,\n tmpl: '',\n dot: '.',\n });\n\n // Create empty directories\n tree.write(join(options.workspaceRoot, 'apps', '.gitkeep'), '');\n tree.write(join(options.workspaceRoot, 'libs', '.gitkeep'), '');\n tree.write(join(options.workspaceRoot, 'servers', '.gitkeep'), '');\n\n // Compose with app generator when createSampleApp is true\n if (options.createSampleApp) {\n const { appGenerator } = await import('../app/app.js');\n await appGenerator(tree, {\n name: 'demo',\n directory: join(options.workspaceRoot, 'apps', 'demo'),\n workspaceRoot: options.workspaceRoot,\n tags: 'scope:apps',\n skipFormat: true,\n });\n }\n\n await formatFiles(tree);\n\n if (options.skipInstall) {\n if (!options.skipGit) {\n return () => {\n initGitRepository(options.workspaceRoot);\n };\n }\n return () => {\n /* noop */\n };\n }\n\n return () => {\n installPackagesTask(tree);\n if (!options.skipGit) {\n initGitRepository(options.workspaceRoot);\n }\n };\n}\n\nfunction initGitRepository(workspaceRoot: string): void {\n try {\n execSync('git init', { cwd: workspaceRoot, stdio: 'ignore' });\n execSync('git add -A', { cwd: workspaceRoot, stdio: 'ignore' });\n execSync('git commit -m \"Initial commit\"', { cwd: workspaceRoot, stdio: 'ignore' });\n } catch {\n // git may not be installed — silently skip\n }\n}\n\nexport default workspaceGenerator;\n"]}
package/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,aAAa;AACb,qDAA0D;AAAjD,wGAAA,aAAa,OAAA;AACtB,oEAAyE;AAAhE,kHAAA,kBAAkB,OAAA;AAC3B,kDAAuD;AAA9C,sGAAA,YAAY,OAAA;AACrB,kDAAuD;AAA9C,sGAAA,YAAY,OAAA;AACrB,2DAAgE;AAAvD,4GAAA,eAAe,OAAA;AACxB,qDAA0D;AAAjD,wGAAA,aAAa,OAAA;AACtB,iEAAsE;AAA7D,gHAAA,iBAAiB,OAAA;AAC1B,2DAAgE;AAAvD,4GAAA,eAAe,OAAA;AACxB,wDAA6D;AAApD,0GAAA,cAAc,OAAA;AACvB,wDAA6D;AAApD,0GAAA,cAAc,OAAA;AACvB,iEAAsE;AAA7D,gHAAA,iBAAiB,OAAA;AAC1B,2DAAgE;AAAvD,4GAAA,eAAe,OAAA;AACxB,8DAAmE;AAA1D,8GAAA,gBAAgB,OAAA;AACzB,gFAAoF;AAA3E,yHAAA,qBAAqB,OAAA;AAC9B,qDAA0D;AAAjD,wGAAA,aAAa,OAAA;AACtB,6EAAiF;AAAxE,uHAAA,oBAAoB,OAAA;AAC7B,8DAAkE;AAAzD,6GAAA,eAAe,OAAA;AACxB,iEAAqE;AAA5D,+GAAA,gBAAgB,OAAA;AAEzB,YAAY;AACZ,mDAK6B;AAJ3B,iHAAA,kBAAkB,OAAA;AAClB,sHAAA,uBAAuB,OAAA;AACvB,yHAAA,0BAA0B,OAAA;AAC1B,gHAAA,iBAAiB,OAAA;AAEnB,6CAA2F;AAAlF,uGAAA,WAAW,OAAA;AAAE,0GAAA,cAAc,OAAA;AAAE,sGAAA,UAAU,OAAA;AAAE,0GAAA,cAAc,OAAA","sourcesContent":["// Generators\nexport { initGenerator } from './generators/init/init.js';\nexport { workspaceGenerator } from './generators/workspace/workspace.js';\nexport { appGenerator } from './generators/app/app.js';\nexport { libGenerator } from './generators/lib/lib.js';\nexport { serverGenerator } from './generators/server/server.js';\nexport { toolGenerator } from './generators/tool/tool.js';\nexport { resourceGenerator } from './generators/resource/resource.js';\nexport { promptGenerator } from './generators/prompt/prompt.js';\nexport { skillGenerator } from './generators/skill/skill.js';\nexport { agentGenerator } from './generators/agent/agent.js';\nexport { providerGenerator } from './generators/provider/provider.js';\nexport { pluginGenerator } from './generators/plugin/plugin.js';\nexport { adapterGenerator } from './generators/adapter/adapter.js';\nexport { authProviderGenerator } from './generators/auth-provider/auth-provider.js';\nexport { flowGenerator } from './generators/flow/flow.js';\nexport { uiComponentGenerator } from './generators/ui-component/ui-component.js';\nexport { uiPageGenerator } from './generators/ui-page/ui-page.js';\nexport { uiShellGenerator } from './generators/ui-shell/ui-shell.js';\n\n// Utilities\nexport {\n getFrontmcpVersion,\n getFrontmcpDependencies,\n getFrontmcpDevDependencies,\n getNxDependencies,\n} from './utils/versions.js';\nexport { toClassName, toPropertyName, toFileName, toConstantName } from './utils/names.js';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-dependencies.js","sourceRoot":"","sources":["../../../src/utils/add-dependencies.ts"],"names":[],"mappings":";;AAEA,0DAOC;AATD,uCAA6F;AAE7F,SAAgB,uBAAuB,CACrC,IAAU,EACV,YAAoC,EACpC,kBAA0C,EAAE,EAC5C,UAA8C,EAAE;IAEhD,OAAO,IAAA,qCAA4B,EAAC,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;AACpH,CAAC","sourcesContent":["import { addDependenciesToPackageJson, type GeneratorCallback, type Tree } from '@nx/devkit';\n\nexport function addFrontmcpDependencies(\n tree: Tree,\n dependencies: Record<string, string>,\n devDependencies: Record<string, string> = {},\n options: { keepExistingVersions?: boolean } = {},\n): GeneratorCallback {\n return addDependenciesToPackageJson(tree, dependencies, devDependencies, undefined, options.keepExistingVersions);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"names.js","sourceRoot":"","sources":["../../../src/utils/names.ts"],"names":[],"mappings":";;AAEA,kCAEC;AAED,wCAEC;AAED,gCAEC;AAED,wCAEC;AAED,kDAKC;AAvBD,uCAAmC;AAEnC,SAAgB,WAAW,CAAC,IAAY;IACtC,OAAO,IAAA,cAAK,EAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AAC/B,CAAC;AAED,SAAgB,cAAc,CAAC,IAAY;IACzC,OAAO,IAAA,cAAK,EAAC,IAAI,CAAC,CAAC,YAAY,CAAC;AAClC,CAAC;AAED,SAAgB,UAAU,CAAC,IAAY;IACrC,OAAO,IAAA,cAAK,EAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;AAC9B,CAAC;AAED,SAAgB,cAAc,CAAC,IAAY;IACzC,OAAO,IAAA,cAAK,EAAC,IAAI,CAAC,CAAC,YAAY,CAAC;AAClC,CAAC;AAED,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI;SACR,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,WAAW,EAAE,CAAC;AACnB,CAAC","sourcesContent":["import { names } from '@nx/devkit';\n\nexport function toClassName(name: string): string {\n return names(name).className;\n}\n\nexport function toPropertyName(name: string): string {\n return names(name).propertyName;\n}\n\nexport function toFileName(name: string): string {\n return names(name).fileName;\n}\n\nexport function toConstantName(name: string): string {\n return names(name).constantName;\n}\n\nexport function sanitizeProjectName(name: string): string {\n return name\n .replace(/[^a-zA-Z0-9-]/g, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"normalize-options.js","sourceRoot":"","sources":["../../../src/utils/normalize-options.ts"],"names":[],"mappings":";;AAoBA,8DA+BC;AAnDD,uCAAuE;AAEvE,yCAAwC;AAkBxC,SAAgB,yBAAyB,CACvC,IAAU,EACV,MAA2B,EAC3B,YAAoB;IAEpB,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IACnC,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,YAAY,MAAM,CAAC,OAAO,+BAA+B,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC;IACvC,MAAM,iBAAiB,GAAG,aAAa,CAAC,UAAU,IAAI,IAAA,0BAAiB,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,IAAA,qBAAU,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEzC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,YAAY,CAAgC,CAAC;IACvE,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;IAE/C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;QAChC,CAAC,CAAC,IAAA,0BAAiB,EAAC,iBAAiB,EAAE,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC;QACtE,CAAC,CAAC,IAAA,0BAAiB,EAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;IAEvD,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW;QACX,iBAAiB;QACjB,QAAQ;QACR,SAAS;QACT,SAAS;KACV,CAAC;AACJ,CAAC","sourcesContent":["import { getProjects, joinPathFragments, type Tree } from '@nx/devkit';\n\nimport { toFileName } from './names.js';\n\nexport interface NormalizedPrimitiveOptions {\n name: string;\n project: string;\n projectRoot: string;\n projectSourceRoot: string;\n fileName: string;\n className: string;\n directory: string;\n}\n\nexport interface PrimitiveSchemaBase {\n name: string;\n project: string;\n directory?: string;\n}\n\nexport function normalizePrimitiveOptions(\n tree: Tree,\n schema: PrimitiveSchemaBase,\n subdirectory: string,\n): NormalizedPrimitiveOptions {\n const projects = getProjects(tree);\n const projectConfig = projects.get(schema.project);\n if (!projectConfig) {\n throw new Error(`Project \"${schema.project}\" not found in the workspace.`);\n }\n\n const projectRoot = projectConfig.root;\n const projectSourceRoot = projectConfig.sourceRoot ?? joinPathFragments(projectRoot, 'src');\n const fileName = toFileName(schema.name);\n\n const { names } = require('@nx/devkit') as typeof import('@nx/devkit');\n const className = names(schema.name).className;\n\n const directory = schema.directory\n ? joinPathFragments(projectSourceRoot, subdirectory, schema.directory)\n : joinPathFragments(projectSourceRoot, subdirectory);\n\n return {\n name: schema.name,\n project: schema.project,\n projectRoot,\n projectSourceRoot,\n fileName,\n className,\n directory,\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../src/utils/package-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger, readJson, readNxJson, updateJson, type Tree } from '@nx/devkit';\n\nexport type WorkspacePackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun';\n\n/** Commands a generated Dockerfile runs, from the workspace root. */\nexport interface DockerPackageManagerCommands {\n /** Makes the package manager available on the `node` image, when npm isn't it. */\n setup?: string;\n /** `NAME=value` the builder stage sets before installing, so the install lays out `node_modules`. */\n env?: string;\n /** Installs exactly what the lockfile records, without lifecycle scripts. */\n installFrozen: string;\n /** Removes dev dependencies from the installed `node_modules`. */\n pruneProduction: string;\n}\n\nexport interface PackageManagerCommands {\n /** Installs the workspace dependencies. */\n install: string;\n /** Runs a locally installed bin, e.g. `npx nx`. */\n exec: string;\n docker: DockerPackageManagerCommands;\n}\n\nconst COMMANDS: Record<WorkspacePackageManager, PackageManagerCommands> = {\n npm: {\n install: 'npm install',\n exec: 'npx',\n docker: { installFrozen: 'npm ci --ignore-scripts', pruneProduction: 'npm prune --omit=dev' },\n },\n yarn: {\n install: 'yarn install',\n exec: 'yarn',\n docker: {\n setup: 'corepack enable',\n env: 'YARN_NODE_LINKER=node-modules',\n installFrozen: 'yarn install --immutable --mode=skip-build',\n pruneProduction: 'yarn workspaces focus --all --production',\n },\n },\n pnpm: {\n install: 'pnpm install',\n exec: 'pnpm exec',\n docker: {\n setup: 'corepack enable',\n installFrozen: 'pnpm install --frozen-lockfile --ignore-scripts',\n pruneProduction: 'pnpm prune --prod --ignore-scripts',\n },\n },\n bun: {\n install: 'bun install',\n exec: 'bunx',\n docker: {\n setup: 'npm install -g bun',\n installFrozen: 'bun install --frozen-lockfile --ignore-scripts',\n pruneProduction: 'bun install --frozen-lockfile --production --ignore-scripts',\n },\n },\n};\n\n/** Yarn 1 has no `.yarnrc.yml`, `--immutable` or `workspaces focus`. */\nconst YARN_CLASSIC_DOCKER: DockerPackageManagerCommands = {\n setup: 'corepack enable',\n installFrozen: 'yarn install --frozen-lockfile --ignore-scripts',\n pruneProduction: 'yarn install --frozen-lockfile --production --ignore-scripts',\n};\n\nconst LOCKFILES: ReadonlyArray<readonly [string, WorkspacePackageManager]> = [\n ['bun.lock', 'bun'],\n ['bun.lockb', 'bun'],\n ['pnpm-lock.yaml', 'pnpm'],\n ['yarn.lock', 'yarn'],\n ['package-lock.json', 'npm'],\n];\n\nfunction isPackageManager(value: unknown): value is WorkspacePackageManager {\n return typeof value === 'string' && Object.prototype.hasOwnProperty.call(COMMANDS, value);\n}\n\n/** The package manager the workspace uses: `nx.json` `cli.packageManager`, else its lockfile, else npm. */\nexport function detectWorkspacePackageManager(tree: Tree): WorkspacePackageManager {\n const configured = readNxJson(tree)?.cli?.packageManager;\n if (isPackageManager(configured)) return configured;\n const match = LOCKFILES.find(([lockfile]) => tree.exists(lockfile));\n return match ? match[1] : 'npm';\n}\n\nfunction rootPackageManagerField(tree: Tree): string | undefined {\n if (!tree.exists('package.json')) return undefined;\n const packageManager: unknown = readJson(tree, 'package.json').packageManager;\n return typeof packageManager === 'string' ? packageManager : undefined;\n}\n\n/** Yarn 2+ writes `.yarnrc.yml`, a `__metadata` lockfile header, or a `yarn@2+` packageManager. */\nfunction isYarnBerry(tree: Tree): boolean {\n if (tree.exists('.yarnrc.yml')) return true;\n if (/^yarn@(?!1\\.)/.test(rootPackageManagerField(tree) ?? '')) return true;\n return tree.read('yarn.lock', 'utf-8')?.includes('__metadata:') ?? false;\n}\n\nfunction pinsYarnVersion(tree: Tree): boolean {\n if (rootPackageManagerField(tree)?.startsWith('yarn@')) return true;\n return /^yarnPath:/m.test(tree.read('.yarnrc.yml', 'utf-8') ?? '');\n}\n\n/**\n * The image runs `corepack enable`, and corepack falls back to Yarn 1 unless the workspace pins a version, so a Yarn\n * Berry workspace without a pin gets the Yarn version the generator runs under as its `packageManager`.\n */\nexport function ensureYarnBerryPinned(tree: Tree, userAgent = process.env['npm_config_user_agent']): void {\n if (detectWorkspacePackageManager(tree) !== 'yarn' || !isYarnBerry(tree) || pinsYarnVersion(tree)) return;\n const runningYarnVersion = /\\byarn\\/(\\d+\\.\\d+\\.\\d+)/.exec(userAgent ?? '')?.[1];\n if (runningYarnVersion && !runningYarnVersion.startsWith('1.') && tree.exists('package.json')) {\n updateJson(tree, 'package.json', (json) => ({ ...json, packageManager: `yarn@${runningYarnVersion}` }));\n return;\n }\n logger.warn(\n 'The workspace uses Yarn Berry but pins no Yarn version, so the Docker image would install with Yarn 1. ' +\n 'Run `yarn set version <version>` to add a packageManager field before building the image.',\n );\n}\n\nexport function getPackageManagerCommands(tree: Tree): PackageManagerCommands {\n const packageManager = detectWorkspacePackageManager(tree);\n if (packageManager === 'yarn' && !isYarnBerry(tree)) {\n return { ...COMMANDS.yarn, docker: YARN_CLASSIC_DOCKER };\n }\n return COMMANDS[packageManager];\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-paths.js","sourceRoot":"","sources":["../../../src/utils/project-paths.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\n\nimport { offsetFromRoot, readJson, updateJson, type Tree } from '@nx/devkit';\n\nexport interface ProjectPaths {\n /** Project root relative to the Nx workspace root (what project.json must contain). */\n projectRoot: string;\n /** Relative path from the project root back to the workspace root, with a trailing slash. */\n offset: string;\n}\n\nfunction normalizeDirectory(value: string): string {\n let result = value.replace(/\\\\/g, '/');\n if (result.startsWith('./')) result = result.slice(2);\n let end = result.length;\n while (end > 0 && result[end - 1] === '/') end--;\n return result.slice(0, end);\n}\n\n/**\n * `directory` is relative to the tree root. When the tree root sits above the\n * workspace (the `workspace` generator scaffolds into `<name>/`), pass that\n * folder as `workspaceRoot` so the paths written into project files are\n * relative to the workspace itself.\n */\nexport function resolveProjectPaths(directory: string, workspaceRoot?: string): ProjectPaths {\n const normalized = normalizeDirectory(directory);\n const base = normalizeDirectory(workspaceRoot ?? '');\n const projectRoot = base && normalized.startsWith(`${base}/`) ? normalized.slice(base.length + 1) : normalized;\n return { projectRoot, offset: offsetFromRoot(projectRoot) };\n}\n\n/** Major version of the workspace's TypeScript: the installed compiler first, then the declared range. */\nexport function getTypeScriptMajor(tree: Tree, workspaceRoot?: string): number | undefined {\n const root = workspaceRoot ?? '';\n const installed = join(tree.root, root, 'node_modules', 'typescript', 'package.json');\n let range: string | undefined;\n try {\n if (existsSync(installed)) {\n range = (JSON.parse(readFileSync(installed, 'utf8')) as { version?: string }).version;\n }\n } catch {\n range = undefined;\n }\n if (!range) {\n const pkgPath = join(root, 'package.json');\n if (tree.exists(pkgPath)) {\n const pkg = JSON.parse(tree.read(pkgPath, 'utf-8') ?? '{}') as {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n range = pkg.devDependencies?.['typescript'] ?? pkg.dependencies?.['typescript'];\n }\n }\n const major = Number(range?.match(/\\d+/)?.[0]);\n return Number.isFinite(major) ? major : undefined;\n}\n\nexport type ProjectModuleResolution = 'bundler' | 'node10';\n\n/**\n * `frontmcp build` compiles a project with `--module commonjs`. TypeScript 5 pairs CommonJS only with\n * `node10`; TypeScript 6 deprecates `node10` (TS5107, removed in 7) and accepts `bundler` with CommonJS.\n */\nexport function getModuleResolution(tree: Tree, workspaceRoot?: string): ProjectModuleResolution {\n const major = getTypeScriptMajor(tree, workspaceRoot);\n return major !== undefined && major >= 6 ? 'bundler' : 'node10';\n}\n\nfunction readBaseCompilerOptions(tree: Tree, workspaceRoot?: string): Record<string, unknown> {\n const basePath = join(workspaceRoot ?? '', 'tsconfig.base.json');\n if (!tree.exists(basePath)) return {};\n try {\n return readJson<{ compilerOptions?: Record<string, unknown> }>(tree, basePath).compilerOptions ?? {};\n } catch {\n return {};\n }\n}\n\nexport interface ProjectTsOptions {\n moduleResolution: ProjectModuleResolution;\n /**\n * Nx TS-solution workspaces set `customConditions` in `tsconfig.base.json`, which `node10` rejects\n * (TS5098). A project resolving with `node10` then has to reset it.\n */\n resetCustomConditions: boolean;\n}\n\n/** Compiler options a FrontMCP project's `tsconfig.json` sets so it builds in any workspace. */\nexport function getProjectTsOptions(tree: Tree, workspaceRoot?: string): ProjectTsOptions {\n const moduleResolution = getModuleResolution(tree, workspaceRoot);\n const base = readBaseCompilerOptions(tree, workspaceRoot);\n return {\n moduleResolution,\n resetCustomConditions: moduleResolution === 'node10' && base['customConditions'] !== undefined,\n };\n}\n\n/**\n * Register a `paths` alias in `tsconfig.base.json` (when the workspace has one). The target is written\n * relative (`./libs/x/src/index.ts`): without a `baseUrl` — Nx TS-solution workspaces, TypeScript 6 —\n * a bare `libs/...` target is an error (TS5090), and with `baseUrl: \".\"` both spellings resolve alike.\n */\nexport function addTsPathAlias(tree: Tree, alias: string, target: string, options: { overwrite?: boolean } = {}): void {\n if (!tree.exists('tsconfig.base.json')) return;\n const relativeTarget = target.startsWith('./') || target.startsWith('../') ? target : `./${target}`;\n updateJson(tree, 'tsconfig.base.json', (json: { compilerOptions?: { paths?: Record<string, string[]> } }) => {\n const compilerOptions = json.compilerOptions ?? {};\n const paths = compilerOptions.paths ?? {};\n if (options.overwrite !== false || !paths[alias]) {\n paths[alias] = [relativeTarget];\n }\n compilerOptions.paths = paths;\n json.compilerOptions = compilerOptions;\n return json;\n });\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/utils/versions.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from 'fs';\nimport { join } from 'path';\n\nimport { readJsonFile } from '@nx/devkit';\n\nlet cachedVersion: string | undefined;\n\nfunction readPluginVersion(): string {\n if (cachedVersion) return cachedVersion;\n\n // Walk up from __dirname to find the @frontmcp/nx package.json.\n // In monorepo (src/utils/ or dist/utils/): ../../package.json\n // When published to npm (utils/): ../package.json\n let dir = __dirname;\n for (let i = 0; i < 4; i++) {\n dir = join(dir, '..');\n const candidate = join(dir, 'package.json');\n if (!existsSync(candidate)) continue;\n const pkg = readJsonFile<{ name?: string; version?: unknown }>(candidate);\n if (pkg.name === '@frontmcp/nx' && typeof pkg.version === 'string') {\n cachedVersion = pkg.version;\n return cachedVersion;\n }\n }\n\n throw new Error(`@frontmcp/nx package.json not found (searched from ${__dirname})`);\n}\n\nexport function getFrontmcpVersion(): string {\n return readPluginVersion();\n}\n\nexport function getFrontmcpDependencies(): Record<string, string> {\n const range = `~${getFrontmcpVersion()}`;\n return {\n '@frontmcp/sdk': range,\n frontmcp: range,\n 'reflect-metadata': '^0.2.2',\n zod: '^4.0.0',\n };\n}\n\nexport function getFrontmcpDevDependencies(): Record<string, string> {\n const range = `~${getFrontmcpVersion()}`;\n return {\n '@frontmcp/testing': range,\n };\n}\n\n/** What `frontmcp test` and the generated `jest.config.cjs` need in the workspace. */\nexport function getJestDevDependencies(): Record<string, string> {\n return {\n '@swc/core': '~1.15.8',\n '@swc/helpers': '~0.5.18',\n '@swc/jest': '~0.2.39',\n '@types/jest': '^30.0.0',\n '@types/node': '^24.0.0',\n jest: '^30.0.2',\n };\n}\n\nconst NX_VERSION = '22.6.4';\n\n/**\n * The esbuild the generated workspace installs. It must satisfy the `esbuild` peer range of\n * `@frontmcp/uipack` (`>=0.27`) and matches the range the `frontmcp` CLI depends on, so the\n * workspace resolves a single copy. `versions.spec.ts` checks both against the monorepo.\n */\nconst ESBUILD_VERSION = '^0.27.3';\n\nexport function getNxVersion(): string {\n return NX_VERSION;\n}\n\nexport function getEsbuildVersion(): string {\n return ESBUILD_VERSION;\n}\n\n/**\n * What `frontmcp build --target lambda` needs: the generated handler wraps the server with\n * `@codegenie/serverless-express`, and the build refuses to run without it.\n */\nexport function getLambdaDependencies(): Record<string, string> {\n return {\n '@codegenie/serverless-express': '^5.0.0',\n };\n}\n\n/** What the `@nx/esbuild` build targets of the generated UI packages need. */\nexport function getUiBuildDevDependencies(): Record<string, string> {\n return {\n '@nx/esbuild': NX_VERSION,\n esbuild: ESBUILD_VERSION,\n };\n}\n\nexport function getNxDependencies(): Record<string, string> {\n return {\n nx: NX_VERSION,\n '@nx/devkit': NX_VERSION,\n '@nx/js': NX_VERSION,\n '@nx/eslint': NX_VERSION,\n '@nx/jest': NX_VERSION,\n '@nx/esbuild': NX_VERSION,\n };\n}\n\nexport function getNxDevDependencies(): Record<string, string> {\n return {\n '@nx/workspace': NX_VERSION,\n '@swc-node/register': '~1.11.1',\n '@swc/core': '~1.15.8',\n '@swc/helpers': '~0.5.18',\n '@swc/jest': '~0.2.39',\n '@types/jest': '^30.0.0',\n '@types/node': '^24.0.0',\n jest: '^30.0.2',\n typescript: '~5.9.2',\n tslib: '^2.3.0',\n prettier: '~3.6.2',\n };\n}\n"]}