@mcp-consultant-tools/powerplatform-customization 27.0.0 → 28.0.0-beta.10

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 (89) hide show
  1. package/build/cli/commands/attribute-commands.d.ts +7 -0
  2. package/build/cli/commands/attribute-commands.d.ts.map +1 -0
  3. package/build/cli/commands/attribute-commands.js +208 -0
  4. package/build/cli/commands/attribute-commands.js.map +1 -0
  5. package/build/cli/commands/entity-commands.d.ts +7 -0
  6. package/build/cli/commands/entity-commands.d.ts.map +1 -0
  7. package/build/cli/commands/entity-commands.js +134 -0
  8. package/build/cli/commands/entity-commands.js.map +1 -0
  9. package/build/cli/commands/index.d.ts +9 -0
  10. package/build/cli/commands/index.d.ts.map +1 -0
  11. package/build/cli/commands/index.js +12 -0
  12. package/build/cli/commands/index.js.map +1 -0
  13. package/build/cli/output.d.ts +20 -0
  14. package/build/cli/output.d.ts.map +1 -0
  15. package/build/cli/output.js +45 -0
  16. package/build/cli/output.js.map +1 -0
  17. package/build/cli.d.ts +9 -0
  18. package/build/cli.d.ts.map +1 -0
  19. package/build/cli.js +27 -0
  20. package/build/cli.js.map +1 -0
  21. package/build/context-factory.d.ts +8 -0
  22. package/build/context-factory.d.ts.map +1 -0
  23. package/build/context-factory.js +36 -0
  24. package/build/context-factory.js.map +1 -0
  25. package/build/index.d.ts +3 -0
  26. package/build/index.d.ts.map +1 -1
  27. package/build/index.js +18 -3271
  28. package/build/index.js.map +1 -1
  29. package/build/services/index.d.ts +5 -0
  30. package/build/services/index.d.ts.map +1 -0
  31. package/build/services/index.js +5 -0
  32. package/build/services/index.js.map +1 -0
  33. package/build/tool-examples.d.ts +64 -0
  34. package/build/tool-examples.d.ts.map +1 -0
  35. package/build/tool-examples.js +112 -0
  36. package/build/tool-examples.js.map +1 -0
  37. package/build/tools/app-endpoint-tools.d.ts +3 -0
  38. package/build/tools/app-endpoint-tools.d.ts.map +1 -0
  39. package/build/tools/app-endpoint-tools.js +235 -0
  40. package/build/tools/app-endpoint-tools.js.map +1 -0
  41. package/build/tools/attribute-tools.d.ts +3 -0
  42. package/build/tools/attribute-tools.d.ts.map +1 -0
  43. package/build/tools/attribute-tools.js +621 -0
  44. package/build/tools/attribute-tools.js.map +1 -0
  45. package/build/tools/entity-tools.d.ts +3 -0
  46. package/build/tools/entity-tools.d.ts.map +1 -0
  47. package/build/tools/entity-tools.js +240 -0
  48. package/build/tools/entity-tools.js.map +1 -0
  49. package/build/tools/flow-tools.d.ts +3 -0
  50. package/build/tools/flow-tools.d.ts.map +1 -0
  51. package/build/tools/flow-tools.js +337 -0
  52. package/build/tools/flow-tools.js.map +1 -0
  53. package/build/tools/form-view-tools.d.ts +3 -0
  54. package/build/tools/form-view-tools.d.ts.map +1 -0
  55. package/build/tools/form-view-tools.js +231 -0
  56. package/build/tools/form-view-tools.js.map +1 -0
  57. package/build/tools/index.d.ts +17 -0
  58. package/build/tools/index.d.ts.map +1 -0
  59. package/build/tools/index.js +39 -0
  60. package/build/tools/index.js.map +1 -0
  61. package/build/tools/optionset-tools.d.ts +3 -0
  62. package/build/tools/optionset-tools.d.ts.map +1 -0
  63. package/build/tools/optionset-tools.js +192 -0
  64. package/build/tools/optionset-tools.js.map +1 -0
  65. package/build/tools/plugin-tools.d.ts +3 -0
  66. package/build/tools/plugin-tools.d.ts.map +1 -0
  67. package/build/tools/plugin-tools.js +485 -0
  68. package/build/tools/plugin-tools.js.map +1 -0
  69. package/build/tools/relationship-tools.d.ts +3 -0
  70. package/build/tools/relationship-tools.d.ts.map +1 -0
  71. package/build/tools/relationship-tools.js +111 -0
  72. package/build/tools/relationship-tools.js.map +1 -0
  73. package/build/tools/solution-tools.d.ts +3 -0
  74. package/build/tools/solution-tools.d.ts.map +1 -0
  75. package/build/tools/solution-tools.js +215 -0
  76. package/build/tools/solution-tools.js.map +1 -0
  77. package/build/tools/web-resource-tools.d.ts +3 -0
  78. package/build/tools/web-resource-tools.d.ts.map +1 -0
  79. package/build/tools/web-resource-tools.js +88 -0
  80. package/build/tools/web-resource-tools.js.map +1 -0
  81. package/build/tools/workflow-tools.d.ts +3 -0
  82. package/build/tools/workflow-tools.d.ts.map +1 -0
  83. package/build/tools/workflow-tools.js +165 -0
  84. package/build/tools/workflow-tools.js.map +1 -0
  85. package/build/types.d.ts +9 -0
  86. package/build/types.d.ts.map +1 -0
  87. package/build/types.js +2 -0
  88. package/build/types.js.map +1 -0
  89. package/package.json +6 -4
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Attribute CLI commands: create-attribute, update-attribute, delete-attribute
3
+ */
4
+ import type { Command } from 'commander';
5
+ import type { ServiceContext } from '../../context-factory.js';
6
+ export declare function registerAttributeCommands(program: Command, ctx: ServiceContext): void;
7
+ //# sourceMappingURL=attribute-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribute-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/attribute-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAkMrF"}
@@ -0,0 +1,208 @@
1
+ import { outputResult, handleCliError } from '../output.js';
2
+ export function registerAttributeCommands(program, ctx) {
3
+ program
4
+ .command('create-attribute')
5
+ .description('Create a new attribute (column) on an entity')
6
+ .requiredOption('--entity <name>', 'Entity logical name')
7
+ .requiredOption('--type <type>', 'Attribute type: String, Memo, Integer, Decimal, Money, DateTime, Boolean, Picklist, Lookup, MultiSelectPicklist, AutoNumber')
8
+ .requiredOption('--schema-name <name>', 'Schema name (e.g., sic_description)')
9
+ .requiredOption('--display-name <name>', 'Display name')
10
+ .option('--description <desc>', 'Description')
11
+ .option('--is-required', 'Whether the attribute is required', false)
12
+ .option('--max-length <n>', 'Max length (String/Memo)', parseInt)
13
+ .option('--auto-number-format <fmt>', 'Auto-number format (AutoNumber type)')
14
+ .option('--precision <n>', 'Decimal precision', parseInt)
15
+ .option('--min-value <n>', 'Minimum value', parseFloat)
16
+ .option('--max-value <n>', 'Maximum value', parseFloat)
17
+ .option('--date-time-behavior <b>', 'DateTime behavior: UserLocal, DateOnly, TimeZoneIndependent')
18
+ .option('--global-option-set <name>', 'Existing global option set name')
19
+ .option('--option-set-options <json>', 'JSON array of option set options')
20
+ .option('--referenced-entity <name>', 'Referenced entity (Lookup)')
21
+ .option('--relationship-schema <name>', 'Relationship schema name (Lookup)')
22
+ .option('--solution <name>', 'Solution unique name')
23
+ .action(async (opts) => {
24
+ try {
25
+ const service = ctx.pp;
26
+ // Build base definition
27
+ const baseDefinition = {
28
+ SchemaName: opts.schemaName,
29
+ RequiredLevel: { Value: opts.isRequired ? "ApplicationRequired" : "None", CanBeChanged: true },
30
+ DisplayName: {
31
+ "@odata.type": "Microsoft.Dynamics.CRM.Label",
32
+ LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: opts.displayName, LanguageCode: 1033 }]
33
+ },
34
+ Description: {
35
+ "@odata.type": "Microsoft.Dynamics.CRM.Label",
36
+ LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: opts.description || "", LanguageCode: 1033 }]
37
+ }
38
+ };
39
+ let attributeDefinition;
40
+ const attrType = opts.type;
41
+ switch (attrType) {
42
+ case "String":
43
+ attributeDefinition = { ...baseDefinition, "@odata.type": "Microsoft.Dynamics.CRM.StringAttributeMetadata", MaxLength: opts.maxLength || 100, FormatName: { Value: "Text" } };
44
+ break;
45
+ case "AutoNumber":
46
+ if (!opts.autoNumberFormat)
47
+ throw new Error("AutoNumber requires --auto-number-format");
48
+ attributeDefinition = { ...baseDefinition, "@odata.type": "Microsoft.Dynamics.CRM.StringAttributeMetadata", AutoNumberFormat: opts.autoNumberFormat, MaxLength: opts.maxLength || 100, FormatName: { Value: "Text" } };
49
+ break;
50
+ case "Memo":
51
+ attributeDefinition = { ...baseDefinition, "@odata.type": "Microsoft.Dynamics.CRM.MemoAttributeMetadata", MaxLength: opts.maxLength || 2000, Format: "TextArea" };
52
+ break;
53
+ case "Integer":
54
+ attributeDefinition = { ...baseDefinition, "@odata.type": "Microsoft.Dynamics.CRM.IntegerAttributeMetadata", Format: "None", MinValue: opts.minValue ?? -2147483648, MaxValue: opts.maxValue ?? 2147483647 };
55
+ break;
56
+ case "Decimal":
57
+ attributeDefinition = { ...baseDefinition, "@odata.type": "Microsoft.Dynamics.CRM.DecimalAttributeMetadata", Precision: opts.precision || 2, MinValue: opts.minValue ?? -100000000000, MaxValue: opts.maxValue ?? 100000000000 };
58
+ break;
59
+ case "Money":
60
+ attributeDefinition = { ...baseDefinition, "@odata.type": "Microsoft.Dynamics.CRM.MoneyAttributeMetadata", Precision: opts.precision || 2, MinValue: opts.minValue ?? -922337203685477, MaxValue: opts.maxValue ?? 922337203685477, PrecisionSource: 2 };
61
+ break;
62
+ case "DateTime":
63
+ attributeDefinition = { ...baseDefinition, "@odata.type": "Microsoft.Dynamics.CRM.DateTimeAttributeMetadata", Format: opts.dateTimeBehavior === "DateOnly" ? "DateOnly" : "DateAndTime", DateTimeBehavior: { Value: opts.dateTimeBehavior || "UserLocal" } };
64
+ break;
65
+ case "Boolean":
66
+ attributeDefinition = {
67
+ ...baseDefinition, "@odata.type": "Microsoft.Dynamics.CRM.BooleanAttributeMetadata", DefaultValue: false,
68
+ OptionSet: {
69
+ "@odata.type": "Microsoft.Dynamics.CRM.BooleanOptionSetMetadata",
70
+ TrueOption: { Value: 1, Label: { "@odata.type": "Microsoft.Dynamics.CRM.Label", LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: "Yes", LanguageCode: 1033 }] } },
71
+ FalseOption: { Value: 0, Label: { "@odata.type": "Microsoft.Dynamics.CRM.Label", LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: "No", LanguageCode: 1033 }] } }
72
+ }
73
+ };
74
+ break;
75
+ case "Picklist":
76
+ case "MultiSelectPicklist": {
77
+ const odataType = attrType === "Picklist"
78
+ ? "Microsoft.Dynamics.CRM.PicklistAttributeMetadata"
79
+ : "Microsoft.Dynamics.CRM.MultiSelectPicklistAttributeMetadata";
80
+ if (opts.globalOptionSet) {
81
+ const globalOS = await service.getGlobalOptionSet(opts.globalOptionSet);
82
+ attributeDefinition = { ...baseDefinition, "@odata.type": odataType, "GlobalOptionSet@odata.bind": `/GlobalOptionSetDefinitions(${globalOS.MetadataId})` };
83
+ }
84
+ else if (opts.optionSetOptions) {
85
+ const parsedOptions = JSON.parse(opts.optionSetOptions);
86
+ const normalizedOptions = parsedOptions.map((opt, index) => {
87
+ if (typeof opt === 'string') {
88
+ return { Value: index, Label: { "@odata.type": "Microsoft.Dynamics.CRM.Label", LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: opt, LanguageCode: 1033 }] } };
89
+ }
90
+ return { Value: opt.value, Label: { "@odata.type": "Microsoft.Dynamics.CRM.Label", LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: opt.label, LanguageCode: 1033 }] } };
91
+ });
92
+ const solutionName = opts.solution || process.env.POWERPLATFORM_DEFAULT_SOLUTION || undefined;
93
+ const globalOSDef = {
94
+ "@odata.type": "Microsoft.Dynamics.CRM.OptionSetMetadata",
95
+ Name: opts.schemaName,
96
+ DisplayName: baseDefinition.DisplayName,
97
+ Description: baseDefinition.Description,
98
+ IsGlobal: true,
99
+ OptionSetType: "Picklist",
100
+ Options: normalizedOptions
101
+ };
102
+ await service.createGlobalOptionSet(globalOSDef, solutionName);
103
+ const createdOS = await service.getGlobalOptionSet(opts.schemaName);
104
+ attributeDefinition = { ...baseDefinition, "@odata.type": odataType, "GlobalOptionSet@odata.bind": `/GlobalOptionSetDefinitions(${createdOS.MetadataId})` };
105
+ }
106
+ else {
107
+ throw new Error("Picklist/MultiSelectPicklist requires --global-option-set or --option-set-options");
108
+ }
109
+ break;
110
+ }
111
+ case "Lookup":
112
+ if (!opts.referencedEntity)
113
+ throw new Error("Lookup requires --referenced-entity");
114
+ attributeDefinition = { ...baseDefinition, "@odata.type": "Microsoft.Dynamics.CRM.LookupAttributeMetadata", Targets: [opts.referencedEntity] };
115
+ if (opts.relationshipSchema)
116
+ attributeDefinition.RelationshipSchemaName = opts.relationshipSchema;
117
+ break;
118
+ default:
119
+ throw new Error(`Unsupported attribute type: ${attrType}`);
120
+ }
121
+ const solutionName = opts.solution || process.env.POWERPLATFORM_DEFAULT_SOLUTION || undefined;
122
+ const result = await service.createAttribute(opts.entity, attributeDefinition, solutionName);
123
+ outputResult(result);
124
+ }
125
+ catch (error) {
126
+ handleCliError(error);
127
+ }
128
+ });
129
+ program
130
+ .command('update-attribute')
131
+ .description('Update an existing attribute on an entity')
132
+ .requiredOption('--entity <name>', 'Entity logical name')
133
+ .requiredOption('--attribute <name>', 'Attribute logical name')
134
+ .option('--display-name <name>', 'New display name')
135
+ .option('--description <desc>', 'New description')
136
+ .option('--required-level <level>', 'Required level: None, Recommended, ApplicationRequired')
137
+ .option('--max-length <n>', 'Max length', parseInt)
138
+ .option('--format-name <fmt>', 'Format: Text, TextArea, Email, Phone, Url, TickerSymbol')
139
+ .option('--min-value <n>', 'Min value', parseFloat)
140
+ .option('--max-value <n>', 'Max value', parseFloat)
141
+ .option('--precision <n>', 'Decimal precision', parseInt)
142
+ .option('--precision-source <src>', 'Precision source: Precision, Pricing, Currency')
143
+ .option('--format <fmt>', 'DateTime format: DateAndTime, DateOnly')
144
+ .option('--date-time-behavior <b>', 'DateTime behavior: UserLocal, DateOnly, TimeZoneIndependent')
145
+ .option('--is-audit-enabled', 'Enable auditing')
146
+ .option('--no-audit', 'Disable auditing')
147
+ .option('--auto-number-format <fmt>', 'Auto-number format string')
148
+ .option('--solution <name>', 'Solution context')
149
+ .action(async (opts) => {
150
+ try {
151
+ const service = ctx.pp;
152
+ const updates = {};
153
+ if (opts.displayName) {
154
+ updates.DisplayName = { "@odata.type": "Microsoft.Dynamics.CRM.Label", LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: opts.displayName, LanguageCode: 1033 }] };
155
+ }
156
+ if (opts.description) {
157
+ updates.Description = { "@odata.type": "Microsoft.Dynamics.CRM.Label", LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: opts.description, LanguageCode: 1033 }] };
158
+ }
159
+ if (opts.requiredLevel)
160
+ updates.RequiredLevel = { Value: opts.requiredLevel, CanBeChanged: true };
161
+ if (opts.maxLength !== undefined)
162
+ updates.MaxLength = opts.maxLength;
163
+ if (opts.formatName)
164
+ updates.FormatName = { Value: opts.formatName };
165
+ if (opts.minValue !== undefined)
166
+ updates.MinValue = opts.minValue;
167
+ if (opts.maxValue !== undefined)
168
+ updates.MaxValue = opts.maxValue;
169
+ if (opts.precision !== undefined)
170
+ updates.Precision = opts.precision;
171
+ if (opts.precisionSource) {
172
+ const map = { "Precision": 0, "Pricing": 1, "Currency": 2 };
173
+ updates.PrecisionSource = map[opts.precisionSource];
174
+ }
175
+ if (opts.format)
176
+ updates.Format = opts.format;
177
+ if (opts.dateTimeBehavior)
178
+ updates.DateTimeBehavior = { "@odata.type": "Microsoft.Dynamics.CRM.DateTimeBehavior", Value: opts.dateTimeBehavior };
179
+ if (opts.isAuditEnabled)
180
+ updates.IsAuditEnabled = { Value: true, CanBeChanged: true };
181
+ if (opts.audit === false)
182
+ updates.IsAuditEnabled = { Value: false, CanBeChanged: true };
183
+ if (opts.autoNumberFormat)
184
+ updates.AutoNumberFormat = opts.autoNumberFormat;
185
+ await service.updateAttribute(opts.entity, opts.attribute, updates, opts.solution);
186
+ outputResult({ success: true, entity: opts.entity, attribute: opts.attribute });
187
+ }
188
+ catch (error) {
189
+ handleCliError(error);
190
+ }
191
+ });
192
+ program
193
+ .command('delete-attribute')
194
+ .description('Delete an attribute from an entity')
195
+ .requiredOption('--entity <name>', 'Entity logical name')
196
+ .requiredOption('--attribute-metadata-id <guid>', 'Attribute MetadataId (GUID)')
197
+ .action(async (opts) => {
198
+ try {
199
+ const service = ctx.pp;
200
+ await service.deleteAttribute(opts.entity, opts.attributeMetadataId);
201
+ outputResult({ success: true, entity: opts.entity, deleted: opts.attributeMetadataId });
202
+ }
203
+ catch (error) {
204
+ handleCliError(error);
205
+ }
206
+ });
207
+ }
208
+ //# sourceMappingURL=attribute-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribute-commands.js","sourceRoot":"","sources":["../../../src/cli/commands/attribute-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Entity CLI commands: create-entity, update-entity, update-entity-icon, delete-entity
3
+ */
4
+ import type { Command } from 'commander';
5
+ import type { ServiceContext } from '../../context-factory.js';
6
+ export declare function registerEntityCommands(program: Command, ctx: ServiceContext): void;
7
+ //# sourceMappingURL=entity-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/entity-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAiIlF"}
@@ -0,0 +1,134 @@
1
+ import { outputResult, handleCliError } from '../output.js';
2
+ export function registerEntityCommands(program, ctx) {
3
+ program
4
+ .command('create-entity')
5
+ .description('Create a new custom entity (table)')
6
+ .requiredOption('--schema-name <name>', 'Schema name (e.g., sic_application)')
7
+ .requiredOption('--display-name <name>', 'Display name')
8
+ .requiredOption('--plural-display-name <name>', 'Plural display name')
9
+ .requiredOption('--description <desc>', 'Description')
10
+ .requiredOption('--ownership-type <type>', 'Ownership: UserOwned, TeamOwned, OrganizationOwned')
11
+ .option('--has-activities', 'Enable activities', false)
12
+ .option('--has-notes', 'Enable notes', false)
13
+ .option('--is-activity-party', 'Can be party in activities', false)
14
+ .option('--primary-attr-schema <name>', 'Primary attribute schema name')
15
+ .option('--primary-attr-display <name>', 'Primary attribute display name')
16
+ .option('--primary-attr-max-length <n>', 'Primary attribute max length', parseInt)
17
+ .option('--solution <name>', 'Solution unique name')
18
+ .action(async (opts) => {
19
+ try {
20
+ const service = ctx.pp;
21
+ const entityDefinition = {
22
+ "@odata.type": "Microsoft.Dynamics.CRM.EntityMetadata",
23
+ SchemaName: opts.schemaName,
24
+ DisplayName: {
25
+ "@odata.type": "Microsoft.Dynamics.CRM.Label",
26
+ LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: opts.displayName, LanguageCode: 1033 }]
27
+ },
28
+ DisplayCollectionName: {
29
+ "@odata.type": "Microsoft.Dynamics.CRM.Label",
30
+ LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: opts.pluralDisplayName, LanguageCode: 1033 }]
31
+ },
32
+ Description: {
33
+ "@odata.type": "Microsoft.Dynamics.CRM.Label",
34
+ LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: opts.description, LanguageCode: 1033 }]
35
+ },
36
+ OwnershipType: opts.ownershipType,
37
+ IsActivity: false,
38
+ HasActivities: opts.hasActivities,
39
+ HasNotes: opts.hasNotes,
40
+ IsActivityParty: opts.isActivityParty,
41
+ IsDuplicateDetectionEnabled: { Value: false, CanBeChanged: true },
42
+ IsMailMergeEnabled: { Value: false, CanBeChanged: true },
43
+ Attributes: [{
44
+ "@odata.type": "Microsoft.Dynamics.CRM.StringAttributeMetadata",
45
+ SchemaName: opts.primaryAttrSchema || "name",
46
+ IsPrimaryName: true,
47
+ RequiredLevel: { Value: "None", CanBeChanged: true },
48
+ MaxLength: opts.primaryAttrMaxLength || 850,
49
+ FormatName: { Value: "Text" },
50
+ DisplayName: {
51
+ "@odata.type": "Microsoft.Dynamics.CRM.Label",
52
+ LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: opts.primaryAttrDisplay || "Name", LanguageCode: 1033 }]
53
+ },
54
+ Description: {
55
+ "@odata.type": "Microsoft.Dynamics.CRM.Label",
56
+ LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: "The primary attribute for the entity", LanguageCode: 1033 }]
57
+ }
58
+ }],
59
+ HasFeedback: false
60
+ };
61
+ const solutionName = opts.solution || process.env.POWERPLATFORM_DEFAULT_SOLUTION || undefined;
62
+ const result = await service.createEntity(entityDefinition, solutionName);
63
+ outputResult(result);
64
+ }
65
+ catch (error) {
66
+ handleCliError(error);
67
+ }
68
+ });
69
+ program
70
+ .command('update-entity')
71
+ .description('Update an existing custom entity')
72
+ .requiredOption('--metadata-id <guid>', 'Entity MetadataId (GUID)')
73
+ .option('--display-name <name>', 'New display name')
74
+ .option('--plural-display-name <name>', 'New plural display name')
75
+ .option('--description <desc>', 'New description')
76
+ .option('--has-activities', 'Enable activities')
77
+ .option('--has-notes', 'Enable notes')
78
+ .option('--solution <name>', 'Solution context')
79
+ .action(async (opts) => {
80
+ try {
81
+ const service = ctx.pp;
82
+ const updates = {};
83
+ if (opts.displayName) {
84
+ updates.DisplayName = { "@odata.type": "Microsoft.Dynamics.CRM.Label", LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: opts.displayName, LanguageCode: 1033 }] };
85
+ }
86
+ if (opts.pluralDisplayName) {
87
+ updates.DisplayCollectionName = { "@odata.type": "Microsoft.Dynamics.CRM.Label", LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: opts.pluralDisplayName, LanguageCode: 1033 }] };
88
+ }
89
+ if (opts.description) {
90
+ updates.Description = { "@odata.type": "Microsoft.Dynamics.CRM.Label", LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: opts.description, LanguageCode: 1033 }] };
91
+ }
92
+ if (opts.hasActivities !== undefined)
93
+ updates.HasActivities = opts.hasActivities;
94
+ if (opts.hasNotes !== undefined)
95
+ updates.HasNotes = opts.hasNotes;
96
+ await service.updateEntity(opts.metadataId, updates, opts.solution);
97
+ outputResult({ success: true, metadataId: opts.metadataId });
98
+ }
99
+ catch (error) {
100
+ handleCliError(error);
101
+ }
102
+ });
103
+ program
104
+ .command('update-entity-icon')
105
+ .description('Update entity icon using Fluent UI System Icons')
106
+ .requiredOption('--entity <name>', 'Entity logical name')
107
+ .requiredOption('--icon-file <name>', 'Fluent UI icon file name (e.g., people_community_24_filled.svg)')
108
+ .option('--solution <name>', 'Solution unique name')
109
+ .action(async (opts) => {
110
+ try {
111
+ const service = ctx.pp;
112
+ const result = await service.updateEntityIcon(opts.entity, opts.iconFile, opts.solution);
113
+ outputResult(result);
114
+ }
115
+ catch (error) {
116
+ handleCliError(error);
117
+ }
118
+ });
119
+ program
120
+ .command('delete-entity')
121
+ .description('Delete a custom entity')
122
+ .requiredOption('--metadata-id <guid>', 'Entity MetadataId (GUID)')
123
+ .action(async (opts) => {
124
+ try {
125
+ const service = ctx.pp;
126
+ await service.deleteEntity(opts.metadataId);
127
+ outputResult({ success: true, deleted: opts.metadataId });
128
+ }
129
+ catch (error) {
130
+ handleCliError(error);
131
+ }
132
+ });
133
+ }
134
+ //# sourceMappingURL=entity-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-commands.js","sourceRoot":"","sources":["../../../src/cli/commands/entity-commands.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,UAAU,sBAAsB,CAAC,OAAgB,EAAE,GAAmB;IAE1E,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,oCAAoC,CAAC;SACjD,cAAc,CAAC,sBAAsB,EAAE,qCAAqC,CAAC;SAC7E,cAAc,CAAC,uBAAuB,EAAE,cAAc,CAAC;SACvD,cAAc,CAAC,8BAA8B,EAAE,qBAAqB,CAAC;SACrE,cAAc,CAAC,sBAAsB,EAAE,aAAa,CAAC;SACrD,cAAc,CAAC,yBAAyB,EAAE,oDAAoD,CAAC;SAC/F,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,KAAK,CAAC;SACtD,MAAM,CAAC,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC;SAC5C,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,EAAE,KAAK,CAAC;SAClE,MAAM,CAAC,8BAA8B,EAAE,+BAA+B,CAAC;SACvE,MAAM,CAAC,+BAA+B,EAAE,gCAAgC,CAAC;SACzE,MAAM,CAAC,+BAA+B,EAAE,8BAA8B,EAAE,QAAe,CAAC;SACxF,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,gBAAgB,GAAG;gBACvB,aAAa,EAAE,uCAAuC;gBACtD,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,WAAW,EAAE;oBACX,aAAa,EAAE,8BAA8B;oBAC7C,eAAe,EAAE,CAAC,EAAE,aAAa,EAAE,uCAAuC,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;iBAC3H;gBACD,qBAAqB,EAAE;oBACrB,aAAa,EAAE,8BAA8B;oBAC7C,eAAe,EAAE,CAAC,EAAE,aAAa,EAAE,uCAAuC,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;iBACjI;gBACD,WAAW,EAAE;oBACX,aAAa,EAAE,8BAA8B;oBAC7C,eAAe,EAAE,CAAC,EAAE,aAAa,EAAE,uCAAuC,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;iBAC3H;gBACD,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,UAAU,EAAE,KAAK;gBACjB,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,2BAA2B,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE;gBACjE,kBAAkB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE;gBACxD,UAAU,EAAE,CAAC;wBACX,aAAa,EAAE,gDAAgD;wBAC/D,UAAU,EAAE,IAAI,CAAC,iBAAiB,IAAI,MAAM;wBAC5C,aAAa,EAAE,IAAI;wBACnB,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE;wBACpD,SAAS,EAAE,IAAI,CAAC,oBAAoB,IAAI,GAAG;wBAC3C,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;wBAC7B,WAAW,EAAE;4BACX,aAAa,EAAE,8BAA8B;4BAC7C,eAAe,EAAE,CAAC,EAAE,aAAa,EAAE,uCAAuC,EAAE,KAAK,EAAE,IAAI,CAAC,kBAAkB,IAAI,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;yBAC5I;wBACD,WAAW,EAAE;4BACX,aAAa,EAAE,8BAA8B;4BAC7C,eAAe,EAAE,CAAC,EAAE,aAAa,EAAE,uCAAuC,EAAE,KAAK,EAAE,sCAAsC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;yBACjJ;qBACF,CAAC;gBACF,WAAW,EAAE,KAAK;aACnB,CAAC;YACF,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,SAAS,CAAC;YAC9F,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;YAC1E,YAAY,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,cAAc,CAAC,sBAAsB,EAAE,0BAA0B,CAAC;SAClE,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,CAAC;SACnD,MAAM,CAAC,8BAA8B,EAAE,yBAAyB,CAAC;SACjE,MAAM,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;SACjD,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;SAC/C,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC;SACrC,MAAM,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,OAAO,GAAQ,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,OAAO,CAAC,WAAW,GAAG,EAAE,aAAa,EAAE,8BAA8B,EAAE,eAAe,EAAE,CAAC,EAAE,aAAa,EAAE,uCAAuC,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACtM,CAAC;YACD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,OAAO,CAAC,qBAAqB,GAAG,EAAE,aAAa,EAAE,8BAA8B,EAAE,eAAe,EAAE,CAAC,EAAE,aAAa,EAAE,uCAAuC,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACtN,CAAC;YACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,OAAO,CAAC,WAAW,GAAG,EAAE,aAAa,EAAE,8BAA8B,EAAE,eAAe,EAAE,CAAC,EAAE,aAAa,EAAE,uCAAuC,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACtM,CAAC;YACD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;gBAAE,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YACjF,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;gBAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAClE,MAAM,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpE,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,iDAAiD,CAAC;SAC9D,cAAc,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;SACxD,cAAc,CAAC,oBAAoB,EAAE,iEAAiE,CAAC;SACvG,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzF,YAAY,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,wBAAwB,CAAC;SACrC,cAAc,CAAC,sBAAsB,EAAE,0BAA0B,CAAC;SAClE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5C,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * CLI Commands barrel export + combined registration
3
+ */
4
+ import type { Command } from 'commander';
5
+ import type { ServiceContext } from '../../context-factory.js';
6
+ export declare function registerAllCommands(program: Command, ctx: ServiceContext): void;
7
+ export { registerEntityCommands } from './entity-commands.js';
8
+ export { registerAttributeCommands } from './attribute-commands.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAI/D,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAG/E;AAED,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * CLI Commands barrel export + combined registration
3
+ */
4
+ import { registerEntityCommands } from './entity-commands.js';
5
+ import { registerAttributeCommands } from './attribute-commands.js';
6
+ export function registerAllCommands(program, ctx) {
7
+ registerEntityCommands(program, ctx);
8
+ registerAttributeCommands(program, ctx);
9
+ }
10
+ export { registerEntityCommands } from './entity-commands.js';
11
+ export { registerAttributeCommands } from './attribute-commands.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,GAAmB;IACvE,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACrC,yBAAyB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * CLI output helpers for powerplatform-customization
3
+ *
4
+ * Formats results as JSON or human-readable text based on global flags.
5
+ */
6
+ export interface GlobalFlags {
7
+ json: boolean;
8
+ }
9
+ export declare function setGlobalFlags(flags: GlobalFlags): void;
10
+ export declare function getGlobalFlags(): GlobalFlags;
11
+ /**
12
+ * Output a result to stdout.
13
+ * In JSON mode, prints JSON. Otherwise prints human-readable text.
14
+ */
15
+ export declare function outputResult(data: unknown): void;
16
+ /**
17
+ * Output an error and exit with code 1.
18
+ */
19
+ export declare function handleCliError(error: unknown): never;
20
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;CACf;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAEvD;AAED,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAUhD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CASpD"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * CLI output helpers for powerplatform-customization
3
+ *
4
+ * Formats results as JSON or human-readable text based on global flags.
5
+ */
6
+ let globalFlags = { json: false };
7
+ export function setGlobalFlags(flags) {
8
+ globalFlags = flags;
9
+ }
10
+ export function getGlobalFlags() {
11
+ return globalFlags;
12
+ }
13
+ /**
14
+ * Output a result to stdout.
15
+ * In JSON mode, prints JSON. Otherwise prints human-readable text.
16
+ */
17
+ export function outputResult(data) {
18
+ if (globalFlags.json) {
19
+ console.log(JSON.stringify(data, null, 2));
20
+ }
21
+ else if (typeof data === 'string') {
22
+ console.log(data);
23
+ }
24
+ else if (data === null || data === undefined) {
25
+ console.log('Done.');
26
+ }
27
+ else {
28
+ console.log(JSON.stringify(data, null, 2));
29
+ }
30
+ }
31
+ /**
32
+ * Output an error and exit with code 1.
33
+ */
34
+ export function handleCliError(error) {
35
+ if (globalFlags.json) {
36
+ const message = error instanceof Error ? error.message : String(error);
37
+ console.error(JSON.stringify({ error: message }, null, 2));
38
+ }
39
+ else {
40
+ const message = error instanceof Error ? error.message : String(error);
41
+ console.error(`Error: ${message}`);
42
+ }
43
+ process.exit(1);
44
+ }
45
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,IAAI,WAAW,GAAgB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAE/C,MAAM,UAAU,cAAc,CAAC,KAAkB;IAC/C,WAAW,GAAG,KAAK,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;SAAM,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
package/build/cli.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @mcp-consultant-tools/powerplatform-customization CLI
4
+ *
5
+ * Command-line interface for PowerPlatform Customization operations.
6
+ * Reuses the same ServiceContext and services as the MCP server.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
package/build/cli.js ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @mcp-consultant-tools/powerplatform-customization CLI
4
+ *
5
+ * Command-line interface for PowerPlatform Customization operations.
6
+ * Reuses the same ServiceContext and services as the MCP server.
7
+ */
8
+ import { createCliProgram, loadEnvForCli } from '@mcp-consultant-tools/core';
9
+ import { createServiceContext } from './context-factory.js';
10
+ import { registerAllCommands } from './cli/commands/index.js';
11
+ const program = createCliProgram({
12
+ name: 'mcp-pp-custom-cli',
13
+ description: 'PowerPlatform Customization CLI - entities, attributes, and schema changes',
14
+ version: '27.0.0',
15
+ });
16
+ // Load env before parsing (--env-file handled by commander hook)
17
+ program.hook('preAction', (thisCommand) => {
18
+ const opts = thisCommand.opts();
19
+ loadEnvForCli(opts.envFile);
20
+ });
21
+ const ctx = createServiceContext();
22
+ registerAllCommands(program, ctx);
23
+ program.parseAsync(process.argv).catch((error) => {
24
+ console.error('CLI error:', error.message);
25
+ process.exit(1);
26
+ });
27
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,OAAO,GAAG,gBAAgB,CAAC;IAC/B,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,4EAA4E;IACzF,OAAO,EAAE,QAAQ;CAClB,CAAC,CAAC;AAEH,iEAAiE;AACjE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAgB,EAAE,EAAE;IAC7C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAChC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;AACnC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAElC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;IACpD,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Shared service context factory - used by both MCP server and CLI.
3
+ */
4
+ import { PowerPlatformService } from './PowerPlatformService.js';
5
+ import type { ServiceContext } from './types.js';
6
+ export type { ServiceContext } from './types.js';
7
+ export declare function createServiceContext(service?: PowerPlatformService): ServiceContext;
8
+ //# sourceMappingURL=context-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-factory.d.ts","sourceRoot":"","sources":["../src/context-factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,oBAAoB,EAAuB,MAAM,2BAA2B,CAAC;AAEtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,cAAc,CAkCnF"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Shared service context factory - used by both MCP server and CLI.
3
+ */
4
+ import { PowerPlatformService } from './PowerPlatformService.js';
5
+ import { initializePublisherPrefix } from '@mcp-consultant-tools/powerplatform-core';
6
+ export function createServiceContext(service) {
7
+ let ppService = service || null;
8
+ function getPowerPlatformService() {
9
+ if (!ppService) {
10
+ const requiredVars = [
11
+ 'POWERPLATFORM_URL',
12
+ 'POWERPLATFORM_CLIENT_ID',
13
+ 'POWERPLATFORM_CLIENT_SECRET',
14
+ 'POWERPLATFORM_TENANT_ID',
15
+ 'PUBLISHER_PREFIX'
16
+ ];
17
+ const missing = requiredVars.filter(v => !process.env[v]);
18
+ if (missing.length > 0) {
19
+ throw new Error(`Missing required PowerPlatform configuration: ${missing.join(', ')}`);
20
+ }
21
+ initializePublisherPrefix();
22
+ const config = {
23
+ organizationUrl: process.env.POWERPLATFORM_URL,
24
+ clientId: process.env.POWERPLATFORM_CLIENT_ID,
25
+ clientSecret: process.env.POWERPLATFORM_CLIENT_SECRET,
26
+ tenantId: process.env.POWERPLATFORM_TENANT_ID,
27
+ };
28
+ ppService = new PowerPlatformService(config);
29
+ }
30
+ return ppService;
31
+ }
32
+ return {
33
+ get pp() { return getPowerPlatformService(); },
34
+ };
35
+ }
36
+ //# sourceMappingURL=context-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-factory.js","sourceRoot":"","sources":["../src/context-factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,oBAAoB,EAAuB,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAKrF,MAAM,UAAU,oBAAoB,CAAC,OAA8B;IACjE,IAAI,SAAS,GAAgC,OAAO,IAAI,IAAI,CAAC;IAE7D,SAAS,uBAAuB;QAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,YAAY,GAAG;gBACnB,mBAAmB;gBACnB,yBAAyB;gBACzB,6BAA6B;gBAC7B,yBAAyB;gBACzB,kBAAkB;aACnB,CAAC;YACF,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,iDAAiD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzF,CAAC;YAED,yBAAyB,EAAE,CAAC;YAE5B,MAAM,MAAM,GAAwB;gBAClC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAkB;gBAC/C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAwB;gBAC9C,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA4B;gBACtD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAwB;aAC/C,CAAC;YAEF,SAAS,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,KAAK,OAAO,uBAAuB,EAAE,CAAC,CAAC,CAAC;KAC/C,CAAC;AACJ,CAAC"}
package/build/index.d.ts CHANGED
@@ -6,4 +6,7 @@ import { PowerPlatformService } from './PowerPlatformService.js';
6
6
  * @param service - Optional pre-initialized PowerPlatformService (for testing)
7
7
  */
8
8
  export declare function registerPowerplatformCustomizationTools(server: any, service?: PowerPlatformService): void;
9
+ export { PowerPlatformService } from './PowerPlatformService.js';
10
+ export type { PowerPlatformConfig } from './PowerPlatformService.js';
11
+ export type { ServiceContext } from './types.js';
9
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,oBAAoB,EAAuB,MAAM,2BAA2B,CAAC;AAKtF;;;;GAIG;AACH,wBAAgB,uCAAuC,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,oBAAoB,QAy5HlG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,oBAAoB,EAAuB,MAAM,2BAA2B,CAAC;AA8CtF;;;;GAIG;AACH,wBAAgB,uCAAuC,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,oBAAoB,QAGlG;AAGD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}