@khester/create-dynamics-app 1.1.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/README.md +46 -0
  2. package/dist/artifacts/registry.d.ts +18 -0
  3. package/dist/artifacts/registry.d.ts.map +1 -0
  4. package/dist/artifacts/registry.js +316 -0
  5. package/dist/artifacts/registry.js.map +1 -0
  6. package/dist/artifacts/types.d.ts +113 -0
  7. package/dist/artifacts/types.d.ts.map +1 -0
  8. package/dist/artifacts/types.js +7 -0
  9. package/dist/artifacts/types.js.map +1 -0
  10. package/dist/artifacts/validators.d.ts +16 -0
  11. package/dist/artifacts/validators.d.ts.map +1 -0
  12. package/dist/artifacts/validators.js +45 -0
  13. package/dist/artifacts/validators.js.map +1 -0
  14. package/dist/fromDesign.d.ts +5 -0
  15. package/dist/fromDesign.d.ts.map +1 -0
  16. package/dist/fromDesign.js +98 -0
  17. package/dist/fromDesign.js.map +1 -0
  18. package/dist/index.js +113 -177
  19. package/dist/index.js.map +1 -1
  20. package/dist/injectDevTools.d.ts +28 -0
  21. package/dist/injectDevTools.d.ts.map +1 -0
  22. package/dist/injectDevTools.js +148 -0
  23. package/dist/injectDevTools.js.map +1 -0
  24. package/dist/scaffold.d.ts +27 -0
  25. package/dist/scaffold.d.ts.map +1 -0
  26. package/dist/scaffold.js +156 -0
  27. package/dist/scaffold.js.map +1 -0
  28. package/dist/templatePlan.d.ts +3 -0
  29. package/dist/templatePlan.d.ts.map +1 -0
  30. package/dist/templatePlan.js +43 -0
  31. package/dist/templatePlan.js.map +1 -0
  32. package/dist/utils/copyTemplate.d.ts +13 -1
  33. package/dist/utils/copyTemplate.d.ts.map +1 -1
  34. package/dist/utils/copyTemplate.js +98 -4
  35. package/dist/utils/copyTemplate.js.map +1 -1
  36. package/dist/utils/updatePackageJson.d.ts +11 -1
  37. package/dist/utils/updatePackageJson.d.ts.map +1 -1
  38. package/dist/utils/updatePackageJson.js +12 -10
  39. package/dist/utils/updatePackageJson.js.map +1 -1
  40. package/package.json +10 -7
  41. package/templates/_shared/dev-tools/auth/get-token.js +72 -0
  42. package/templates/_shared/dev-tools/dev/mock-xrm.js +42 -0
  43. package/templates/_shared/dev-tools/metadata-sync/index.js +152 -0
  44. package/templates/_shared/dev-tools/smoke/test-retrieve.js +44 -0
  45. package/templates/dialog-form/README.md +27 -0
  46. package/templates/dialog-form/_variants/App.v8.tsx +39 -0
  47. package/templates/dialog-form/_variants/App.v9.tsx +41 -0
  48. package/templates/dialog-form/gitignore +5 -0
  49. package/templates/dialog-form/package.json +27 -0
  50. package/templates/dialog-form/public/index.html +11 -0
  51. package/templates/dialog-form/src/index.tsx +10 -0
  52. package/templates/dialog-form/src/services/dataverse.ts +30 -0
  53. package/templates/dialog-form/tsconfig.json +15 -0
  54. package/templates/dialog-form/webpack.config.js +17 -0
  55. package/templates/grid-customizer/README.md +28 -0
  56. package/templates/grid-customizer/gitignore +4 -0
  57. package/templates/grid-customizer/package.json +25 -0
  58. package/templates/grid-customizer/src/GridCustomizer.ts +28 -0
  59. package/templates/grid-customizer/src/cell-renderers.tsx +35 -0
  60. package/templates/grid-customizer/src/index.ts +4 -0
  61. package/templates/grid-customizer/src/types/grid-types.ts +30 -0
  62. package/templates/grid-customizer/src/utils/color-utils.ts +24 -0
  63. package/templates/grid-customizer/tsconfig.json +15 -0
  64. package/templates/grid-customizer/webpack.config.js +17 -0
  65. package/templates/pcf-dataset/ControlManifest.Input.xml +16 -0
  66. package/templates/pcf-dataset/README.md +21 -0
  67. package/templates/pcf-dataset/gitignore +5 -0
  68. package/templates/pcf-dataset/index.ts +39 -0
  69. package/templates/pcf-dataset/package.json +30 -0
  70. package/templates/pcf-dataset/strings/{{componentName}}.1033.resx +47 -0
  71. package/templates/pcf-dataset/tsconfig.json +8 -0
  72. package/templates/pcf-dataset/{{componentName}}Component.tsx +39 -0
  73. package/templates/pcf-field/ControlManifest.Input.xml +17 -0
  74. package/templates/pcf-field/README.md +95 -0
  75. package/templates/pcf-field/_variants/ValueInput.boolean.tsx +24 -0
  76. package/templates/pcf-field/_variants/ValueInput.date.tsx +27 -0
  77. package/templates/pcf-field/_variants/ValueInput.number.tsx +35 -0
  78. package/templates/pcf-field/_variants/ValueInput.text.tsx +27 -0
  79. package/templates/pcf-field/gitignore +5 -0
  80. package/templates/pcf-field/index.ts +61 -0
  81. package/templates/pcf-field/package.json +30 -0
  82. package/templates/pcf-field/strings/{{componentName}}.1033.resx +47 -0
  83. package/templates/pcf-field/tsconfig.json +8 -0
  84. package/templates/pcf-field/{{componentName}}Component.tsx +35 -0
  85. package/templates/power-pages-starter/gitignore +5 -0
  86. package/templates/react-custom-page/gitignore +5 -0
  87. package/templates/{dynamics-365-starter → react-custom-page}/package.json +3 -3
  88. package/templates/react-custom-page/tools/metadata-sync/index.js +152 -0
  89. package/templates/static-web-app/README.md +36 -0
  90. package/templates/static-web-app/_variants/App.v8.tsx +32 -0
  91. package/templates/static-web-app/_variants/App.v9.tsx +31 -0
  92. package/templates/static-web-app/api/host.json +12 -0
  93. package/templates/static-web-app/api/package.json +19 -0
  94. package/templates/static-web-app/api/src/functions/hello.ts +16 -0
  95. package/templates/static-web-app/api/tsconfig.json +14 -0
  96. package/templates/static-web-app/frontend/index.html +12 -0
  97. package/templates/static-web-app/frontend/package.json +23 -0
  98. package/templates/static-web-app/frontend/src/index.tsx +8 -0
  99. package/templates/static-web-app/frontend/tsconfig.json +16 -0
  100. package/templates/static-web-app/frontend/vite.config.ts +13 -0
  101. package/templates/static-web-app/gitignore +8 -0
  102. package/templates/static-web-app/package.json +15 -0
  103. package/templates/static-web-app/staticwebapp.config.json +7 -0
  104. package/templates/teams-app/README.md +27 -0
  105. package/templates/teams-app/_variants/graph.off.ts +7 -0
  106. package/templates/teams-app/_variants/graph.on.ts +22 -0
  107. package/templates/teams-app/appPackage/manifest.json +26 -0
  108. package/templates/teams-app/gitignore +5 -0
  109. package/templates/teams-app/index.html +12 -0
  110. package/templates/teams-app/package.json +26 -0
  111. package/templates/teams-app/src/App.tsx +25 -0
  112. package/templates/teams-app/src/index.tsx +8 -0
  113. package/templates/teams-app/tsconfig.json +16 -0
  114. package/templates/teams-app/vite.config.ts +9 -0
  115. package/templates/web-resource/README.md +39 -0
  116. package/templates/web-resource/_variants/App.v8.tsx +29 -0
  117. package/templates/web-resource/_variants/App.v9.tsx +28 -0
  118. package/templates/web-resource/gitignore +5 -0
  119. package/templates/web-resource/package.json +27 -0
  120. package/templates/web-resource/public/index.html +11 -0
  121. package/templates/web-resource/src/index.tsx +10 -0
  122. package/templates/web-resource/src/services/dataverse.ts +30 -0
  123. package/templates/web-resource/tsconfig.json +15 -0
  124. package/templates/web-resource/webpack.config.js +17 -0
  125. package/dist/utils/consultingHelpers.d.ts +0 -13
  126. package/dist/utils/consultingHelpers.d.ts.map +0 -1
  127. package/dist/utils/consultingHelpers.js +0 -569
  128. package/dist/utils/consultingHelpers.js.map +0 -1
  129. package/templates/dynamics-365-starter/INTEGRATION_TEST_RESULTS.md +0 -302
  130. package/templates/dynamics-365-starter/PHASE_4_COMPLETION_SUMMARY.md +0 -305
  131. package/templates/dynamics-365-starter/deployment/QUICKSTART-MAC.md +0 -507
  132. package/templates/dynamics-365-starter/deployment/QUICKSTART-WINDOWS.md +0 -372
  133. package/templates/dynamics-365-starter/deployment/pipelines/README.md +0 -375
  134. package/templates/dynamics-365-starter/deployment/pipelines/azure-pipelines.yml +0 -330
  135. package/templates/dynamics-365-starter/deployment/pipelines/github-actions.yml +0 -422
  136. package/templates/dynamics-365-starter/deployment/pipelines/jenkins.groovy +0 -636
  137. package/templates/dynamics-365-starter/deployment/scripts/deploy.ps1 +0 -417
  138. package/templates/dynamics-365-starter/deployment/scripts/deploy.sh +0 -582
  139. package/templates/dynamics-365-starter/deployment/scripts/team-onboarding.ps1 +0 -486
  140. package/templates/dynamics-365-starter/deployment/scripts/team-onboarding.sh +0 -567
  141. package/templates/dynamics-365-starter/deployment/scripts/validate-setup.ps1 +0 -703
  142. package/templates/dynamics-365-starter/deployment/scripts/validate-setup.sh +0 -671
  143. package/templates/dynamics-365-starter/docs/team-standards/README.md +0 -273
  144. package/templates/dynamics-365-starter/docs/team-standards/client-onboarding.md +0 -577
  145. package/templates/dynamics-365-starter/docs/team-standards/code-review-checklist.md +0 -359
  146. package/templates/dynamics-365-starter/docs/team-standards/coding-standards.md +0 -700
  147. package/templates/dynamics-365-starter/docs/team-standards/cross-platform-team-guide.md +0 -736
  148. package/templates/dynamics-365-starter/docs/team-standards/development-workflows.md +0 -727
  149. package/templates/dynamics-365-starter/docs/troubleshooting/common-errors.md +0 -758
  150. package/templates/dynamics-365-starter/docs/troubleshooting/platform-specific-issues.md +0 -878
  151. package/templates/dynamics-365-starter/src/client-project-template/README.md +0 -234
  152. package/templates/dynamics-365-starter/src/client-project-template/config/client.template.json +0 -114
  153. package/templates/dynamics-365-starter/src/client-project-template/config/environments/template.json +0 -186
  154. package/templates/dynamics-365-starter/src/client-project-template/scripts/client-setup.js +0 -667
  155. package/templates/dynamics-365-starter/src/examples/README.md +0 -52
  156. package/templates/dynamics-365-starter/src/examples/component-examples/opportunity-management.tsx +0 -625
  157. package/templates/dynamics-365-starter/src/examples/entity-examples/opportunity-model.ts +0 -545
  158. package/templates/dynamics-365-starter/src/examples/integration-examples/custom-pcf-wrapper.tsx +0 -722
  159. package/templates/dynamics-365-starter/src/examples/workflow-examples/sales-workflow.ts +0 -662
  160. package/templates/dynamics-365-starter/src/page-templates/EntityDashboard.tsx +0 -519
  161. package/templates/dynamics-365-starter/src/page-templates/EntityDetailPage.tsx +0 -456
  162. package/templates/dynamics-365-starter/src/page-templates/EntityListPage.tsx +0 -406
  163. package/templates/dynamics-365-starter/src/page-templates/RelatedEntitiesPage.tsx +0 -578
  164. package/templates/dynamics-365-starter/src/page-templates/SearchPage.tsx +0 -629
  165. package/templates/dynamics-365-starter/tools/entity-generator/index.js +0 -168
  166. package/templates/dynamics-365-starter/tools/entity-generator/templates/constants.template.ts +0 -124
  167. package/templates/dynamics-365-starter/tools/entity-generator/templates/form.template.css +0 -283
  168. package/templates/dynamics-365-starter/tools/entity-generator/templates/form.template.tsx +0 -275
  169. package/templates/dynamics-365-starter/tools/entity-generator/templates/management.template.css +0 -204
  170. package/templates/dynamics-365-starter/tools/entity-generator/templates/management.template.tsx +0 -413
  171. package/templates/dynamics-365-starter/tools/entity-generator/templates/model.template.ts +0 -250
  172. package/templates/dynamics-365-starter/tools/metadata-sync/d365-client.js +0 -410
  173. package/templates/dynamics-365-starter/tools/metadata-sync/index.js +0 -512
  174. package/templates/dynamics-365-starter/tools/metadata-sync/type-generator.js +0 -675
  175. /package/templates/{dynamics-365-starter → react-custom-page}/README.md +0 -0
  176. /package/templates/{dynamics-365-starter → react-custom-page}/deployment/README.md +0 -0
  177. /package/templates/{dynamics-365-starter → react-custom-page}/docs/ARCHITECTURE_OVERVIEW.md +0 -0
  178. /package/templates/{dynamics-365-starter → react-custom-page}/docs/BEST_PRACTICES.md +0 -0
  179. /package/templates/{dynamics-365-starter → react-custom-page}/docs/MIGRATION_GUIDE.md +0 -0
  180. /package/templates/{dynamics-365-starter → react-custom-page}/public/index.html +0 -0
  181. /package/templates/{dynamics-365-starter → react-custom-page}/scripts/custom-build.js +0 -0
  182. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/AccountForm.css +0 -0
  183. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/AccountForm.tsx +0 -0
  184. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/AccountManagement.css +0 -0
  185. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/AccountManagement.tsx +0 -0
  186. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/ContactForm.css +0 -0
  187. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/ContactForm.tsx +0 -0
  188. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/ContactManagement.css +0 -0
  189. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/ContactManagement.tsx +0 -0
  190. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/Logging/LogDialog.tsx +0 -0
  191. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/Logging/LoggingContext.tsx +0 -0
  192. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/Logging/LoggingDebugPanel.css +0 -0
  193. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/Logging/LoggingDebugPanel.tsx +0 -0
  194. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/Logging/LoggingProvider.tsx +0 -0
  195. /package/templates/{dynamics-365-starter → react-custom-page}/src/components/Logging/logger.ts +0 -0
  196. /package/templates/{dynamics-365-starter → react-custom-page}/src/constants/account.ts +0 -0
  197. /package/templates/{dynamics-365-starter → react-custom-page}/src/constants/contact.ts +0 -0
  198. /package/templates/{dynamics-365-starter → react-custom-page}/src/index.tsx +0 -0
  199. /package/templates/{dynamics-365-starter → react-custom-page}/src/models/Account.ts +0 -0
  200. /package/templates/{dynamics-365-starter → react-custom-page}/src/models/BaseEntity.ts +0 -0
  201. /package/templates/{dynamics-365-starter → react-custom-page}/src/models/Contact.ts +0 -0
  202. /package/templates/{dynamics-365-starter → react-custom-page}/src/pcf/ContactControlWrapper.tsx +0 -0
  203. /package/templates/{dynamics-365-starter → react-custom-page}/src/pcf/MultiEntityControlWrapper.tsx +0 -0
  204. /package/templates/{dynamics-365-starter → react-custom-page}/src/providers/DynamicsProvider.tsx +0 -0
  205. /package/templates/{dynamics-365-starter → react-custom-page}/src/services/MockApiService.ts +0 -0
  206. /package/templates/{dynamics-365-starter → react-custom-page}/src/services/ServiceFactory.ts +0 -0
  207. /package/templates/{dynamics-365-starter → react-custom-page}/src/services/XrmApiService.ts +0 -0
  208. /package/templates/{dynamics-365-starter → react-custom-page}/src/styles/index.css +0 -0
  209. /package/templates/{dynamics-365-starter → react-custom-page}/tsconfig.json +0 -0
  210. /package/templates/{dynamics-365-starter → react-custom-page}/webpack.config.js +0 -0
@@ -0,0 +1,98 @@
1
+ /**
2
+ * From-design scaffolding: turn a form-builder export (a FormBuilderProject JSON)
3
+ * into a deployable artifact by running the export engine's generators.
4
+ *
5
+ * `previewExport` returns the full project as `GeneratedFile[]` (host + form code +
6
+ * a design-derived data-access layer + its own token tooling) for the artifact's
7
+ * export target; we write those to disk. The v9-required gate is checked first via
8
+ * `validateExportTarget`, which RETURNS a result (it does not throw).
9
+ *
10
+ * NOTE: the output is structurally DIFFERENT from the blank-starter templates — it
11
+ * is generated by @dataverse-kit/export-engine (e.g. a CRA-based web resource), ships
12
+ * its OWN token tooling, and is recorded by `package.json.dynamicsKit.artifact`. The
13
+ * driver therefore skips create-app's dev-tools injection for from-design.
14
+ */
15
+ import fs from 'fs-extra';
16
+ import path from 'path';
17
+ import chalk from 'chalk';
18
+ import { previewExport, validateExportTarget } from '@dataverse-kit/export-engine';
19
+ /** Export targets the export engine can generate from a design. */
20
+ const EXPORTABLE = ['web-resource', 'pcf', 'static-web-app'];
21
+ /** The export-engine target for an artifact, or undefined if from-design is unsupported. */
22
+ function exportTargetOf(descriptor) {
23
+ return EXPORTABLE.find((t) => t === descriptor.exportTarget);
24
+ }
25
+ /** Whether `--from-design` is available for an artifact. */
26
+ export function supportsFromDesign(descriptor) {
27
+ return exportTargetOf(descriptor) !== undefined;
28
+ }
29
+ export async function scaffoldFromDesign(descriptor, projectName, projectPath, library, designPath) {
30
+ const target = exportTargetOf(descriptor);
31
+ if (!target) {
32
+ console.error(chalk.red(`āŒ --from-design is not supported for "${descriptor.id}".`) +
33
+ ` Supported targets: web-resource, pcf, static-web-app.`);
34
+ process.exit(1);
35
+ return;
36
+ }
37
+ if (!(await fs.pathExists(designPath))) {
38
+ console.error(chalk.red(`āŒ Design file not found: ${designPath}`));
39
+ process.exit(1);
40
+ }
41
+ let project;
42
+ try {
43
+ project = (await fs.readJson(designPath));
44
+ }
45
+ catch (e) {
46
+ console.error(chalk.red(`āŒ Design file is not valid JSON: ${String(e)}`));
47
+ process.exit(1);
48
+ return;
49
+ }
50
+ if (!Array.isArray(project.forms) || project.forms.length === 0) {
51
+ console.error(chalk.red('āŒ Design file has no `forms` — is it a FormBuilderProject export?'));
52
+ process.exit(1);
53
+ }
54
+ const options = {
55
+ target,
56
+ projectName,
57
+ includeDeployScript: false,
58
+ minify: false,
59
+ exportMethod: 'folder',
60
+ ...(library ? { componentLibrary: library } : {}),
61
+ };
62
+ // The v9-required gate RETURNS a result; it does not throw.
63
+ const check = validateExportTarget(project, options);
64
+ if (!check.ok) {
65
+ console.error(chalk.red('\nāŒ This design uses Fluent v9-only controls but resolves to Fluent v8'));
66
+ console.error(chalk.gray(' (from your --v8/--library flag or the project default):'));
67
+ for (const ref of check.reason.required) {
68
+ const control = ref.controlType ?? JSON.stringify(ref);
69
+ const form = ref.formName;
70
+ console.error(chalk.gray(` - ${control}${form ? ` on form "${form}"` : ''}`));
71
+ }
72
+ console.error(chalk.cyan('\n Re-run with --v9 to generate Fluent v9 output.\n'));
73
+ process.exit(1);
74
+ }
75
+ let files;
76
+ try {
77
+ files = previewExport(project, options);
78
+ }
79
+ catch (e) {
80
+ console.error(chalk.red('āŒ Could not generate from this design — it parsed as JSON but is not a complete FormBuilderProject.'));
81
+ console.error(chalk.gray(String(e instanceof Error ? e.message : e)));
82
+ process.exit(1);
83
+ return;
84
+ }
85
+ // Write each generated file, refusing any path that escapes the project directory.
86
+ const projectRoot = path.resolve(projectPath);
87
+ for (const file of files) {
88
+ const dest = path.resolve(projectRoot, file.path);
89
+ if (dest !== projectRoot && !dest.startsWith(projectRoot + path.sep)) {
90
+ console.error(chalk.red(`āŒ Generated file path escapes the project directory: ${file.path}`));
91
+ process.exit(1);
92
+ }
93
+ await fs.outputFile(dest, file.content);
94
+ }
95
+ console.log(chalk.green(` āœ“ Generated ${files.length} files from ${project.forms.length} form(s) in "${project.name}".`));
96
+ console.log(chalk.gray(' ā„¹ļø The export engine generated a typed data layer + token tooling — see the project README.'));
97
+ }
98
+ //# sourceMappingURL=fromDesign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fromDesign.js","sourceRoot":"","sources":["../src/fromDesign.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,218 +5,154 @@ import chalk from 'chalk';
5
5
  import path from 'path';
6
6
  import fs from 'fs-extra';
7
7
  import { copyTemplate } from './utils/copyTemplate.js';
8
+ import { applyTemplatePlan } from './templatePlan.js';
9
+ import { injectDevTools, applyConditionalDeps } from './injectDevTools.js';
10
+ import { scaffoldFromDesign, supportsFromDesign } from './fromDesign.js';
8
11
  import { updatePackageJson } from './utils/updatePackageJson.js';
9
12
  import { installDependencies } from './utils/installDependencies.js';
10
13
  import { initGit } from './utils/initGit.js';
11
- import { generateEntities, generatePageTemplates, customizeForDeployment, } from './utils/consultingHelpers.js';
14
+ import { ARTIFACTS } from './artifacts/registry.js';
15
+ import { validateProjectName } from './artifacts/validators.js';
16
+ import { CLI_VERSION, resolveArtifact, resolveLibraryFromFlags, runArtifactPrompts, buildTemplateVariables, } from './scaffold.js';
12
17
  const program = new Command();
13
18
  program
14
19
  .name('create-dynamics-app')
15
- .description('Create a new Dynamics UI Kit project - Enterprise Consulting Edition')
16
- .version('2.0.0')
20
+ .description('Scaffold Dynamics 365 / Power Platform artifacts (unified CLI)')
21
+ .version(CLI_VERSION)
17
22
  .argument('<project-name>', 'name of the project')
18
- .option('-t, --template <template>', 'template to use (power-pages, dynamics-365)')
19
- .option('-c, --client-name <name>', 'client name for project customization')
20
- .option('-e, --entities <entities>', 'comma-separated list of entities to generate (e.g., "opportunity,quote,invoice")')
21
- .option('-p, --page-type <type>', 'specific page template (entity-list, entity-detail, entity-dashboard, search, related-entities)')
22
- .option('-d, --deployment-target <target>', 'target environment (dev, test, prod)')
23
- .option('--generate-sample', 'generate sample entities and pages for demonstration')
23
+ .option('-a, --artifact <id>', `artifact type (${ARTIFACTS.filter((a) => a.available).map((a) => a.id).join(', ')})`)
24
+ .option('-t, --template <template>', '[deprecated] legacy template flag')
25
+ .option('-l, --library <library>', 'component library: fluent-v8 (default) or fluent-v9')
26
+ .option('--v8', 'shorthand for --library fluent-v8')
27
+ .option('--v9', 'shorthand for --library fluent-v9')
28
+ .option('-n, --namespace <namespace>', 'namespace for PCF control')
29
+ .option('--component-name <name>', 'component name for PCF control')
30
+ .option('--property-type <type>', 'PCF bound property type (e.g. SingleLine.Text, TwoOptions)')
31
+ .option('--graph', 'include Microsoft Graph integration (teams-app)')
32
+ .option('--from-design <file>', 'generate from a form-builder export (FormBuilderProject JSON)')
24
33
  .option('--skip-git', 'skip git repository initialization')
25
34
  .option('--skip-install', 'skip dependency installation')
26
35
  .action(async (projectName, options) => {
27
36
  try {
28
- console.log(chalk.cyan(`\nšŸš€ Creating ${projectName} - Enterprise Consulting Edition...\n`));
29
37
  // Validate project name
30
- if (!projectName ||
31
- projectName.includes('/') ||
32
- projectName.includes('\\')) {
33
- console.error(chalk.red('āŒ Please provide a valid project name'));
38
+ const nameCheck = validateProjectName(projectName);
39
+ if (nameCheck !== true) {
40
+ console.error(chalk.red(`āŒ ${nameCheck}`));
41
+ process.exit(1);
42
+ }
43
+ if (options.fromDesign && options.template) {
44
+ console.error(chalk.red('āŒ --from-design cannot be combined with the deprecated --template; use --artifact.'));
34
45
  process.exit(1);
35
46
  }
36
47
  const projectPath = path.resolve(process.cwd(), projectName);
37
- // Check if directory already exists
38
48
  if (await fs.pathExists(projectPath)) {
39
49
  console.error(chalk.red(`āŒ Directory ${projectName} already exists`));
40
50
  process.exit(1);
41
51
  }
42
- let template = options.template;
43
- let clientName = options.clientName;
44
- let entities = options.entities;
45
- let pageType = options.pageType;
46
- let deploymentTarget = options.deploymentTarget;
47
- // Enhanced prompts for consulting workflow
48
- if (!template) {
49
- const answers = await inquirer.prompt([
50
- {
51
- type: 'list',
52
- name: 'template',
53
- message: 'Which template would you like to use?',
54
- choices: [
55
- {
56
- name: '🌐 Power Pages - For Power Pages portal development',
57
- value: 'power-pages',
58
- },
59
- {
60
- name: '⚔ Dynamics 365 - For Dynamics 365 custom controls and forms (Recommended for consulting)',
61
- value: 'dynamics-365',
62
- },
63
- ],
64
- },
65
- ]);
66
- template = answers.template;
52
+ const descriptor = await resolveArtifact(options);
53
+ if (options.fromDesign && !supportsFromDesign(descriptor)) {
54
+ console.error(chalk.red(`āŒ --from-design is not supported for "${descriptor.id}".`) +
55
+ ' Supported targets: web-resource, pcf, static-web-app.');
56
+ process.exit(1);
67
57
  }
68
- // Consulting-specific prompts for Dynamics 365 template
69
- if (template === 'dynamics-365') {
70
- const consultingAnswers = await inquirer.prompt([
71
- {
72
- type: 'input',
73
- name: 'clientName',
74
- message: 'Client name (for project customization):',
75
- default: clientName || 'Client',
76
- when: !clientName,
77
- },
78
- {
79
- type: 'input',
80
- name: 'entities',
81
- message: 'Entities to generate (comma-separated, e.g., "opportunity,quote,invoice"):',
82
- default: entities || '',
83
- when: !entities && !options.generateSample,
84
- },
85
- {
86
- type: 'list',
87
- name: 'pageType',
88
- message: 'Primary page template to include:',
89
- choices: [
90
- {
91
- name: 'šŸ“‹ Entity List - Standard CRUD list page',
92
- value: 'entity-list',
93
- },
94
- {
95
- name: 'šŸ“„ Entity Detail - Master-detail view',
96
- value: 'entity-detail',
97
- },
98
- {
99
- name: 'šŸ“Š Entity Dashboard - KPI and analytics view',
100
- value: 'entity-dashboard',
101
- },
102
- { name: 'šŸ” Search Page - Cross-entity search', value: 'search' },
103
- {
104
- name: 'šŸ”— Related Entities - Master-detail relationships',
105
- value: 'related-entities',
106
- },
107
- {
108
- name: 'šŸŽÆ All Templates - Include all page templates',
109
- value: 'all',
110
- },
111
- ],
112
- default: pageType || 'all',
113
- when: !pageType,
114
- },
115
- {
116
- type: 'list',
117
- name: 'deploymentTarget',
118
- message: 'Primary deployment target:',
119
- choices: [
58
+ console.log(chalk.cyan(`\nšŸš€ Creating ${projectName} — ${descriptor.label}\n`));
59
+ // Resolve the library + (blank path) prompts/vars BEFORE creating the directory,
60
+ // so an input-validation failure exits without leaving an orphaned project dir.
61
+ let library;
62
+ // `vars` is only used by the blank path (drives conditionalDeps).
63
+ let vars;
64
+ if (options.fromDesign) {
65
+ // Library comes from flags; export-engine resolves it from the design when unset.
66
+ library = resolveLibraryFromFlags(options);
67
+ }
68
+ else {
69
+ if (descriptor.supportsLibraryChoice) {
70
+ library = resolveLibraryFromFlags(options);
71
+ if (!library && !process.stdin.isTTY) {
72
+ library = descriptor.defaultLibrary ?? 'fluent-v8';
73
+ }
74
+ if (!library) {
75
+ const reply = await inquirer.prompt([
120
76
  {
121
- name: 'šŸ› ļø Development - Local development environment',
122
- value: 'dev',
77
+ type: 'list',
78
+ name: 'library',
79
+ message: 'Fluent UI version for generated output:',
80
+ choices: [
81
+ { name: 'Fluent UI v8 (Power Pages / Canvas PCF safe)', value: 'fluent-v8' },
82
+ { name: 'Fluent UI v9 (modern)', value: 'fluent-v9' },
83
+ ],
84
+ default: descriptor.defaultLibrary ?? 'fluent-v8',
123
85
  },
124
- { name: '🧪 Test - Testing environment', value: 'test' },
125
- { name: 'šŸš€ Production - Production environment', value: 'prod' },
126
- ],
127
- default: deploymentTarget || 'dev',
128
- when: !deploymentTarget,
129
- },
130
- {
131
- type: 'confirm',
132
- name: 'generateSample',
133
- message: 'Generate sample entities and pages for demonstration?',
134
- default: options.generateSample || false,
135
- when: !options.generateSample && !entities,
136
- },
137
- ]);
138
- clientName = clientName || consultingAnswers.clientName;
139
- entities = entities || consultingAnswers.entities;
140
- pageType = pageType || consultingAnswers.pageType;
141
- deploymentTarget =
142
- deploymentTarget || consultingAnswers.deploymentTarget;
143
- options.generateSample =
144
- options.generateSample || consultingAnswers.generateSample;
145
- }
146
- // Validate template
147
- if (!template || !['power-pages', 'dynamics-365'].includes(template)) {
148
- console.error(chalk.red('āŒ Invalid template. Choose power-pages or dynamics-365'));
149
- process.exit(1);
86
+ ]);
87
+ library = reply.library;
88
+ }
89
+ }
90
+ const answers = await runArtifactPrompts(descriptor, projectName, options);
91
+ vars = buildTemplateVariables(descriptor, projectName, answers, library);
150
92
  }
151
- // Create project directory
93
+ // From here on we touch the filesystem. Clean up the created directory on any
94
+ // failure so a transient error doesn't permanently block a retry (create refuses
95
+ // a non-empty directory).
152
96
  await fs.ensureDir(projectPath);
153
- // Copy template files
154
- await copyTemplate(template, projectPath);
155
- // Update package.json with project name and client info
156
- await updatePackageJson(projectPath, projectName, clientName);
157
- // Generate entities if specified
158
- if (template === 'dynamics-365' && (entities || options.generateSample)) {
159
- await generateEntities(projectPath, entities, options.generateSample);
160
- }
161
- // Generate page templates if specified
162
- if (template === 'dynamics-365' && pageType) {
163
- await generatePageTemplates(projectPath, pageType, entities, options.generateSample);
164
- }
165
- // Customize for deployment target
166
- if (deploymentTarget) {
167
- await customizeForDeployment(projectPath, deploymentTarget);
168
- }
169
- // Initialize git repository
170
- if (!options.skipGit) {
171
- await initGit(projectPath);
97
+ try {
98
+ if (options.fromDesign) {
99
+ await scaffoldFromDesign(descriptor, projectName, projectPath, library, options.fromDesign);
100
+ }
101
+ else {
102
+ await copyTemplate(descriptor.templateDir, projectPath, vars);
103
+ await applyTemplatePlan(projectPath, descriptor, vars);
104
+ }
105
+ const provenance = {
106
+ cliVersion: CLI_VERSION,
107
+ artifact: descriptor.id,
108
+ componentLibrary: library,
109
+ templateVersion: descriptor.templateVersion,
110
+ };
111
+ await updatePackageJson(projectPath, projectName, { provenance });
112
+ // From-design output ships the export engine's own tooling — don't inject ours
113
+ // (a second, incompatible token chain) on top. Blank starters get the dev-tools.
114
+ if (!options.fromDesign) {
115
+ await injectDevTools(projectPath, descriptor.devTools);
116
+ if (vars)
117
+ await applyConditionalDeps(projectPath, descriptor, vars);
118
+ }
119
+ if (!options.skipGit) {
120
+ await initGit(projectPath);
121
+ }
122
+ if (!options.skipInstall) {
123
+ await installDependencies(projectPath);
124
+ }
172
125
  }
173
- // Install dependencies
174
- if (!options.skipInstall) {
175
- await installDependencies(projectPath);
126
+ catch (err) {
127
+ await fs.remove(projectPath).catch(() => undefined);
128
+ throw err;
176
129
  }
177
- // Success message with consulting-specific information
178
130
  console.log(chalk.green(`\nāœ… Successfully created ${projectName}!\n`));
179
- if (clientName) {
180
- console.log(chalk.blue(`šŸ‘¤ Client: ${clientName}`));
181
- }
182
- if (entities) {
183
- console.log(chalk.blue(`šŸ“Š Generated entities: ${entities}`));
184
- }
185
- if (pageType && pageType !== 'all') {
186
- console.log(chalk.blue(`šŸ“„ Page template: ${pageType}`));
187
- }
188
- if (deploymentTarget) {
189
- console.log(chalk.blue(`šŸŽÆ Deployment target: ${deploymentTarget}`));
190
- }
191
- console.log(chalk.cyan('\nšŸ“ Next steps:'));
131
+ console.log(chalk.cyan('šŸ“ Next steps:'));
192
132
  console.log(` cd ${projectName}`);
193
- if (options.skipInstall) {
133
+ if (options.skipInstall)
194
134
  console.log(' npm install');
195
- }
196
- if (template === 'power-pages') {
135
+ if (descriptor.id === 'power-pages') {
197
136
  console.log(' npm run dev # Start development server');
198
137
  console.log(' npm run build # Build for production');
199
- console.log("\nšŸ“– Don't forget to:");
200
- console.log(' - Copy .env.example to .env');
201
- console.log(' - Set your PORTAL_URL in .env');
138
+ console.log("\nšŸ“– Don't forget to copy .env.example to .env and set PORTAL_URL.");
139
+ }
140
+ else if (descriptor.id === 'pcf-field' || descriptor.id === 'pcf-dataset') {
141
+ console.log(' npm run build # Build the control');
142
+ console.log(' npm start # Start the PCF test harness');
202
143
  }
203
144
  else {
204
- console.log(' npm run build:dev # Build for development');
205
- console.log(' npm run build:prod # Build for production');
206
- console.log(' npm run start # Start development server');
207
- if (entities || options.generateSample) {
208
- console.log('\nšŸ”§ Entity generator commands:');
209
- console.log(' npm run generate:entity -- --entity customentity --display-name "Custom Entity"');
145
+ console.log(' npm run dev # Start development server');
146
+ console.log(' npm run build # Build for production');
147
+ if (descriptor.devTools.includes('codegen')) {
148
+ console.log('\nšŸ”§ Generate typed entities from a live org:');
149
+ console.log(' npm run metadata:pull -- --entities account,contact');
210
150
  }
211
- console.log('\nšŸ“– Consulting workflow:');
212
- console.log(' 1. Review generated entities and customize field constants');
213
- console.log(' 2. Update validation rules in entity models');
214
- console.log(' 3. Customize page templates for client requirements');
215
- console.log(' 4. Run quality checks: npm run quality');
216
- console.log(' 5. Deploy: npm run build:d365');
217
- console.log('\nšŸ“š Check docs/ folder for deployment guides');
218
151
  }
219
- console.log(chalk.magenta('\nšŸŽ‰ Ready for enterprise consulting!\n'));
152
+ if (library === 'fluent-v9') {
153
+ console.log(chalk.gray('\nā„¹ļø Fluent v9 selected — code is emitted and builds. A blank v9 form renders bare until you add controls.'));
154
+ }
155
+ console.log(chalk.magenta('\nšŸŽ‰ Done.\n'));
220
156
  }
221
157
  catch (error) {
222
158
  console.error(chalk.red('āŒ An error occurred:'), error);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { ArtifactDescriptor, DevToolId } from './artifacts/types.js';
2
+ interface PackageJson {
3
+ scripts?: Record<string, string>;
4
+ dependencies?: Record<string, string>;
5
+ devDependencies?: Record<string, string>;
6
+ [key: string]: unknown;
7
+ }
8
+ /** Compare two npm version ranges loosely; return the higher (keeping its prefix). */
9
+ export declare function pickHigherRange(a: string, b: string): string;
10
+ export interface DevToolPlan {
11
+ pkg: PackageJson;
12
+ filesToCopy: Array<{
13
+ from: string;
14
+ to: string;
15
+ }>;
16
+ added: string[];
17
+ skipped: DevToolId[];
18
+ warnings: string[];
19
+ }
20
+ /** Pure: compute the merged package.json + file-copy plan. No IO. */
21
+ export declare function planDevTools(pkg: PackageJson, toolIds: DevToolId[]): DevToolPlan;
22
+ /** Impure: apply the dev-tool plan to a generated project. */
23
+ export declare function injectDevTools(projectPath: string, toolIds: DevToolId[]): Promise<void>;
24
+ /** Add an artifact's conditional dependencies whose `when(vars)` predicate holds.
25
+ * Each condition may target a sub-package via `packagePath` (e.g. an SWA `frontend`). */
26
+ export declare function applyConditionalDeps(projectPath: string, descriptor: ArtifactDescriptor, vars: Record<string, string>): Promise<void>;
27
+ export {};
28
+ //# sourceMappingURL=injectDevTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectDevTools.d.ts","sourceRoot":"","sources":["../src/injectDevTools.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAwC1E,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5D;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,WAAW,CAAC;IACjB,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,WAAW,CAyChF;AAED,8DAA8D;AAC9D,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB7F;AAED;yFACyF;AACzF,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,kBAAkB,EAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC,CAkCf"}