@microsoft/power-apps-cli 0.9.1 → 0.10.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 (202) hide show
  1. package/README.md +81 -10
  2. package/dist/ArgumentProvider.d.ts +61 -0
  3. package/dist/ArgumentProvider.d.ts.map +1 -0
  4. package/dist/ArgumentProvider.js +247 -0
  5. package/dist/ArgumentProvider.js.map +1 -0
  6. package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts +17 -0
  7. package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts.map +1 -0
  8. package/dist/Authentication/NodeMsalAuthenticationProvider.js +91 -0
  9. package/dist/Authentication/NodeMsalAuthenticationProvider.js.map +1 -0
  10. package/dist/Authentication/PacCliAuthenticationProvider.d.ts +15 -0
  11. package/dist/Authentication/PacCliAuthenticationProvider.d.ts.map +1 -0
  12. package/dist/Authentication/PacCliAuthenticationProvider.js +51 -0
  13. package/dist/Authentication/PacCliAuthenticationProvider.js.map +1 -0
  14. package/dist/Authentication/ServicePrincipalAuthenticationProvider.d.ts +20 -0
  15. package/dist/Authentication/ServicePrincipalAuthenticationProvider.d.ts.map +1 -0
  16. package/dist/Authentication/ServicePrincipalAuthenticationProvider.js +51 -0
  17. package/dist/Authentication/ServicePrincipalAuthenticationProvider.js.map +1 -0
  18. package/dist/Bin.d.ts +6 -0
  19. package/dist/Bin.d.ts.map +1 -0
  20. package/dist/Bin.js +2 -3357
  21. package/dist/Bin.js.map +1 -0
  22. package/dist/Cli.d.ts +2 -0
  23. package/dist/Cli.d.ts.map +1 -0
  24. package/dist/Cli.js +131 -0
  25. package/dist/Cli.js.map +1 -0
  26. package/dist/CliSettings.d.ts +14 -0
  27. package/dist/CliSettings.d.ts.map +1 -0
  28. package/dist/CliSettings.js +70 -0
  29. package/dist/CliSettings.js.map +1 -0
  30. package/dist/CliUtils.d.ts +21 -0
  31. package/dist/CliUtils.d.ts.map +1 -0
  32. package/dist/CliUtils.js +92 -0
  33. package/dist/CliUtils.js.map +1 -0
  34. package/dist/Constants/HelpStrings.d.ts +168 -0
  35. package/dist/Constants/HelpStrings.d.ts.map +1 -0
  36. package/dist/Constants/HelpStrings.js +216 -0
  37. package/dist/Constants/HelpStrings.js.map +1 -0
  38. package/dist/Constants/VerbRegistry.d.ts +79 -0
  39. package/dist/Constants/VerbRegistry.d.ts.map +1 -0
  40. package/dist/Constants/VerbRegistry.js +46 -0
  41. package/dist/Constants/VerbRegistry.js.map +1 -0
  42. package/dist/Constants.d.ts +10 -0
  43. package/dist/Constants.d.ts.map +1 -0
  44. package/dist/Constants.js +12 -0
  45. package/dist/Constants.js.map +1 -0
  46. package/dist/Errors/CliError.d.ts +11 -0
  47. package/dist/Errors/CliError.d.ts.map +1 -0
  48. package/dist/Errors/CliError.js +16 -0
  49. package/dist/Errors/CliError.js.map +1 -0
  50. package/dist/FS/CliFs.d.ts +41 -0
  51. package/dist/FS/CliFs.d.ts.map +1 -0
  52. package/dist/FS/CliFs.js +136 -0
  53. package/dist/FS/CliFs.js.map +1 -0
  54. package/dist/HttpClient/CliHttpClient.d.ts +21 -0
  55. package/dist/HttpClient/CliHttpClient.d.ts.map +1 -0
  56. package/dist/HttpClient/CliHttpClient.js +118 -0
  57. package/dist/HttpClient/CliHttpClient.js.map +1 -0
  58. package/dist/Logger/CliLogger.d.ts +27 -0
  59. package/dist/Logger/CliLogger.d.ts.map +1 -0
  60. package/dist/Logger/CliLogger.js +222 -0
  61. package/dist/Logger/CliLogger.js.map +1 -0
  62. package/dist/Logger/ConsoleWriter.d.ts +15 -0
  63. package/dist/Logger/ConsoleWriter.d.ts.map +1 -0
  64. package/dist/Logger/ConsoleWriter.js +45 -0
  65. package/dist/Logger/ConsoleWriter.js.map +1 -0
  66. package/dist/Logger/Constants.d.ts +6 -0
  67. package/dist/Logger/Constants.d.ts.map +1 -0
  68. package/dist/Logger/Constants.js +15 -0
  69. package/dist/Logger/Constants.js.map +1 -0
  70. package/dist/Logger/LoggerSettings.d.ts +18 -0
  71. package/dist/Logger/LoggerSettings.d.ts.map +1 -0
  72. package/dist/Logger/LoggerSettings.js +100 -0
  73. package/dist/Logger/LoggerSettings.js.map +1 -0
  74. package/dist/Logger/OneDSWriter.d.ts +22 -0
  75. package/dist/Logger/OneDSWriter.d.ts.map +1 -0
  76. package/dist/Logger/OneDSWriter.js +137 -0
  77. package/dist/Logger/OneDSWriter.js.map +1 -0
  78. package/dist/Logger/Scrubber/ScrubCustomDimensions.d.ts +5 -0
  79. package/dist/Logger/Scrubber/ScrubCustomDimensions.d.ts.map +1 -0
  80. package/dist/Logger/Scrubber/ScrubCustomDimensions.js +46 -0
  81. package/dist/Logger/Scrubber/ScrubCustomDimensions.js.map +1 -0
  82. package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.d.ts +27 -0
  83. package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.d.ts.map +1 -0
  84. package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.js +168 -0
  85. package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.js.map +1 -0
  86. package/dist/Logger/Scrubber/ScrubUtils.d.ts +8 -0
  87. package/dist/Logger/Scrubber/ScrubUtils.d.ts.map +1 -0
  88. package/dist/Logger/Scrubber/ScrubUtils.js +34 -0
  89. package/dist/Logger/Scrubber/ScrubUtils.js.map +1 -0
  90. package/dist/Types/Argument.types.d.ts +20 -0
  91. package/dist/Types/Argument.types.d.ts.map +1 -0
  92. package/dist/Types/Argument.types.js +5 -0
  93. package/dist/Types/Argument.types.js.map +1 -0
  94. package/dist/Types/Cli.types.d.ts +35 -0
  95. package/dist/Types/Cli.types.d.ts.map +1 -0
  96. package/dist/Types/Cli.types.js +5 -0
  97. package/dist/Types/Cli.types.js.map +1 -0
  98. package/dist/Types/Datasource.types.d.ts +43 -0
  99. package/dist/Types/Datasource.types.d.ts.map +1 -0
  100. package/dist/Types/Datasource.types.js +5 -0
  101. package/dist/Types/Datasource.types.js.map +1 -0
  102. package/dist/Types/LoggerTypes.types.d.ts +17 -0
  103. package/dist/Types/LoggerTypes.types.d.ts.map +1 -0
  104. package/dist/Types/LoggerTypes.types.js +5 -0
  105. package/dist/Types/LoggerTypes.types.js.map +1 -0
  106. package/dist/Utils/BuildVerbDescriptionTable.d.ts +9 -0
  107. package/dist/Utils/BuildVerbDescriptionTable.d.ts.map +1 -0
  108. package/dist/Utils/BuildVerbDescriptionTable.js +29 -0
  109. package/dist/Utils/BuildVerbDescriptionTable.js.map +1 -0
  110. package/dist/Utils/ConsoleOutput.d.ts +39 -0
  111. package/dist/Utils/ConsoleOutput.d.ts.map +1 -0
  112. package/dist/Utils/ConsoleOutput.js +111 -0
  113. package/dist/Utils/ConsoleOutput.js.map +1 -0
  114. package/dist/Utils/EnhanceNetworkError.d.ts +14 -0
  115. package/dist/Utils/EnhanceNetworkError.d.ts.map +1 -0
  116. package/dist/Utils/EnhanceNetworkError.js +59 -0
  117. package/dist/Utils/EnhanceNetworkError.js.map +1 -0
  118. package/dist/Verbs/AddDataSource.d.ts +19 -0
  119. package/dist/Verbs/AddDataSource.d.ts.map +1 -0
  120. package/dist/Verbs/AddDataSource.js +157 -0
  121. package/dist/Verbs/AddDataSource.js.map +1 -0
  122. package/dist/Verbs/AddDataverseApi.d.ts +13 -0
  123. package/dist/Verbs/AddDataverseApi.d.ts.map +1 -0
  124. package/dist/Verbs/AddDataverseApi.js +67 -0
  125. package/dist/Verbs/AddDataverseApi.js.map +1 -0
  126. package/dist/Verbs/AddFlow.d.ts +12 -0
  127. package/dist/Verbs/AddFlow.d.ts.map +1 -0
  128. package/dist/Verbs/AddFlow.js +66 -0
  129. package/dist/Verbs/AddFlow.js.map +1 -0
  130. package/dist/Verbs/DeleteDataSource.d.ts +6 -0
  131. package/dist/Verbs/DeleteDataSource.d.ts.map +1 -0
  132. package/dist/Verbs/DeleteDataSource.js +108 -0
  133. package/dist/Verbs/DeleteDataSource.js.map +1 -0
  134. package/dist/Verbs/FindDataverseApi.d.ts +12 -0
  135. package/dist/Verbs/FindDataverseApi.d.ts.map +1 -0
  136. package/dist/Verbs/FindDataverseApi.js +101 -0
  137. package/dist/Verbs/FindDataverseApi.js.map +1 -0
  138. package/dist/Verbs/Init.d.ts +6 -0
  139. package/dist/Verbs/Init.d.ts.map +1 -0
  140. package/dist/Verbs/Init.js +146 -0
  141. package/dist/Verbs/Init.js.map +1 -0
  142. package/dist/Verbs/ListCodeApps.d.ts +6 -0
  143. package/dist/Verbs/ListCodeApps.d.ts.map +1 -0
  144. package/dist/Verbs/ListCodeApps.js +31 -0
  145. package/dist/Verbs/ListCodeApps.js.map +1 -0
  146. package/dist/Verbs/ListConnectionReferences.d.ts +6 -0
  147. package/dist/Verbs/ListConnectionReferences.d.ts.map +1 -0
  148. package/dist/Verbs/ListConnectionReferences.js +80 -0
  149. package/dist/Verbs/ListConnectionReferences.js.map +1 -0
  150. package/dist/Verbs/ListDatasets.d.ts +6 -0
  151. package/dist/Verbs/ListDatasets.d.ts.map +1 -0
  152. package/dist/Verbs/ListDatasets.js +83 -0
  153. package/dist/Verbs/ListDatasets.js.map +1 -0
  154. package/dist/Verbs/ListEnvironmentVariables.d.ts +14 -0
  155. package/dist/Verbs/ListEnvironmentVariables.d.ts.map +1 -0
  156. package/dist/Verbs/ListEnvironmentVariables.js +82 -0
  157. package/dist/Verbs/ListEnvironmentVariables.js.map +1 -0
  158. package/dist/Verbs/ListFlows.d.ts +13 -0
  159. package/dist/Verbs/ListFlows.d.ts.map +1 -0
  160. package/dist/Verbs/ListFlows.js +88 -0
  161. package/dist/Verbs/ListFlows.js.map +1 -0
  162. package/dist/Verbs/ListSqlStoredProcedures.d.ts +6 -0
  163. package/dist/Verbs/ListSqlStoredProcedures.d.ts.map +1 -0
  164. package/dist/Verbs/ListSqlStoredProcedures.js +84 -0
  165. package/dist/Verbs/ListSqlStoredProcedures.js.map +1 -0
  166. package/dist/Verbs/ListTables.d.ts +6 -0
  167. package/dist/Verbs/ListTables.d.ts.map +1 -0
  168. package/dist/Verbs/ListTables.js +95 -0
  169. package/dist/Verbs/ListTables.js.map +1 -0
  170. package/dist/Verbs/Logout.d.ts +6 -0
  171. package/dist/Verbs/Logout.d.ts.map +1 -0
  172. package/dist/Verbs/Logout.js +28 -0
  173. package/dist/Verbs/Logout.js.map +1 -0
  174. package/dist/Verbs/Push.d.ts +6 -0
  175. package/dist/Verbs/Push.d.ts.map +1 -0
  176. package/dist/Verbs/Push.js +108 -0
  177. package/dist/Verbs/Push.js.map +1 -0
  178. package/dist/Verbs/RefreshDataSource.d.ts +6 -0
  179. package/dist/Verbs/RefreshDataSource.d.ts.map +1 -0
  180. package/dist/Verbs/RefreshDataSource.js +70 -0
  181. package/dist/Verbs/RefreshDataSource.js.map +1 -0
  182. package/dist/Verbs/RemoveFlow.d.ts +12 -0
  183. package/dist/Verbs/RemoveFlow.d.ts.map +1 -0
  184. package/dist/Verbs/RemoveFlow.js +98 -0
  185. package/dist/Verbs/RemoveFlow.js.map +1 -0
  186. package/dist/Verbs/Run.d.ts +6 -0
  187. package/dist/Verbs/Run.d.ts.map +1 -0
  188. package/dist/Verbs/Run.js +122 -0
  189. package/dist/Verbs/Run.js.map +1 -0
  190. package/dist/Verbs/TelemetrySettings.d.ts +12 -0
  191. package/dist/Verbs/TelemetrySettings.d.ts.map +1 -0
  192. package/dist/Verbs/TelemetrySettings.js +158 -0
  193. package/dist/Verbs/TelemetrySettings.js.map +1 -0
  194. package/dist/Verbs/VerbConstants.d.ts +203 -0
  195. package/dist/Verbs/VerbConstants.d.ts.map +1 -0
  196. package/dist/Verbs/VerbConstants.js +201 -0
  197. package/dist/Verbs/VerbConstants.js.map +1 -0
  198. package/dist/Verbs/index.d.ts +22 -0
  199. package/dist/Verbs/index.d.ts.map +1 -0
  200. package/dist/Verbs/index.js +22 -0
  201. package/dist/Verbs/index.js.map +1 -0
  202. package/package.json +5 -5
@@ -0,0 +1,108 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import { pushApp } from '@microsoft/power-apps-actions';
5
+ import { DataverseSystemDataService, getEnvironmentByName, getPlayerServiceConfig, } from '@microsoft/power-apps-actions';
6
+ import { getCliLogger, getSettings } from '../CliSettings.js';
7
+ import { isGuid, promptConfirm, promptText } from '../CliUtils.js';
8
+ import { HelpStrings } from '../Constants/HelpStrings.js';
9
+ import { printInfo, printSuccess, printWarning } from '../Utils/ConsoleOutput.js';
10
+ import { SharedArguments } from './VerbConstants.js';
11
+ export async function pushAsync(argumentProvider) {
12
+ const settings = getSettings();
13
+ const { appConfig, fileConfig, cliFs } = settings;
14
+ argumentProvider.setDescription(HelpStrings.Verbs.Push.Description);
15
+ argumentProvider.addExamples(HelpStrings.Verbs.Push.Examples);
16
+ createOptionSchema(argumentProvider, appConfig?.environmentId, appConfig?.appId);
17
+ await argumentProvider.runVerb();
18
+ if (!appConfig) {
19
+ throw new Error('power.config.json is required to push an app');
20
+ }
21
+ if (!appConfig.environmentId) {
22
+ throw new Error('Environment ID is required in power.config.json to push an app');
23
+ }
24
+ if (!appConfig.region) {
25
+ appConfig.region = 'prod';
26
+ }
27
+ const authenticationProvider = argumentProvider.getAuthenticationProvider();
28
+ const pushConfig = {
29
+ vfs: cliFs,
30
+ actionsParams: {
31
+ solutionId: await argumentProvider.getOption('solutionId', true),
32
+ appName: appConfig.appId,
33
+ },
34
+ environmentName: appConfig.environmentId,
35
+ region: appConfig.region || 'prod',
36
+ authProvider: authenticationProvider,
37
+ localFilePaths: fileConfig,
38
+ logger: getCliLogger(),
39
+ httpClient: getPlayerServiceConfig().httpClient,
40
+ };
41
+ const app = await pushApp(pushConfig);
42
+ printSuccess(`App pushed successfully. You can play your app at ${app.properties.appPlayUri}`);
43
+ printInfo("Hint: Run 'npx power-apps run' to test locally.");
44
+ }
45
+ function createOptionSchema(argumentProvider, environmentId, appId) {
46
+ argumentProvider.addOption({
47
+ flags: {
48
+ key: SharedArguments.SolutionId.name,
49
+ alias: SharedArguments.SolutionId.alias,
50
+ },
51
+ env: SharedArguments.SolutionId.envVar,
52
+ description: HelpStrings.Verbs.Push.Options.SolutionName,
53
+ optionalInNonInteractive: true,
54
+ customPrompt: async () => {
55
+ if (!environmentId) {
56
+ throw new Error('Environment ID is required');
57
+ }
58
+ if (!appId) {
59
+ const useSpecificSolution = await promptConfirm({
60
+ message: 'Would you like to specify a solution to push the app into?',
61
+ });
62
+ if (!useSpecificSolution) {
63
+ const environmentDetails = await getEnvironmentByName(environmentId);
64
+ const dvService = new DataverseSystemDataService(getPlayerServiceConfig().httpClient);
65
+ const orgUrl = environmentDetails.properties.linkedEnvironmentMetadata?.instanceUrl;
66
+ if (!orgUrl) {
67
+ throw new Error('Organization URL is not available for the specified environment.');
68
+ }
69
+ const preferredSolutionId = await dvService.getPreferredSolution(orgUrl);
70
+ // If we are not able to get a preferred solution, return empty. The app will just not be added to a solution
71
+ if (!preferredSolutionId) {
72
+ printWarning('No preferred solution found. App will not be put in a solution. We recommended setting a preferred solution for your environment in the future.');
73
+ return '';
74
+ }
75
+ return preferredSolutionId;
76
+ }
77
+ else {
78
+ const solutionName = await promptText({
79
+ message: 'Please enter the solution name or ID:',
80
+ });
81
+ if (!solutionName) {
82
+ return '';
83
+ }
84
+ // If it is a GUID, return as is
85
+ if (isGuid(solutionName)) {
86
+ return solutionName;
87
+ }
88
+ const environmentDetails = await getEnvironmentByName(environmentId);
89
+ const dvService = new DataverseSystemDataService(getPlayerServiceConfig().httpClient);
90
+ const orgUrl = environmentDetails.properties.linkedEnvironmentMetadata?.instanceUrl;
91
+ if (!orgUrl) {
92
+ throw new Error('Organization URL is not available for the specified environment.');
93
+ }
94
+ const solutions = await dvService.getSolutions(orgUrl);
95
+ const solutionId = solutions.find((solution) => solution.friendlyname.toLowerCase() === solutionName.toLowerCase() ||
96
+ solution.uniquename.toLowerCase() === solutionName.toLowerCase())?.solutionid;
97
+ if (!solutionId) {
98
+ throw new Error(`Solution with name '${solutionName}' not found.`);
99
+ }
100
+ return solutionId;
101
+ }
102
+ }
103
+ // If none, return empty
104
+ return '';
105
+ },
106
+ });
107
+ }
108
+ //# sourceMappingURL=Push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Push.js","sourceRoot":"","sources":["../../src/Verbs/Push.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import type { ArgumentProvider } from '../ArgumentProvider.js';
5
+ export declare function refreshDataSourceAsync(argumentProvider: ArgumentProvider): Promise<void>;
6
+ //# sourceMappingURL=RefreshDataSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RefreshDataSource.d.ts","sourceRoot":"","sources":["../../src/Verbs/RefreshDataSource.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAM5D,wBAAsB,sBAAsB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2C9F"}
@@ -0,0 +1,70 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import { getPlayerServiceConfig, refreshDataSourceAsync as refreshDataSourceActionsAsync, } from '@microsoft/power-apps-actions';
5
+ import { getCliLogger, getSettings } from '../CliSettings.js';
6
+ import { promptConfirm, promptText } from '../CliUtils.js';
7
+ import { HelpStrings } from '../Constants/HelpStrings.js';
8
+ import { RefreshDataSourceArguments } from './VerbConstants.js';
9
+ export async function refreshDataSourceAsync(argumentProvider) {
10
+ const settings = getSettings();
11
+ const { fileConfig, cliFs } = settings;
12
+ createOptionSchema(argumentProvider);
13
+ await argumentProvider.runVerb();
14
+ const playerServiceConfig = getPlayerServiceConfig();
15
+ const authenticationProvider = argumentProvider.getAuthenticationProvider();
16
+ const rawDataSourceName = await argumentProvider.getOption('dataSourceName');
17
+ const dataSourceName = rawDataSourceName || undefined;
18
+ const config = {
19
+ vfs: cliFs,
20
+ authProvider: authenticationProvider,
21
+ region: playerServiceConfig.region,
22
+ environmentName: playerServiceConfig.environmentName,
23
+ localFilePaths: {
24
+ powerConfigPath: fileConfig.powerConfigPath,
25
+ schemaPath: fileConfig.schemaPath,
26
+ codeGenPath: fileConfig.codeGenPath,
27
+ },
28
+ logger: getCliLogger(),
29
+ actionsParams: {
30
+ dataSourceName,
31
+ },
32
+ };
33
+ const result = await refreshDataSourceActionsAsync(config);
34
+ for (const dsName of result.succeeded) {
35
+ console.log(`'${dsName}' refreshed successfully.`);
36
+ }
37
+ for (const failure of result.failed) {
38
+ console.error(`Failed to refresh '${failure.dataSourceName}': ${failure.error}`);
39
+ }
40
+ if (result.succeeded.length > 0 && result.failed.length === 0) {
41
+ console.log("Hint: Run 'npx power-apps run' to test locally, or 'npx power-apps push' to deploy.");
42
+ }
43
+ }
44
+ function createOptionSchema(argumentProvider) {
45
+ argumentProvider.setDescription(HelpStrings.Verbs['Refresh-data-source'].Description);
46
+ argumentProvider.addExamples(HelpStrings.Verbs['Refresh-data-source'].Examples ?? []);
47
+ argumentProvider.addOptions([
48
+ {
49
+ flags: {
50
+ key: RefreshDataSourceArguments.DataSourceName.name,
51
+ alias: RefreshDataSourceArguments.DataSourceName.alias,
52
+ },
53
+ env: RefreshDataSourceArguments.DataSourceName.envVar,
54
+ description: HelpStrings.Verbs['Refresh-data-source'].Options?.DataSourceName ?? '',
55
+ optionalInNonInteractive: true,
56
+ customPrompt: async () => {
57
+ const hasSpecificDs = await promptConfirm({
58
+ message: 'Do you want to refresh a specific data source? (No to refresh all)',
59
+ });
60
+ if (hasSpecificDs) {
61
+ return await promptText({
62
+ message: RefreshDataSourceArguments.DataSourceName.promptMessage,
63
+ });
64
+ }
65
+ return '';
66
+ },
67
+ },
68
+ ]);
69
+ }
70
+ //# sourceMappingURL=RefreshDataSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RefreshDataSource.js","sourceRoot":"","sources":["../../src/Verbs/RefreshDataSource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import type { ArgumentProvider } from '../ArgumentProvider.js';
5
+ /**
6
+ * Remove a cloud flow from the current Power Apps code app.
7
+ *
8
+ * @param {ArgumentProvider} argumentProvider
9
+ * @returns {Promise<void>}
10
+ */
11
+ export declare function removeFlowAsync(argumentProvider: ArgumentProvider): Promise<void>;
12
+ //# sourceMappingURL=RemoveFlow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoveFlow.d.ts","sourceRoot":"","sources":["../../src/Verbs/RemoveFlow.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAO5D;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CvF"}
@@ -0,0 +1,98 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import { getPlayerServiceConfig, removeFlowAsync as removeFlowActionAsync, } from '@microsoft/power-apps-actions';
5
+ import { getCliLogger, getSettings } from '../CliSettings.js';
6
+ import { promptConfirm, promptText } from '../CliUtils.js';
7
+ import { HelpStrings } from '../Constants/HelpStrings.js';
8
+ import { CliFS } from '../FS/CliFs.js';
9
+ import { RemoveFlowArguments } from './VerbConstants.js';
10
+ /**
11
+ * Remove a cloud flow from the current Power Apps code app.
12
+ *
13
+ * @param {ArgumentProvider} argumentProvider
14
+ * @returns {Promise<void>}
15
+ */
16
+ export async function removeFlowAsync(argumentProvider) {
17
+ const settings = getSettings();
18
+ const { fileConfig } = settings;
19
+ createOptionSchema(argumentProvider);
20
+ await argumentProvider.runVerb();
21
+ const cliFs = new CliFS({
22
+ cwd: process.cwd(),
23
+ allowCwdRead: true,
24
+ allowCwdWrite: true,
25
+ });
26
+ const playerServiceConfig = getPlayerServiceConfig();
27
+ const authenticationProvider = argumentProvider.getAuthenticationProvider();
28
+ const flowDataSourceName = await argumentProvider.getOption('flowName');
29
+ const flowId = await argumentProvider.getOption('flowId');
30
+ const context = {
31
+ vfs: cliFs,
32
+ authProvider: authenticationProvider,
33
+ region: playerServiceConfig.region,
34
+ environmentName: playerServiceConfig.environmentName,
35
+ actionsParams: {
36
+ flowDataSourceName,
37
+ flowId,
38
+ },
39
+ localFilePaths: {
40
+ powerConfigPath: fileConfig.powerConfigPath,
41
+ schemaPath: fileConfig.schemaPath,
42
+ codeGenPath: fileConfig.codeGenPath,
43
+ },
44
+ logger: getCliLogger(),
45
+ };
46
+ const result = await removeFlowActionAsync(context);
47
+ const flowIdentifier = flowDataSourceName ?? flowId ?? '';
48
+ if (!result.found) {
49
+ console.log(`\nFlow "${flowIdentifier}" was not found in power.config.`);
50
+ }
51
+ else if (result.success) {
52
+ console.log(`\nFlow "${flowIdentifier}" removed successfully.`);
53
+ }
54
+ else {
55
+ console.error(`\nFailed to remove flow: ${result.error}`);
56
+ }
57
+ }
58
+ function createOptionSchema(argumentProvider) {
59
+ argumentProvider.setDescription(HelpStrings.Verbs['Remove-flow'].Description);
60
+ argumentProvider.addOptions([
61
+ {
62
+ flags: {
63
+ key: RemoveFlowArguments.FlowDataSourceName.name,
64
+ alias: RemoveFlowArguments.FlowDataSourceName.alias,
65
+ },
66
+ env: RemoveFlowArguments.FlowDataSourceName.envVar,
67
+ description: HelpStrings.Verbs['Remove-flow'].Options.FlowDataSourceName,
68
+ optionalInNonInteractive: true,
69
+ customPrompt: async () => {
70
+ const useFlowName = await promptConfirm({
71
+ message: 'Do you want to remove a flow by name?',
72
+ });
73
+ if (useFlowName) {
74
+ return await promptText({
75
+ message: RemoveFlowArguments.FlowDataSourceName.promptMessage,
76
+ });
77
+ }
78
+ return undefined;
79
+ },
80
+ },
81
+ {
82
+ flags: {
83
+ key: RemoveFlowArguments.FlowId.name,
84
+ alias: RemoveFlowArguments.FlowId.alias,
85
+ },
86
+ env: RemoveFlowArguments.FlowId.envVar,
87
+ description: HelpStrings.Verbs['Remove-flow'].Options.FlowId,
88
+ optionalInNonInteractive: true,
89
+ customPrompt: async () => {
90
+ const existingName = await argumentProvider.getOption('flowName', true);
91
+ if (existingName)
92
+ return undefined;
93
+ return await promptText({ message: RemoveFlowArguments.FlowId.promptMessage });
94
+ },
95
+ },
96
+ ]);
97
+ }
98
+ //# sourceMappingURL=RemoveFlow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoveFlow.js","sourceRoot":"","sources":["../../src/Verbs/RemoveFlow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import type { ArgumentProvider } from '../ArgumentProvider.js';
5
+ export declare function runAsync(argumentProvider: ArgumentProvider): Promise<void>;
6
+ //# sourceMappingURL=Run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Run.d.ts","sourceRoot":"","sources":["../../src/Verbs/Run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAO5D,wBAAsB,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhF"}
@@ -0,0 +1,122 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import * as fs from 'fs';
5
+ import * as http from 'http';
6
+ import { getSettings } from '../CliSettings.js';
7
+ import { createPlayUrl } from '../CliUtils.js';
8
+ import { HelpStrings } from '../Constants/HelpStrings.js';
9
+ import { printError, printInfo, printWarning } from '../Utils/ConsoleOutput.js';
10
+ import { RunArguments } from './VerbConstants.js';
11
+ export async function runAsync(argumentProvider) {
12
+ const settings = getSettings();
13
+ const { appConfig, fileConfig } = settings;
14
+ createOptionSchema(argumentProvider, appConfig?.localAppUrl);
15
+ await argumentProvider.runVerb();
16
+ if (!appConfig) {
17
+ throw new Error('power.config.json is required to run an app');
18
+ }
19
+ if (!appConfig.environmentId) {
20
+ throw new Error('Environment ID is required in power.config.json to run an app');
21
+ }
22
+ if (!appConfig.region) {
23
+ appConfig.region = 'prod';
24
+ }
25
+ const powerConfigPath = fileConfig.powerConfigPath;
26
+ const port = await argumentProvider.getOption('port');
27
+ const appUrl = await argumentProvider.getOption('localAppUrl');
28
+ // Start the local server
29
+ await startLocalServer(powerConfigPath, parseInt(port, 10), appConfig, appUrl);
30
+ }
31
+ async function startLocalServer(powerConfigPath, port, appConfig, localAppUrl) {
32
+ return new Promise((resolve, reject) => {
33
+ const server = http.createServer((req, res) => {
34
+ res.setHeader('Access-Control-Allow-Origin', '*');
35
+ res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS');
36
+ res.setHeader('Access-Control-Allow-Headers', '*');
37
+ if (req.method === 'OPTIONS') {
38
+ res.writeHead(200);
39
+ res.end();
40
+ return;
41
+ }
42
+ try {
43
+ if (!fs.existsSync(powerConfigPath)) {
44
+ res.writeHead(404, { 'Content-Type': 'application/json' });
45
+ res.end(JSON.stringify({ error: 'power.config.json not found' }));
46
+ return;
47
+ }
48
+ const fileContent = fs.readFileSync(powerConfigPath, 'utf8');
49
+ res.writeHead(200, { 'Content-Type': 'application/json' });
50
+ res.end(fileContent);
51
+ }
52
+ catch (error) {
53
+ printError(`Error serving power.config.json: ${error.message}`);
54
+ res.writeHead(500, { 'Content-Type': 'application/json' });
55
+ res.end(JSON.stringify({ error: 'Internal server error' }));
56
+ }
57
+ });
58
+ server.listen(port, 'localhost', async () => {
59
+ printInfo(`Your power.config.json to setup connections is available at http://localhost:${port}`);
60
+ printInfo(`\nYou can play your app locally at ${createPlayUrl(appConfig.region, appConfig.environmentId, 'local', localAppUrl, `http://localhost:${port}`)}`);
61
+ // Check if localAppUrl is running
62
+ await checkLocalAppUrl(localAppUrl);
63
+ });
64
+ server.on('error', (error) => {
65
+ printError(`Server error: ${error.message}`);
66
+ reject(error);
67
+ });
68
+ process.on('SIGINT', () => {
69
+ printInfo('\nShutting down server...');
70
+ server.close(() => {
71
+ printInfo('Server stopped');
72
+ process.exit(0);
73
+ });
74
+ });
75
+ });
76
+ }
77
+ function createOptionSchema(argumentProvider, localAppUrl) {
78
+ argumentProvider.setDescription(HelpStrings.Verbs.Run.Description);
79
+ argumentProvider.addExamples(HelpStrings.Verbs.Run.Examples);
80
+ argumentProvider.addOptions([
81
+ {
82
+ flags: {
83
+ key: RunArguments.Port.name,
84
+ alias: RunArguments.Port.alias,
85
+ },
86
+ env: RunArguments.Port.envVar,
87
+ default: RunArguments.Port.initialValue,
88
+ description: HelpStrings.Verbs.Run.Options.Port,
89
+ },
90
+ {
91
+ flags: {
92
+ key: RunArguments.LocalAppUrl.name,
93
+ alias: RunArguments.LocalAppUrl.alias,
94
+ },
95
+ env: RunArguments.LocalAppUrl.envVar,
96
+ default: localAppUrl || RunArguments.LocalAppUrl.initialValue,
97
+ description: HelpStrings.Verbs.Run.Options.LocalAppUrl,
98
+ },
99
+ ]);
100
+ }
101
+ async function checkLocalAppUrl(localAppUrl) {
102
+ try {
103
+ const controller = new AbortController();
104
+ const timeoutId = setTimeout(() => controller.abort(), 5000);
105
+ const response = await fetch(localAppUrl, {
106
+ method: 'HEAD',
107
+ signal: controller.signal,
108
+ });
109
+ clearTimeout(timeoutId);
110
+ if (response.ok || response.status < 500) {
111
+ // No-op
112
+ return;
113
+ }
114
+ else {
115
+ printWarning(`Warning: Your local app running at ${localAppUrl} returned status ${response.status}, which is unexpected. Check your app code for exceptions.`);
116
+ }
117
+ }
118
+ catch (error) {
119
+ printWarning(`Warning: Your local app is NOT currently running at ${localAppUrl}`);
120
+ }
121
+ }
122
+ //# sourceMappingURL=Run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Run.js","sourceRoot":"","sources":["../../src/Verbs/Run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import type { ArgumentProvider } from '../ArgumentProvider.js';
5
+ /**
6
+ * Modify the user telemetry settings
7
+ * Does not resolve conflicts between options; Just writes whatever is provided
8
+ * @param {ArgumentProvider} argumentProvider
9
+ * @returns {Promise<void>}
10
+ */
11
+ export declare function modifyTelemetrySettings(argumentProvider: ArgumentProvider): Promise<void>;
12
+ //# sourceMappingURL=TelemetrySettings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelemetrySettings.d.ts","sourceRoot":"","sources":["../../src/Verbs/TelemetrySettings.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAM5D;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC/F"}
@@ -0,0 +1,158 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ import { CLI_CONFIG_DIRECTORY, USER_SETTINGS_FILE } from '../Constants.js';
7
+ import { HelpStrings } from '../Constants/HelpStrings.js';
8
+ import { printError, printKeyValueList, printWarning } from '../Utils/ConsoleOutput.js';
9
+ /**
10
+ * Modify the user telemetry settings
11
+ * Does not resolve conflicts between options; Just writes whatever is provided
12
+ * @param {ArgumentProvider} argumentProvider
13
+ * @returns {Promise<void>}
14
+ */
15
+ export async function modifyTelemetrySettings(argumentProvider) {
16
+ createOptionSchema(argumentProvider);
17
+ await argumentProvider.runVerb();
18
+ // These are switches, so they will be true or undefined
19
+ const enableTelemetry = await argumentProvider.getOption('enable', true);
20
+ const disableTelemetry = await argumentProvider.getOption('disable', true);
21
+ const showSettings = await argumentProvider.getOption('showSettings', true);
22
+ const consoleOnly = await argumentProvider.getOption('consoleOnly', true);
23
+ const outputToConsole = await argumentProvider.getOption('outputToConsole', true);
24
+ const jsonMode = argumentProvider.isJsonMode();
25
+ // if all are undefined, show current settings as default behavior
26
+ if (enableTelemetry === undefined &&
27
+ disableTelemetry === undefined &&
28
+ consoleOnly === undefined &&
29
+ outputToConsole === undefined &&
30
+ showSettings === undefined) {
31
+ displayUserTelemetrySettings(jsonMode);
32
+ return;
33
+ }
34
+ // if both enable and disable are set, throw an error
35
+ if (enableTelemetry && disableTelemetry) {
36
+ throw new Error('Cannot enable and disable telemetry at the same time.');
37
+ }
38
+ if (showSettings) {
39
+ displayUserTelemetrySettings(jsonMode);
40
+ }
41
+ else {
42
+ const telemetryEnabled = enableTelemetry ? true : disableTelemetry ? false : undefined;
43
+ updateUserTelemetrySettings(telemetryEnabled, consoleOnly, outputToConsole);
44
+ }
45
+ }
46
+ function createOptionSchema(argumentProvider) {
47
+ argumentProvider.setDescription(HelpStrings.Verbs.Telemetry.Description);
48
+ argumentProvider.addExamples(HelpStrings.Verbs.Telemetry.Examples);
49
+ argumentProvider.addSwitches([
50
+ {
51
+ flags: {
52
+ key: 'enable',
53
+ alias: 'te',
54
+ },
55
+ env: 'POWERAPPS_CLI_ENABLE_TELEMETRY',
56
+ description: HelpStrings.Verbs.Telemetry.Options.Enable,
57
+ },
58
+ {
59
+ flags: {
60
+ key: 'disable',
61
+ alias: 'td',
62
+ },
63
+ env: 'POWERAPPS_CLI_DISABLE_TELEMETRY',
64
+ description: HelpStrings.Verbs.Telemetry.Options.Disable,
65
+ },
66
+ {
67
+ flags: {
68
+ key: 'show-settings',
69
+ alias: 'ts',
70
+ },
71
+ env: 'POWERAPPS_CLI_SHOW_SETTINGS',
72
+ description: HelpStrings.Verbs.Telemetry.Options.ShowSettings,
73
+ },
74
+ ]);
75
+ argumentProvider.addOptions([
76
+ {
77
+ flags: {
78
+ key: 'console-only',
79
+ alias: 'tc',
80
+ },
81
+ env: 'POWERAPPS_CLI_CONSOLE_ONLY',
82
+ description: HelpStrings.Verbs.Telemetry.Options.ConsoleOnly,
83
+ },
84
+ {
85
+ flags: {
86
+ key: 'output-to-console',
87
+ alias: 'to',
88
+ },
89
+ env: 'POWERAPPS_CLI_OUTPUT_TO_CONSOLE',
90
+ description: HelpStrings.Verbs.Telemetry.Options.OutputToConsole,
91
+ },
92
+ ]);
93
+ }
94
+ function displayUserTelemetrySettings(jsonMode) {
95
+ try {
96
+ const userSettingsPath = path.join(CLI_CONFIG_DIRECTORY, USER_SETTINGS_FILE);
97
+ if (fs.existsSync(userSettingsPath)) {
98
+ const fileContent = fs.readFileSync(userSettingsPath, 'utf-8');
99
+ const existingSettings = JSON.parse(fileContent);
100
+ if (jsonMode) {
101
+ console.log(JSON.stringify(existingSettings, null, 2));
102
+ return;
103
+ }
104
+ printKeyValueList({
105
+ title: 'Telemetry Settings:',
106
+ items: [existingSettings],
107
+ fields: [
108
+ { label: 'Enabled', value: (s) => String(s.enabled) },
109
+ { label: 'Console Only', value: (s) => String(s.consoleOnly) },
110
+ { label: 'Output To Console', value: (s) => String(s.outputToConsole) },
111
+ ],
112
+ });
113
+ }
114
+ else {
115
+ if (jsonMode) {
116
+ console.log(JSON.stringify(null));
117
+ return;
118
+ }
119
+ printWarning('No telemetry settings found. Using default settings.');
120
+ }
121
+ }
122
+ catch (error) {
123
+ printError(`Failed to display telemetry settings: ${error.message}`);
124
+ }
125
+ }
126
+ function updateUserTelemetrySettings(telemetryEnabled, consoleOnly, outputToConsole) {
127
+ // CLI_CONFIG_DIRECTORY, USER_SETTINGS_FILE
128
+ try {
129
+ if (fs.existsSync(CLI_CONFIG_DIRECTORY) === false) {
130
+ fs.mkdirSync(CLI_CONFIG_DIRECTORY, { recursive: true });
131
+ }
132
+ const userSettingsPath = path.join(CLI_CONFIG_DIRECTORY, USER_SETTINGS_FILE);
133
+ let userSettings;
134
+ if (fs.existsSync(userSettingsPath)) {
135
+ const fileContent = fs.readFileSync(userSettingsPath, 'utf-8');
136
+ const existingSettings = JSON.parse(fileContent);
137
+ userSettings = {
138
+ enabled: telemetryEnabled ?? existingSettings.enabled,
139
+ consoleOnly: consoleOnly !== undefined ? consoleOnly === 'true' : existingSettings.consoleOnly,
140
+ outputToConsole: outputToConsole !== undefined
141
+ ? outputToConsole === 'true'
142
+ : existingSettings.outputToConsole,
143
+ };
144
+ }
145
+ else {
146
+ userSettings = {
147
+ enabled: telemetryEnabled ?? true,
148
+ consoleOnly: consoleOnly !== undefined ? consoleOnly === 'true' : false,
149
+ outputToConsole: outputToConsole !== undefined ? outputToConsole === 'true' : false,
150
+ };
151
+ }
152
+ fs.writeFileSync(userSettingsPath, JSON.stringify(userSettings, null, 2), 'utf-8');
153
+ }
154
+ catch (error) {
155
+ throw new Error(`Failed to update telemetry settings: ${error.message}`);
156
+ }
157
+ }
158
+ //# sourceMappingURL=TelemetrySettings.js.map