@microsoft/power-apps 1.0.0 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -32
- package/lib/__tests__/DefaultPowerAppsBridge.test.d.ts +5 -0
- package/lib/__tests__/DefaultPowerAppsBridge.test.d.ts.map +1 -0
- package/lib/__tests__/DefaultPowerAppsBridge.test.js +173 -0
- package/lib/__tests__/DefaultPowerAppsBridge.test.js.map +1 -0
- package/lib/__tests__/connectorDataOperationExecutor.spec.d.ts +5 -0
- package/lib/__tests__/connectorDataOperationExecutor.spec.d.ts.map +1 -0
- package/lib/__tests__/{connectorDataOperation.spec.js → connectorDataOperationExecutor.spec.js} +99 -15
- package/lib/__tests__/connectorDataOperationExecutor.spec.js.map +1 -0
- package/lib/__tests__/dataverseDataOperationExecutor.spec.d.ts +5 -0
- package/lib/__tests__/dataverseDataOperationExecutor.spec.d.ts.map +1 -0
- package/lib/__tests__/{dataverseDataOperation.spec.js → dataverseDataOperationExecutor.spec.js} +28 -70
- package/lib/__tests__/dataverseDataOperationExecutor.spec.js.map +1 -0
- package/lib/__tests__/{dataverseDataOperation.spec.d.ts → mockDataOperationExecutor.spec.d.ts} +1 -1
- package/lib/__tests__/mockDataOperationExecutor.spec.d.ts.map +1 -0
- package/lib/__tests__/mockDataOperationExecutor.spec.js +51 -0
- package/lib/__tests__/mockDataOperationExecutor.spec.js.map +1 -0
- package/lib/__tests__/powerDataRuntimeInstance.test.js +2 -17
- package/lib/__tests__/powerDataRuntimeInstance.test.js.map +1 -1
- package/lib/__tests__/runtimeDataClient.spec.js +20 -0
- package/lib/__tests__/runtimeDataClient.spec.js.map +1 -1
- package/lib/__tests__/runtimeDataOperation.test.js +42 -41
- package/lib/__tests__/runtimeDataOperation.test.js.map +1 -1
- package/lib/app/App.Types.d.ts +28 -0
- package/lib/app/App.Types.d.ts.map +1 -0
- package/lib/{__tests__/connectorDataOperation.spec.d.ts → app/App.Types.js} +1 -1
- package/lib/app/App.Types.js.map +1 -0
- package/lib/app/Config.d.ts +6 -0
- package/lib/app/Config.d.ts.map +1 -0
- package/lib/app/Config.js +10 -0
- package/lib/app/Config.js.map +1 -0
- package/lib/app/ContextProvider.d.ts +6 -0
- package/lib/app/ContextProvider.d.ts.map +1 -0
- package/lib/app/ContextProvider.js +13 -0
- package/lib/app/ContextProvider.js.map +1 -0
- package/lib/app/index.d.ts +3 -1
- package/lib/app/index.d.ts.map +1 -1
- package/lib/app/index.js +2 -1
- package/lib/app/index.js.map +1 -1
- package/lib/data/executors/index.d.ts +6 -0
- package/lib/data/executors/index.d.ts.map +1 -0
- package/lib/data/executors/index.js +5 -0
- package/lib/data/executors/index.js.map +1 -0
- package/lib/data/metadata/dataverse/index.d.ts +6 -0
- package/lib/data/metadata/dataverse/index.d.ts.map +1 -0
- package/lib/data/metadata/dataverse/index.js +5 -0
- package/lib/data/metadata/dataverse/index.js.map +1 -0
- package/lib/data/powerAppsData.d.ts +3 -1
- package/lib/data/powerAppsData.d.ts.map +1 -1
- package/lib/data/powerAppsData.js +6 -5
- package/lib/data/powerAppsData.js.map +1 -1
- package/lib/internal/data/ConnectionUtils.js +1 -1
- package/lib/internal/data/ConnectionUtils.js.map +1 -1
- package/lib/internal/data/OperationExecutor.js +1 -1
- package/lib/internal/data/OperationExecutor.js.map +1 -1
- package/lib/internal/data/core/api/createRecord.d.ts.map +1 -1
- package/lib/internal/data/core/api/createRecord.js +1 -1
- package/lib/internal/data/core/api/createRecord.js.map +1 -1
- package/lib/internal/data/core/api/deleteRecord.js +1 -1
- package/lib/internal/data/core/api/deleteRecord.js.map +1 -1
- package/lib/internal/data/core/api/execute.js +1 -1
- package/lib/internal/data/core/api/execute.js.map +1 -1
- package/lib/internal/data/core/api/retrieveMultipleRecords.d.ts.map +1 -1
- package/lib/internal/data/core/api/retrieveMultipleRecords.js +1 -1
- package/lib/internal/data/core/api/retrieveMultipleRecords.js.map +1 -1
- package/lib/internal/data/core/api/retrieveRecord.d.ts.map +1 -1
- package/lib/internal/data/core/api/retrieveRecord.js +1 -1
- package/lib/internal/data/core/api/retrieveRecord.js.map +1 -1
- package/lib/internal/data/core/api/updateRecord.d.ts.map +1 -1
- package/lib/internal/data/core/api/updateRecord.js +1 -1
- package/lib/internal/data/core/api/updateRecord.js.map +1 -1
- package/lib/internal/data/core/common/types.d.ts +3 -10
- package/lib/internal/data/core/common/types.d.ts.map +1 -1
- package/lib/internal/data/core/common/types.js.map +1 -1
- package/lib/internal/data/core/data/{runtimeDataOperations.d.ts → defaultOperationOrchestrator.d.ts} +6 -12
- package/lib/internal/data/core/data/defaultOperationOrchestrator.d.ts.map +1 -0
- package/lib/internal/data/core/data/{runtimeDataOperations.js → defaultOperationOrchestrator.js} +14 -43
- package/lib/internal/data/core/data/defaultOperationOrchestrator.js.map +1 -0
- package/lib/internal/data/core/data/executors/__tests__/dataverseDataOperationExecutor.test.d.ts +5 -0
- package/lib/internal/data/core/data/executors/__tests__/dataverseDataOperationExecutor.test.d.ts.map +1 -0
- package/lib/internal/data/core/data/executors/__tests__/dataverseDataOperationExecutor.test.js +116 -0
- package/lib/internal/data/core/data/executors/__tests__/dataverseDataOperationExecutor.test.js.map +1 -0
- package/lib/internal/data/core/data/{connectorDataOperation.d.ts → executors/connectorDataOperationExecutor.d.ts} +22 -7
- package/lib/internal/data/core/data/executors/connectorDataOperationExecutor.d.ts.map +1 -0
- package/lib/internal/data/core/data/{connectorDataOperation.js → executors/connectorDataOperationExecutor.js} +66 -30
- package/lib/internal/data/core/data/executors/connectorDataOperationExecutor.js.map +1 -0
- package/lib/internal/data/core/data/{dataverseDataOperation.d.ts → executors/dataverseDataOperationExecutor.d.ts} +19 -27
- package/lib/internal/data/core/data/executors/dataverseDataOperationExecutor.d.ts.map +1 -0
- package/lib/internal/data/core/data/executors/dataverseDataOperationExecutor.js +458 -0
- package/lib/internal/data/core/data/executors/dataverseDataOperationExecutor.js.map +1 -0
- package/lib/internal/data/core/data/executors/index.d.ts +5 -0
- package/lib/internal/data/core/data/executors/index.d.ts.map +1 -0
- package/lib/internal/data/core/data/executors/index.js +5 -0
- package/lib/internal/data/core/data/executors/index.js.map +1 -0
- package/lib/internal/data/core/data/executors/mockDataOperationExecutor.d.ts +21 -0
- package/lib/internal/data/core/data/executors/mockDataOperationExecutor.d.ts.map +1 -0
- package/lib/internal/data/core/data/executors/mockDataOperationExecutor.js +75 -0
- package/lib/internal/data/core/data/executors/mockDataOperationExecutor.js.map +1 -0
- package/lib/internal/data/core/data/executors/shared/stringQueryOptions.d.ts +11 -0
- package/lib/internal/data/core/data/executors/shared/stringQueryOptions.d.ts.map +1 -0
- package/lib/internal/data/core/data/executors/shared/stringQueryOptions.js +38 -0
- package/lib/internal/data/core/data/executors/shared/stringQueryOptions.js.map +1 -0
- package/lib/internal/data/core/metadata/runtimeDataSourceService.d.ts.map +1 -1
- package/lib/internal/data/core/metadata/runtimeDataSourceService.js +2 -1
- package/lib/internal/data/core/metadata/runtimeDataSourceService.js.map +1 -1
- package/lib/internal/data/core/runtime/getRuntimeContext.d.ts +3 -2
- package/lib/internal/data/core/runtime/getRuntimeContext.d.ts.map +1 -1
- package/lib/internal/data/core/runtime/getRuntimeContext.js +16 -3
- package/lib/internal/data/core/runtime/getRuntimeContext.js.map +1 -1
- package/lib/internal/data/core/runtime/powerDataRuntime.d.ts +3 -11
- package/lib/internal/data/core/runtime/powerDataRuntime.d.ts.map +1 -1
- package/lib/internal/data/core/runtime/powerDataRuntime.js +6 -19
- package/lib/internal/data/core/runtime/powerDataRuntime.js.map +1 -1
- package/lib/internal/data/core/runtime/powerDataRuntimeInstance.d.ts +2 -3
- package/lib/internal/data/core/runtime/powerDataRuntimeInstance.d.ts.map +1 -1
- package/lib/internal/data/core/runtime/powerDataRuntimeInstance.js +1 -3
- package/lib/internal/data/core/runtime/powerDataRuntimeInstance.js.map +1 -1
- package/lib/internal/data/core/runtimeClient/runtimeDataClient.d.ts.map +1 -1
- package/lib/internal/data/core/runtimeClient/runtimeDataClient.js +1 -0
- package/lib/internal/data/core/runtimeClient/runtimeDataClient.js.map +1 -1
- package/lib/internal/data/core/telemetry/log.d.ts +7 -0
- package/lib/internal/data/core/telemetry/log.d.ts.map +1 -1
- package/lib/internal/data/core/telemetry/log.js +38 -1
- package/lib/internal/data/core/telemetry/log.js.map +1 -1
- package/lib/internal/data/core/types/dataverseMetadata.d.ts +408 -0
- package/lib/internal/data/core/types/dataverseMetadata.d.ts.map +1 -0
- package/lib/internal/data/core/types/dataverseMetadata.js +118 -0
- package/lib/internal/data/core/types/dataverseMetadata.js.map +1 -0
- package/lib/internal/data/core/types/index.d.ts +33 -2
- package/lib/internal/data/core/types/index.d.ts.map +1 -1
- package/lib/internal/data/core/types/index.js.map +1 -1
- package/lib/internal/data/index.d.ts +5 -0
- package/lib/internal/data/index.d.ts.map +1 -0
- package/lib/internal/data/index.js +5 -0
- package/lib/internal/data/index.js.map +1 -0
- package/lib/internal/plugins/DefaultPowerAppsBridge.d.ts +19 -0
- package/lib/internal/plugins/DefaultPowerAppsBridge.d.ts.map +1 -0
- package/lib/internal/plugins/DefaultPowerAppsBridge.js +97 -0
- package/lib/internal/plugins/DefaultPowerAppsBridge.js.map +1 -0
- package/lib/internal/plugins/PluginBridge.d.ts +14 -0
- package/lib/internal/plugins/PluginBridge.d.ts.map +1 -0
- package/lib/internal/plugins/PluginBridge.js +25 -0
- package/lib/internal/plugins/PluginBridge.js.map +1 -0
- package/lib/internal/plugins/SendMessage/CompatibleMessageReceiver.d.ts.map +1 -0
- package/lib/internal/{communication → plugins/SendMessage}/CompatibleMessageReceiver.js +4 -3
- package/lib/internal/plugins/SendMessage/CompatibleMessageReceiver.js.map +1 -0
- package/lib/internal/plugins/SendMessage/IncompatibleMessageReceiver.d.ts.map +1 -0
- package/lib/internal/plugins/SendMessage/IncompatibleMessageReceiver.js.map +1 -0
- package/lib/internal/plugins/SendMessage/MessageReceiver.Types.d.ts.map +1 -0
- package/lib/internal/plugins/SendMessage/MessageReceiver.Types.js.map +1 -0
- package/lib/internal/{communication → plugins/SendMessage}/SendMessage.d.ts +0 -1
- package/lib/internal/plugins/SendMessage/SendMessage.d.ts.map +1 -0
- package/lib/internal/{communication → plugins/SendMessage}/SendMessage.js +1 -2
- package/lib/internal/plugins/SendMessage/SendMessage.js.map +1 -0
- package/lib/internal/plugins/SendMessage/SendMessageOperation.d.ts.map +1 -0
- package/lib/internal/plugins/SendMessage/SendMessageOperation.js.map +1 -0
- package/lib/internal/plugins/SendMessage/index.d.ts +6 -0
- package/lib/internal/plugins/SendMessage/index.d.ts.map +1 -0
- package/lib/internal/plugins/SendMessage/index.js +5 -0
- package/lib/internal/plugins/SendMessage/index.js.map +1 -0
- package/lib/internal/plugins/index.d.ts +5 -0
- package/lib/internal/plugins/index.d.ts.map +1 -0
- package/lib/internal/plugins/index.js +5 -0
- package/lib/internal/plugins/index.js.map +1 -0
- package/lib/telemetry/Logger.types.d.ts +1 -1
- package/lib/telemetry/Logger.types.d.ts.map +1 -1
- package/lib/telemetry/LoggerManager.d.ts +2 -2
- package/lib/telemetry/LoggerManager.d.ts.map +1 -1
- package/lib/telemetry/LoggerManager.js +2 -2
- package/lib/telemetry/LoggerManager.js.map +1 -1
- package/lib/telemetry/Metrics.types.d.ts +4 -18
- package/lib/telemetry/Metrics.types.d.ts.map +1 -1
- package/lib/telemetry/Performance.d.ts +1 -1
- package/lib/telemetry/Performance.d.ts.map +1 -1
- package/lib/telemetry/Performance.js +1 -1
- package/lib/telemetry/Performance.js.map +1 -1
- package/lib/telemetry/index.d.ts +3 -1
- package/lib/telemetry/index.d.ts.map +1 -1
- package/lib/telemetry/index.js +4 -1
- package/lib/telemetry/index.js.map +1 -1
- package/package.json +14 -1
- package/lib/__tests__/connectorDataOperation.spec.d.ts.map +0 -1
- package/lib/__tests__/connectorDataOperation.spec.js.map +0 -1
- package/lib/__tests__/dataverseDataOperation.spec.d.ts.map +0 -1
- package/lib/__tests__/dataverseDataOperation.spec.js.map +0 -1
- package/lib/app/Lifecycle.d.ts +0 -9
- package/lib/app/Lifecycle.d.ts.map +0 -1
- package/lib/app/Lifecycle.js +0 -36
- package/lib/app/Lifecycle.js.map +0 -1
- package/lib/internal/communication/CompatibleMessageReceiver.d.ts.map +0 -1
- package/lib/internal/communication/CompatibleMessageReceiver.js.map +0 -1
- package/lib/internal/communication/IncompatibleMessageReceiver.d.ts.map +0 -1
- package/lib/internal/communication/IncompatibleMessageReceiver.js.map +0 -1
- package/lib/internal/communication/MessageReceiver.Types.d.ts.map +0 -1
- package/lib/internal/communication/MessageReceiver.Types.js.map +0 -1
- package/lib/internal/communication/SendMessage.d.ts.map +0 -1
- package/lib/internal/communication/SendMessage.js.map +0 -1
- package/lib/internal/communication/SendMessageOperation.d.ts.map +0 -1
- package/lib/internal/communication/SendMessageOperation.js.map +0 -1
- package/lib/internal/data/core/data/connectorDataOperation.d.ts.map +0 -1
- package/lib/internal/data/core/data/connectorDataOperation.js.map +0 -1
- package/lib/internal/data/core/data/dataverseDataOperation.d.ts.map +0 -1
- package/lib/internal/data/core/data/dataverseDataOperation.js +0 -508
- package/lib/internal/data/core/data/dataverseDataOperation.js.map +0 -1
- package/lib/internal/data/core/data/runtimeDataOperations.d.ts.map +0 -1
- package/lib/internal/data/core/data/runtimeDataOperations.js.map +0 -1
- package/lib/internal/data/core/runtime/initializeRuntime.d.ts +0 -13
- package/lib/internal/data/core/runtime/initializeRuntime.d.ts.map +0 -1
- package/lib/internal/data/core/runtime/initializeRuntime.js +0 -38
- package/lib/internal/data/core/runtime/initializeRuntime.js.map +0 -1
- package/lib/internal/plugin/PluginCommon.d.ts +0 -16
- package/lib/internal/plugin/PluginCommon.d.ts.map +0 -1
- package/lib/internal/plugin/PluginCommon.js +0 -114
- package/lib/internal/plugin/PluginCommon.js.map +0 -1
- package/lib/internal/plugin/PluginMobile.d.ts +0 -13
- package/lib/internal/plugin/PluginMobile.d.ts.map +0 -1
- package/lib/internal/plugin/PluginMobile.js +0 -109
- package/lib/internal/plugin/PluginMobile.js.map +0 -1
- /package/lib/internal/{communication → plugins/SendMessage}/CompatibleMessageReceiver.d.ts +0 -0
- /package/lib/internal/{communication → plugins/SendMessage}/IncompatibleMessageReceiver.d.ts +0 -0
- /package/lib/internal/{communication → plugins/SendMessage}/IncompatibleMessageReceiver.js +0 -0
- /package/lib/internal/{communication → plugins/SendMessage}/MessageReceiver.Types.d.ts +0 -0
- /package/lib/internal/{communication → plugins/SendMessage}/MessageReceiver.Types.js +0 -0
- /package/lib/internal/{communication → plugins/SendMessage}/SendMessageOperation.d.ts +0 -0
- /package/lib/internal/{communication → plugins/SendMessage}/SendMessageOperation.js +0 -0
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import { DataSources, HttpMethod, } from '../../common/types';
|
|
5
|
+
import { createErrorResponse, DataOperationErrorMessages, ErrorCodes, PowerDataRuntimeError, } from '../../error/error';
|
|
6
|
+
import { Log } from '../../telemetry/log';
|
|
7
|
+
import { DataverseOperationName } from '../../error/constants';
|
|
8
|
+
import { convertOptionsToQueryString } from './shared/stringQueryOptions';
|
|
9
|
+
// OData annotation constants
|
|
10
|
+
export const ODATA_CONTEXT = '@odata.context';
|
|
11
|
+
export const ODATA_NEXT_LINK = '@odata.nextLink';
|
|
12
|
+
export const CRM_TOTAL_RECORD_COUNT = '@Microsoft.Dynamics.CRM.totalrecordcount';
|
|
13
|
+
export const CRM_TOTAL_RECORD_COUNT_LIMIT_EXCEEDED = '@Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded';
|
|
14
|
+
export const CRM_GLOBAL_METADATA_VERSION = '@Microsoft.Dynamics.CRM.globalmetadataversion';
|
|
15
|
+
/**
|
|
16
|
+
* DataverseDataOperation provides functionality for performing CRUD operations
|
|
17
|
+
* against the Dataverse data source using the XRM WebApi or runtime metadata client.
|
|
18
|
+
*/
|
|
19
|
+
export class DataverseDataOperationExecutor {
|
|
20
|
+
// Static identifiers for services and actions
|
|
21
|
+
// Used to identify specific services and actions within the PowerApps environment
|
|
22
|
+
_clientProvider;
|
|
23
|
+
_databaseReferences;
|
|
24
|
+
constructor(clientProvider) {
|
|
25
|
+
this._clientProvider = clientProvider;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a new record in Dataverse
|
|
29
|
+
* @param tableName - The name of the table
|
|
30
|
+
* @param data - The record data to create
|
|
31
|
+
* @returns Promise resolving to operation result
|
|
32
|
+
*/
|
|
33
|
+
async createRecordAsync(tableName, data) {
|
|
34
|
+
return this._executeNativeDataverseOperation(tableName, (dataSourceInfo, tblName) => this._getDataverseRequestUrl(dataSourceInfo, tblName), async (dataClient, requestUrl, dataSourceInfo) => {
|
|
35
|
+
const dataverseResponse = await dataClient.createDataAsync(requestUrl, DataSources.Dataverse, // Use environment name for Dataverse authentication
|
|
36
|
+
tableName, data, {
|
|
37
|
+
operationName: DataverseOperationName.CreateRecord,
|
|
38
|
+
datasetName: dataSourceInfo.datasetName,
|
|
39
|
+
isDataVerseOperation: true,
|
|
40
|
+
});
|
|
41
|
+
const returnValue = {
|
|
42
|
+
success: dataverseResponse.success,
|
|
43
|
+
data: dataverseResponse.data,
|
|
44
|
+
error: dataverseResponse.error,
|
|
45
|
+
};
|
|
46
|
+
return returnValue;
|
|
47
|
+
}, DataOperationErrorMessages.CreateFailed);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Updates an existing record in Dataverse
|
|
51
|
+
* @param tableName - The name of the table
|
|
52
|
+
* @param id - The record identifier
|
|
53
|
+
* @param data - The updated record data
|
|
54
|
+
* @returns Promise resolving to operation result
|
|
55
|
+
*/
|
|
56
|
+
async updateRecordAsync(tableName, id, data) {
|
|
57
|
+
return this._executeNativeDataverseOperation(tableName, (dataSourceInfo, tblName) => this._getDataverseRequestUrl(dataSourceInfo, tblName, `(${id})`), async (dataClient, requestUrl, dataSourceInfo) => {
|
|
58
|
+
const dataverseResponse = await dataClient.updateDataAsync(requestUrl, DataSources.Dataverse, tableName, data, {
|
|
59
|
+
operationName: DataverseOperationName.UpdateRecord,
|
|
60
|
+
datasetName: dataSourceInfo.datasetName,
|
|
61
|
+
isDataVerseOperation: true,
|
|
62
|
+
});
|
|
63
|
+
const returnValue = {
|
|
64
|
+
success: dataverseResponse.success,
|
|
65
|
+
data: dataverseResponse.data,
|
|
66
|
+
error: dataverseResponse.error,
|
|
67
|
+
};
|
|
68
|
+
return returnValue;
|
|
69
|
+
}, DataOperationErrorMessages.UpdateFailed);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Deletes a record from Dataverse
|
|
73
|
+
* @param tableName - The name of the table
|
|
74
|
+
* @param id - The record identifier
|
|
75
|
+
* @returns Promise resolving to operation result
|
|
76
|
+
*/
|
|
77
|
+
async deleteRecordAsync(tableName, id) {
|
|
78
|
+
return this._executeNativeDataverseOperation(tableName, (dataSourceInfo, tblName) => this._getDataverseRequestUrl(dataSourceInfo, tblName, `(${id})`), async (dataClient, requestUrl, dataSourceInfo) => {
|
|
79
|
+
const dataverseResponse = await dataClient.deleteDataAsync(requestUrl, DataSources.Dataverse, tableName, {
|
|
80
|
+
operationName: DataverseOperationName.DeleteRecord,
|
|
81
|
+
datasetName: dataSourceInfo.datasetName,
|
|
82
|
+
isDataVerseOperation: true,
|
|
83
|
+
});
|
|
84
|
+
const returnValue = {
|
|
85
|
+
success: dataverseResponse.success,
|
|
86
|
+
data: dataverseResponse.data,
|
|
87
|
+
error: dataverseResponse.error,
|
|
88
|
+
};
|
|
89
|
+
return returnValue;
|
|
90
|
+
}, DataOperationErrorMessages.DeleteFailed);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Retrieves a single record from Dataverse
|
|
94
|
+
* @param tableName - The name of the table
|
|
95
|
+
* @param id - The record identifier
|
|
96
|
+
* @param options - The retrieval options
|
|
97
|
+
* @returns Promise resolving to operation result
|
|
98
|
+
*/
|
|
99
|
+
async retrieveRecordAsync(tableName, id, options) {
|
|
100
|
+
const { maxPageSize = 500, ...rest } = options || {};
|
|
101
|
+
const optionsString = convertOptionsToQueryString(rest);
|
|
102
|
+
// Build Prefer header with updated maxPageSize
|
|
103
|
+
const headers = { Prefer: `odata.maxpagesize=${maxPageSize},odata.include-annotations=*` };
|
|
104
|
+
return this._executeNativeDataverseOperation(tableName, (dataSourceInfo, tblName) => this._getDataverseRequestUrl(dataSourceInfo, tblName, `(${id})${optionsString}`), async (dataClient, requestUrl, dataSourceInfo) => {
|
|
105
|
+
const dataverseResponse = await dataClient.retrieveDataAsync(requestUrl, DataSources.Dataverse, tableName, HttpMethod.GET, headers, undefined, // No body for GET requests
|
|
106
|
+
{
|
|
107
|
+
operationName: DataverseOperationName.RetrieveRecord,
|
|
108
|
+
datasetName: dataSourceInfo.datasetName,
|
|
109
|
+
isDataVerseOperation: true,
|
|
110
|
+
});
|
|
111
|
+
const returnValue = {
|
|
112
|
+
success: dataverseResponse.success,
|
|
113
|
+
data: dataverseResponse.data,
|
|
114
|
+
error: dataverseResponse.error,
|
|
115
|
+
};
|
|
116
|
+
return returnValue;
|
|
117
|
+
}, DataOperationErrorMessages.RetrieveFailed);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Retrieves multiple records from Dataverse
|
|
121
|
+
* @param tableName - The name of the table
|
|
122
|
+
* @param options - The retrieval options
|
|
123
|
+
* @param maxPageSize - Optional maximum page size
|
|
124
|
+
* @returns Promise resolving to operation result
|
|
125
|
+
*/
|
|
126
|
+
async retrieveMultipleRecordsAsync(tableName, options) {
|
|
127
|
+
const { maxPageSize = 500, ...rest } = options || {};
|
|
128
|
+
const optionsString = convertOptionsToQueryString(rest);
|
|
129
|
+
// Build Prefer header with updated maxPageSize
|
|
130
|
+
const headers = { Prefer: `odata.maxpagesize=${maxPageSize},odata.include-annotations=*` };
|
|
131
|
+
return this._executeNativeDataverseOperation(tableName, (dataSourceInfo, tblName) => this._getDataverseRequestUrl(dataSourceInfo, tblName, optionsString), async (dataClient, requestUrl, dataSourceInfo) => {
|
|
132
|
+
const dataverseResponse = await dataClient.retrieveDataAsync(requestUrl, DataSources.Dataverse, tableName, HttpMethod.GET, headers, undefined, // No body for GET requests
|
|
133
|
+
{
|
|
134
|
+
operationName: DataverseOperationName.RetrieveMultipleRecords,
|
|
135
|
+
datasetName: dataSourceInfo.datasetName,
|
|
136
|
+
isDataVerseOperation: true,
|
|
137
|
+
});
|
|
138
|
+
const returnValue = {
|
|
139
|
+
success: dataverseResponse.success,
|
|
140
|
+
data: dataverseResponse?.data?.value || [],
|
|
141
|
+
skipToken: extractSkipToken(dataverseResponse?.data?.[ODATA_NEXT_LINK]),
|
|
142
|
+
error: dataverseResponse.error,
|
|
143
|
+
};
|
|
144
|
+
return returnValue;
|
|
145
|
+
}, DataOperationErrorMessages.RetrieveMultipleFailed);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Executes a custom Dataverse operation
|
|
149
|
+
* @param operation - The operation to execute
|
|
150
|
+
* @returns Promise resolving to operation result
|
|
151
|
+
*/
|
|
152
|
+
async executeAsync(operation) {
|
|
153
|
+
const { dataverseRequest } = operation;
|
|
154
|
+
if (!dataverseRequest) {
|
|
155
|
+
return {
|
|
156
|
+
success: false,
|
|
157
|
+
data: null,
|
|
158
|
+
error: { message: 'Dataverse request details are required for Dataverse operations.' },
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
const { action, parameters } = dataverseRequest;
|
|
162
|
+
switch (action) {
|
|
163
|
+
// Future custom actions can be handled here
|
|
164
|
+
case 'getEntityMetadata':
|
|
165
|
+
const { tableName, options } = parameters;
|
|
166
|
+
if (!tableName) {
|
|
167
|
+
return {
|
|
168
|
+
success: false,
|
|
169
|
+
data: null,
|
|
170
|
+
error: { message: 'Table name is required for getEntityMetadata action.' },
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
return this._getEntityMetadata(tableName, options ?? {});
|
|
174
|
+
default:
|
|
175
|
+
Log.trackEvent('DataverseDataOperation.UnsupportedAction', {
|
|
176
|
+
message: `Unsupported Dataverse action: ${action}`,
|
|
177
|
+
});
|
|
178
|
+
return {
|
|
179
|
+
success: false,
|
|
180
|
+
data: null,
|
|
181
|
+
error: { message: `Unsupported Dataverse action: "${action}"` },
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
async _getEntityMetadata(tableName, options) {
|
|
186
|
+
const client = await this._getDataClient();
|
|
187
|
+
const dataSourceInfo = await this._getDataverseDataSourceInfo(tableName);
|
|
188
|
+
const url = this._generateMetadataRequestUrl(dataSourceInfo, options);
|
|
189
|
+
return client.retrieveDataAsync(url, DataSources.Dataverse, 'EntityDefinitions', HttpMethod.GET, {
|
|
190
|
+
Consistency: 'Strong', // Force CDS to return latest metadata
|
|
191
|
+
}, undefined, {
|
|
192
|
+
operationName: DataverseOperationName.RetrieveRecord,
|
|
193
|
+
datasetName: dataSourceInfo.datasetName,
|
|
194
|
+
isDataVerseOperation: true,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Returns the database references for Dataverse, grouped by environment/database.
|
|
199
|
+
* These come from the launch app response via runtime metadata client.
|
|
200
|
+
*/
|
|
201
|
+
async getDatabaseReferences() {
|
|
202
|
+
if (this._databaseReferences) {
|
|
203
|
+
return this._databaseReferences;
|
|
204
|
+
}
|
|
205
|
+
// Get database references from runtime metadata (launch app response)
|
|
206
|
+
// This is the authoritative source containing the complete linkedEnvironmentMetadata
|
|
207
|
+
const runtimeDatabaseReferences = await this._loadDatabaseReferencesFromRuntime();
|
|
208
|
+
if (runtimeDatabaseReferences && Object.keys(runtimeDatabaseReferences).length > 0) {
|
|
209
|
+
this._databaseReferences = runtimeDatabaseReferences;
|
|
210
|
+
return this._databaseReferences;
|
|
211
|
+
}
|
|
212
|
+
throw new PowerDataRuntimeError(ErrorCodes.DataSourceNotFound, 'Failed to load Dataverse database references from runtime.');
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Loads database references from runtime metadata client (launch app response).
|
|
216
|
+
*/
|
|
217
|
+
async _loadDatabaseReferencesFromRuntime() {
|
|
218
|
+
try {
|
|
219
|
+
const metadataClient = await this._getMetadataClient();
|
|
220
|
+
// Get CDS data source configs from runtime metadata
|
|
221
|
+
const response = await metadataClient.getAppDataSourceConfigsAsync();
|
|
222
|
+
if (!response.success || !response.data) {
|
|
223
|
+
return undefined;
|
|
224
|
+
}
|
|
225
|
+
const cdsDataSources = Object.values(response.data);
|
|
226
|
+
if (cdsDataSources.length === 0) {
|
|
227
|
+
return undefined;
|
|
228
|
+
}
|
|
229
|
+
// Build database references from runtime CDS data source configs
|
|
230
|
+
const databaseReferences = {};
|
|
231
|
+
for (const cdsDataSource of cdsDataSources) {
|
|
232
|
+
// Type assertion for CDS data source config
|
|
233
|
+
const cdsConfig = cdsDataSource;
|
|
234
|
+
// Extract instance URL and other metadata from runtime URL
|
|
235
|
+
const instanceUrl = this._extractInstanceUrlFromRuntimeUrl(cdsConfig.runtimeUrl);
|
|
236
|
+
// Use a standard environment name for CDS
|
|
237
|
+
const envName = 'default.cds';
|
|
238
|
+
if (!databaseReferences[envName]) {
|
|
239
|
+
databaseReferences[envName] = {
|
|
240
|
+
databaseDetails: {
|
|
241
|
+
referenceType: 'Environmental',
|
|
242
|
+
environmentName: envName,
|
|
243
|
+
overrideValues: {
|
|
244
|
+
status: 'NotSpecified',
|
|
245
|
+
environmentVariableName: '',
|
|
246
|
+
},
|
|
247
|
+
linkedEnvironmentMetadata: {
|
|
248
|
+
resourceId: '',
|
|
249
|
+
friendlyName: '',
|
|
250
|
+
uniqueName: '',
|
|
251
|
+
domainName: '',
|
|
252
|
+
version: cdsConfig.version || '9.2',
|
|
253
|
+
instanceUrl,
|
|
254
|
+
instanceApiUrl: cdsConfig.runtimeUrl,
|
|
255
|
+
baseLanguage: 1033,
|
|
256
|
+
instanceState: 'Ready',
|
|
257
|
+
createdTime: '',
|
|
258
|
+
platformSku: '',
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
dataSources: {},
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
// Add the data source
|
|
265
|
+
const dataSourceName = cdsConfig.entitySetName || cdsConfig.logicalName;
|
|
266
|
+
databaseReferences[envName].dataSources[dataSourceName] = {
|
|
267
|
+
entitySetName: cdsConfig.entitySetName,
|
|
268
|
+
logicalName: cdsConfig.logicalName,
|
|
269
|
+
isHidden: false,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
return databaseReferences;
|
|
273
|
+
}
|
|
274
|
+
catch (error) {
|
|
275
|
+
// Info-level logging for tracing errors loading from runtime
|
|
276
|
+
Log.trackEvent('DataverseDataOperation.FailedToLoadDatabaseReferences', {
|
|
277
|
+
message: '[DataverseDataOperation] Failed to load database references from runtime',
|
|
278
|
+
error,
|
|
279
|
+
});
|
|
280
|
+
// Silently fail and return undefined if there's any error loading from runtime
|
|
281
|
+
return undefined;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
_extractInstanceUrlFromRuntimeUrl(runtimeUrl) {
|
|
285
|
+
try {
|
|
286
|
+
// Runtime URL format: https://org.crm.dynamics.com/api/data/v9.2/
|
|
287
|
+
// Extract: https://org.crm.dynamics.com
|
|
288
|
+
// Using a simpler approach to avoid URL import issues
|
|
289
|
+
const matches = runtimeUrl.match(/^(https?:\/\/[^\/]+)/);
|
|
290
|
+
return matches ? matches[1] : runtimeUrl;
|
|
291
|
+
}
|
|
292
|
+
catch (error) {
|
|
293
|
+
Log.trackEvent('DataverseDataOperation.FailedToExtractInstanceUrl', {
|
|
294
|
+
message: '[DataverseDataOperation] Failed to extract instance URL from runtime URL',
|
|
295
|
+
error,
|
|
296
|
+
});
|
|
297
|
+
// Fallback to original URL on error
|
|
298
|
+
return runtimeUrl;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Helper to get a native data client and database reference
|
|
303
|
+
*/
|
|
304
|
+
async _getDataClient() {
|
|
305
|
+
const dataClient = await this._clientProvider.getDataClientAsync();
|
|
306
|
+
if (!dataClient) {
|
|
307
|
+
Log.trackEvent('DataverseDataOperation.DataClientNotAvailable', {
|
|
308
|
+
message: '[DataverseDataOperation] Data client is not available',
|
|
309
|
+
});
|
|
310
|
+
throw new PowerDataRuntimeError(ErrorCodes.DataClientNotAvailable, 'Data client is not available.');
|
|
311
|
+
}
|
|
312
|
+
return dataClient;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Gets the metadata client instance
|
|
316
|
+
*/
|
|
317
|
+
async _getMetadataClient() {
|
|
318
|
+
const metadataClient = await this._clientProvider.getMetadataClientAsync();
|
|
319
|
+
if (!metadataClient) {
|
|
320
|
+
Log.trackEvent('DataverseDataOperation.MetadataClientNotAvailable', {
|
|
321
|
+
message: '[DataverseDataOperation] Metadata client is not available',
|
|
322
|
+
});
|
|
323
|
+
throw new PowerDataRuntimeError(ErrorCodes.MetadataClientNotAvailable);
|
|
324
|
+
}
|
|
325
|
+
return metadataClient;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Template method for connector-style CRUD operations to reduce duplication.
|
|
329
|
+
* Handles client, dataSourceInfo, requestUrl, and error handling.
|
|
330
|
+
*/
|
|
331
|
+
async _executeNativeDataverseOperation(tableName, buildUrl, operation, errorMessage) {
|
|
332
|
+
try {
|
|
333
|
+
const dataClient = await this._getDataClient();
|
|
334
|
+
const dataSourceInfo = await this._getDataverseDataSourceInfo(tableName);
|
|
335
|
+
const requestUrl = buildUrl(dataSourceInfo, tableName);
|
|
336
|
+
return operation(dataClient, requestUrl, dataSourceInfo);
|
|
337
|
+
}
|
|
338
|
+
catch (error) {
|
|
339
|
+
return createErrorResponse(error, errorMessage);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Helper to get the Dataverse datasourceinfo from databaseReferences
|
|
344
|
+
*/
|
|
345
|
+
async _getDataverseDataSourceInfo(tableName) {
|
|
346
|
+
let dbRefs;
|
|
347
|
+
// Separate try-catch for getting database references
|
|
348
|
+
try {
|
|
349
|
+
dbRefs = await this.getDatabaseReferences();
|
|
350
|
+
}
|
|
351
|
+
catch (error) {
|
|
352
|
+
Log.trackEvent('DataverseDataOperation.GetDataSourceInfoFailed', {
|
|
353
|
+
message: '[DataverseDataOperation] Failed to get database references',
|
|
354
|
+
tableName,
|
|
355
|
+
error,
|
|
356
|
+
});
|
|
357
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
358
|
+
throw new PowerDataRuntimeError(ErrorCodes.DataSourceNotFound, `Failed to get Dataverse data source info for table '${tableName}': ${errorMessage}`);
|
|
359
|
+
}
|
|
360
|
+
// Find the environment/database that contains this table
|
|
361
|
+
for (const dbKey of Object.keys(dbRefs)) {
|
|
362
|
+
const db = dbRefs[dbKey];
|
|
363
|
+
if (db.dataSources[tableName]) {
|
|
364
|
+
const ds = db.dataSources[tableName];
|
|
365
|
+
return {
|
|
366
|
+
datasetName: db.databaseDetails?.environmentName,
|
|
367
|
+
referenceType: db.databaseDetails?.referenceType,
|
|
368
|
+
linkedEnvironmentMetadata: db.databaseDetails?.linkedEnvironmentMetadata,
|
|
369
|
+
entitySetName: ds?.entitySetName,
|
|
370
|
+
logicalName: ds?.logicalName,
|
|
371
|
+
isHidden: ds?.isHidden,
|
|
372
|
+
tableId: ds?.logicalName,
|
|
373
|
+
apis: {},
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
// Table not found - this will now throw without being caught
|
|
378
|
+
const notFoundMsg = `No Dataverse data source found for table: ${tableName}`;
|
|
379
|
+
Log.trackEvent('DataverseDataOperation.DataSourceNotFound', {
|
|
380
|
+
message: notFoundMsg,
|
|
381
|
+
tableName,
|
|
382
|
+
});
|
|
383
|
+
throw new PowerDataRuntimeError(ErrorCodes.DataSourceNotFound, notFoundMsg);
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Helper to construct the Dataverse API URL using instanceUrl if available, otherwise fallback to runtimeUrl.
|
|
387
|
+
*/
|
|
388
|
+
_getInstanceUrl(dataSourceInfo) {
|
|
389
|
+
const instanceUrl = dataSourceInfo.linkedEnvironmentMetadata?.instanceUrl;
|
|
390
|
+
if (!instanceUrl) {
|
|
391
|
+
throw new PowerDataRuntimeError(ErrorCodes.DataClientInitFailed, 'No instanceUrl found for Dataverse table.');
|
|
392
|
+
}
|
|
393
|
+
// Ensure instanceUrl ends with a slash and construct proper URL
|
|
394
|
+
const baseUrl = instanceUrl.endsWith('/') ? instanceUrl : `${instanceUrl}/`;
|
|
395
|
+
return baseUrl;
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Helper to construct the Dataverse API URL using instanceUrl if available, otherwise fallback to runtimeUrl.
|
|
399
|
+
*/
|
|
400
|
+
_getDataverseRequestUrl(dataSourceInfo, tableName, urlPath = '') {
|
|
401
|
+
const baseUrl = this._getInstanceUrl(dataSourceInfo);
|
|
402
|
+
return `${baseUrl}api/data/v9.0/${tableName}${urlPath}`;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Constructs GET request URL for fetching metadata using options object.
|
|
406
|
+
* @param dataSourceInfo - The data source information for the Dataverse table.
|
|
407
|
+
* @param options - The options for the metadata request.
|
|
408
|
+
* @returns The constructed metadata request URL.
|
|
409
|
+
*/
|
|
410
|
+
_generateMetadataRequestUrl(dataSourceInfo, options) {
|
|
411
|
+
const { logicalName } = dataSourceInfo;
|
|
412
|
+
if (!logicalName) {
|
|
413
|
+
throw new PowerDataRuntimeError(ErrorCodes.DataClientInitFailed, 'No logicalName found for Dataverse table.');
|
|
414
|
+
}
|
|
415
|
+
const url = new URL(`${this._getInstanceUrl(dataSourceInfo)}api/data/v9.0/EntityDefinitions(LogicalName='${logicalName}')`);
|
|
416
|
+
const { metadata, schema } = options;
|
|
417
|
+
const selects = new Set(Array.isArray(metadata) ? metadata : []);
|
|
418
|
+
selects.add('LogicalName');
|
|
419
|
+
const expands = [];
|
|
420
|
+
if (schema?.manyToOne) {
|
|
421
|
+
expands.push('ManyToOneRelationships');
|
|
422
|
+
}
|
|
423
|
+
if (schema?.oneToMany) {
|
|
424
|
+
expands.push('OneToManyRelationships');
|
|
425
|
+
}
|
|
426
|
+
if (schema?.manyToMany) {
|
|
427
|
+
expands.push('ManyToManyRelationships');
|
|
428
|
+
}
|
|
429
|
+
if (schema?.columns === 'all') {
|
|
430
|
+
// request all attributes
|
|
431
|
+
expands.push('Attributes');
|
|
432
|
+
}
|
|
433
|
+
else if (schema && Array.isArray(schema.columns) && schema.columns.length > 0) {
|
|
434
|
+
// If specific columns are requested, include only those
|
|
435
|
+
const attributesCollection = schema.columns.map((a) => `'${a}'`).join(',');
|
|
436
|
+
expands.push(`Attributes($filter=Microsoft.Dynamics.CRM.In(PropertyName='LogicalName',PropertyValues=[${attributesCollection}]))`);
|
|
437
|
+
}
|
|
438
|
+
// otherwise don't include any attributes
|
|
439
|
+
url.search = new URLSearchParams({
|
|
440
|
+
$select: [...selects].join(','),
|
|
441
|
+
$expand: expands.join(','),
|
|
442
|
+
}).toString();
|
|
443
|
+
return url.toString();
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Extracts the skip token from the next link URL.
|
|
448
|
+
* @param nextLink - The @odata.nextLink URL containing the skip token
|
|
449
|
+
* @returns The extracted skip token or undefined if not found.
|
|
450
|
+
*/
|
|
451
|
+
export function extractSkipToken(nextLink) {
|
|
452
|
+
if (!nextLink?.trim()) {
|
|
453
|
+
return undefined;
|
|
454
|
+
}
|
|
455
|
+
const match = nextLink.match(/[\?&]\$?skiptoken=([^&#]+)/i);
|
|
456
|
+
return match ? decodeURIComponent(match[1]) : undefined;
|
|
457
|
+
}
|
|
458
|
+
//# sourceMappingURL=dataverseDataOperationExecutor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataverseDataOperationExecutor.js","sourceRoot":"","sources":["../../../../../../src/internal/data/core/data/executors/dataverseDataOperationExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/data/core/data/executors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/internal/data/core/data/executors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAsB,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import type { IDataOperation, IDataOperationExecutor, IOperationOptions, IOperationResult } from '../../types';
|
|
5
|
+
export type MockDataStore<TRecord = unknown> = {
|
|
6
|
+
[tableName: string]: {
|
|
7
|
+
[id: string]: TRecord;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
export declare class MockDataOperationExecutor implements IDataOperationExecutor {
|
|
11
|
+
private _dataStore;
|
|
12
|
+
constructor(data: MockDataStore);
|
|
13
|
+
createRecordAsync<TRequest, TResponse>(tableName: string, data: TRequest): Promise<IOperationResult<TResponse>>;
|
|
14
|
+
updateRecordAsync<TRequest, TResponse>(tableName: string, id: string, data: TRequest): Promise<IOperationResult<TResponse>>;
|
|
15
|
+
deleteRecordAsync(tableName: string, id: string): Promise<IOperationResult<void>>;
|
|
16
|
+
retrieveRecordAsync<TResponse>(tableName: string, id: string, options?: IOperationOptions): Promise<IOperationResult<TResponse>>;
|
|
17
|
+
retrieveMultipleRecordsAsync<TResponse>(tableName: string, options?: IOperationOptions): Promise<IOperationResult<TResponse[]>>;
|
|
18
|
+
executeAsync<TRequest, TResponse>(operation: IDataOperation<TRequest>): Promise<IOperationResult<TResponse>>;
|
|
19
|
+
}
|
|
20
|
+
export declare function createMockDataExecutor(data: MockDataStore): MockDataOperationExecutor;
|
|
21
|
+
//# sourceMappingURL=mockDataOperationExecutor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockDataOperationExecutor.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/data/core/data/executors/mockDataOperationExecutor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,aAAa,CAAC,OAAO,GAAG,OAAO,IAAI;IAC7C,CAAC,SAAS,EAAE,MAAM,GAAG;QACnB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;KACvB,CAAC;CACH,CAAC;AAEF,qBAAa,yBAA0B,YAAW,sBAAsB;IACtE,OAAO,CAAC,UAAU,CAAgB;gBAEtB,IAAI,EAAE,aAAa;IAIlB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,EAChD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAO1B,iBAAiB,CAAC,QAAQ,EAAE,SAAS,EAChD,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAO1B,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAOjF,mBAAmB,CAAC,SAAS,EACxC,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAqB1B,4BAA4B,CAAC,SAAS,EACjD,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC;IAa5B,YAAY,CAAC,QAAQ,EAAE,SAAS,EAC3C,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,GAClC,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;CAOxC;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,yBAAyB,CAErF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
export class MockDataOperationExecutor {
|
|
5
|
+
_dataStore;
|
|
6
|
+
constructor(data) {
|
|
7
|
+
this._dataStore = data;
|
|
8
|
+
}
|
|
9
|
+
async createRecordAsync(tableName, data) {
|
|
10
|
+
return {
|
|
11
|
+
success: false,
|
|
12
|
+
error: { message: 'createRecordAsync is not supported by MockDataOperationExecutor' },
|
|
13
|
+
data: null,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
async updateRecordAsync(tableName, id, data) {
|
|
17
|
+
return {
|
|
18
|
+
success: false,
|
|
19
|
+
error: { message: 'updateRecordAsync is not supported by MockDataOperationExecutor' },
|
|
20
|
+
data: null,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
async deleteRecordAsync(tableName, id) {
|
|
24
|
+
return {
|
|
25
|
+
success: false,
|
|
26
|
+
error: { message: 'deleteRecordAsync is not supported by MockDataOperationExecutor' },
|
|
27
|
+
data: undefined,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async retrieveRecordAsync(tableName, id, options) {
|
|
31
|
+
if (!this._dataStore[tableName]) {
|
|
32
|
+
return {
|
|
33
|
+
success: false,
|
|
34
|
+
error: { message: `table <${tableName}> not found` },
|
|
35
|
+
data: null,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const record = this._dataStore[tableName][id];
|
|
39
|
+
if (!record) {
|
|
40
|
+
return {
|
|
41
|
+
success: false,
|
|
42
|
+
error: { message: `record with id "${id}" not found in table <${tableName}>` },
|
|
43
|
+
data: null,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
success: true,
|
|
48
|
+
data: record,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
async retrieveMultipleRecordsAsync(tableName, options) {
|
|
52
|
+
if (!this._dataStore[tableName]) {
|
|
53
|
+
return {
|
|
54
|
+
success: false,
|
|
55
|
+
error: { message: `table <${tableName}> not found` },
|
|
56
|
+
data: [],
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
success: true,
|
|
61
|
+
data: Object.values(this._dataStore[tableName]),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
async executeAsync(operation) {
|
|
65
|
+
return {
|
|
66
|
+
success: false,
|
|
67
|
+
error: { message: 'executeAsync is not supported by MockDataOperationExecutor' },
|
|
68
|
+
data: null,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export function createMockDataExecutor(data) {
|
|
73
|
+
return new MockDataOperationExecutor(data);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=mockDataOperationExecutor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockDataOperationExecutor.js","sourceRoot":"","sources":["../../../../../../src/internal/data/core/data/executors/mockDataOperationExecutor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,MAAM,OAAO,yBAAyB;IAC5B,UAAU,CAAgB;IAElC,YAAY,IAAmB;QAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAC5B,SAAiB,EACjB,IAAc;QAEd,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,EAAE,OAAO,EAAE,iEAAiE,EAAE;YACrF,IAAI,EAAE,IAAiB;SACxB,CAAC;IACJ,CAAC;IACM,KAAK,CAAC,iBAAiB,CAC5B,SAAiB,EACjB,EAAU,EACV,IAAc;QAEd,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,EAAE,OAAO,EAAE,iEAAiE,EAAE;YACrF,IAAI,EAAE,IAAiB;SACxB,CAAC;IACJ,CAAC;IACM,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,EAAU;QAC1D,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,EAAE,OAAO,EAAE,iEAAiE,EAAE;YACrF,IAAI,EAAE,SAAS;SAChB,CAAC;IACJ,CAAC;IACM,KAAK,CAAC,mBAAmB,CAC9B,SAAiB,EACjB,EAAU,EACV,OAA2B;QAE3B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;YAC/B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,SAAS,aAAa,EAAE;gBACpD,IAAI,EAAE,IAAiB;aACxB,CAAC;SACH;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,SAAS,GAAG,EAAE;gBAC9E,IAAI,EAAE,IAAiB;aACxB,CAAC;SACH;QACD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,MAAmB;SAC1B,CAAC;IACJ,CAAC;IACM,KAAK,CAAC,4BAA4B,CACvC,SAAiB,EACjB,OAA2B;QAE3B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;YAC/B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,SAAS,aAAa,EAAE;gBACpD,IAAI,EAAE,EAAE;aACT,CAAC;SACH;QACD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAgB;SAC/D,CAAC;IACJ,CAAC;IACM,KAAK,CAAC,YAAY,CACvB,SAAmC;QAEnC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,EAAE,OAAO,EAAE,4DAA4D,EAAE;YAChF,IAAI,EAAE,IAAiB;SACxB,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAmB;IACxD,OAAO,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import { IOperationOptions } from '../../../types';
|
|
5
|
+
/**
|
|
6
|
+
* Converts operation options to a query string format.
|
|
7
|
+
* @param options - The operation options to convert.
|
|
8
|
+
* @returns The formatted query string.
|
|
9
|
+
*/
|
|
10
|
+
export declare function convertOptionsToQueryString(options?: IOperationOptions): string;
|
|
11
|
+
//# sourceMappingURL=stringQueryOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringQueryOptions.d.ts","sourceRoot":"","sources":["../../../../../../../src/internal/data/core/data/executors/shared/stringQueryOptions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,MAAM,CA4C/E"}
|