@azure/app-configuration-importer 2.0.0-preview → 3.0.0-preview
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/dist/index.js +51 -23
- package/dist/index.js.map +1 -1
- package/dist-esm/src/appConfigurationImporter.js +41 -23
- package/dist-esm/src/appConfigurationImporter.js.map +1 -1
- package/dist-esm/src/enums.js +10 -0
- package/dist-esm/src/enums.js.map +1 -1
- package/dist-esm/src/index.js.map +1 -1
- package/dist-esm/src/models.js.map +1 -1
- package/dist-esm/src/settingsImport/configurationChangesSource.js.map +1 -1
- package/dist-esm/src/settingsImport/configurationSettingsSource.js.map +1 -1
- package/package.json +1 -1
- package/types/azure-app-configuration-importer.d.ts +22 -11
- package/types/src/appConfigurationImporter.d.ts +3 -3
- package/types/src/appConfigurationImporter.d.ts.map +1 -1
- package/types/src/enums.d.ts +9 -0
- package/types/src/enums.d.ts.map +1 -1
- package/types/src/index.d.ts +1 -1
- package/types/src/index.d.ts.map +1 -1
- package/types/src/models.d.ts +7 -5
- package/types/src/models.d.ts.map +1 -1
- package/types/src/settingsImport/configurationChangesSource.d.ts +3 -3
- package/types/src/settingsImport/configurationChangesSource.d.ts.map +1 -1
- package/types/src/settingsImport/configurationSettingsSource.d.ts +3 -3
- package/types/src/settingsImport/configurationSettingsSource.d.ts.map +1 -1
|
@@ -8,7 +8,7 @@ var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
|
8
8
|
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
9
9
|
};
|
|
10
10
|
import { ConfigurationChangesSource } from "./settingsImport/configurationChangesSource";
|
|
11
|
-
import { ImportMode } from "./enums";
|
|
11
|
+
import { ImportMode, ChangeType } from "./enums";
|
|
12
12
|
import { OperationTimeoutError, ArgumentError } from "./errors";
|
|
13
13
|
import { AdaptiveTaskManager } from "./internal/adaptiveTaskManager";
|
|
14
14
|
import { isConfigSettingEqual } from "./internal/utils";
|
|
@@ -56,7 +56,13 @@ export class AppConfigurationImporter {
|
|
|
56
56
|
}
|
|
57
57
|
};
|
|
58
58
|
const configurationChanges = await this.GetConfigurationChanges(configurationSettingsSource, options === null || options === void 0 ? void 0 : options.strict, options === null || options === void 0 ? void 0 : options.importMode, customHeadersOption);
|
|
59
|
-
|
|
59
|
+
const settingsToWrite = configurationChanges
|
|
60
|
+
.filter(c => (c.changeType === ChangeType.Create || c.changeType === ChangeType.Update || c.changeType === ChangeType.None) && c.newValue)
|
|
61
|
+
.map(c => c.newValue);
|
|
62
|
+
const settingsToDelete = configurationChanges
|
|
63
|
+
.filter(c => c.changeType === ChangeType.Delete && c.currentValue)
|
|
64
|
+
.map(c => c.currentValue);
|
|
65
|
+
return await this.applyUpdatesToServer(settingsToWrite, settingsToDelete, options.timeout, customHeadersOption, options.progressCallback);
|
|
60
66
|
}
|
|
61
67
|
/**
|
|
62
68
|
* Get configuration changes between source settings and existing settings in Azure App Configuration service without applying any changes
|
|
@@ -77,7 +83,7 @@ export class AppConfigurationImporter {
|
|
|
77
83
|
* 'All' will include all key-values.
|
|
78
84
|
* 'Ignore-Match' will exclude settings that have matching key-values in App Configuration.
|
|
79
85
|
* @param customHeadersOption - Custom headers for the operation.
|
|
80
|
-
* @returns
|
|
86
|
+
* @returns Array of ConfigurationSettingChange objects representing the changes
|
|
81
87
|
*/
|
|
82
88
|
async GetConfigurationChanges(configSettingsSource, strict = false, importMode = ImportMode.IgnoreMatch, customHeadersOption) {
|
|
83
89
|
var _a, e_1, _b, _c;
|
|
@@ -100,10 +106,8 @@ export class AppConfigurationImporter {
|
|
|
100
106
|
return configSettingsResult;
|
|
101
107
|
}
|
|
102
108
|
const configSettings = configSettingsResult;
|
|
103
|
-
const
|
|
104
|
-
const configurationSettingToModify = [];
|
|
109
|
+
const configurationChanges = [];
|
|
105
110
|
const configurationSettingToAdd = [];
|
|
106
|
-
const configurationSettingToRefresh = [];
|
|
107
111
|
const srcKeyLabelLookUp = {};
|
|
108
112
|
configSettings.forEach((config) => {
|
|
109
113
|
if (!srcKeyLabelLookUp[config.key]) {
|
|
@@ -120,19 +124,29 @@ export class AppConfigurationImporter {
|
|
|
120
124
|
const existing = _c;
|
|
121
125
|
const isKeyLabelPresent = srcKeyLabelLookUp[existing.key] && srcKeyLabelLookUp[existing.key][existing.label || ""];
|
|
122
126
|
if (strict && !isKeyLabelPresent) {
|
|
123
|
-
|
|
127
|
+
configurationChanges.push({
|
|
128
|
+
changeType: ChangeType.Delete,
|
|
129
|
+
currentValue: existing,
|
|
130
|
+
newValue: null
|
|
131
|
+
});
|
|
124
132
|
}
|
|
125
133
|
const incoming = configSettings.find(configSetting => configSetting.key == existing.key && configSetting.label === existing.label);
|
|
126
134
|
if (incoming) {
|
|
127
135
|
// Remove from add list since it already exists
|
|
128
136
|
configurationSettingToAdd.splice(configurationSettingToAdd.indexOf(incoming), 1);
|
|
129
137
|
if (!isConfigSettingEqual(incoming, existing)) {
|
|
130
|
-
|
|
131
|
-
|
|
138
|
+
configurationChanges.push({
|
|
139
|
+
changeType: ChangeType.Update,
|
|
140
|
+
currentValue: existing,
|
|
141
|
+
newValue: incoming
|
|
142
|
+
});
|
|
132
143
|
}
|
|
133
144
|
else if (importMode === ImportMode.All) {
|
|
134
|
-
|
|
135
|
-
|
|
145
|
+
configurationChanges.push({
|
|
146
|
+
changeType: ChangeType.None,
|
|
147
|
+
currentValue: existing,
|
|
148
|
+
newValue: incoming
|
|
149
|
+
});
|
|
136
150
|
}
|
|
137
151
|
}
|
|
138
152
|
}
|
|
@@ -148,12 +162,14 @@ export class AppConfigurationImporter {
|
|
|
148
162
|
}
|
|
149
163
|
finally { if (e_1) throw e_1.error; }
|
|
150
164
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
165
|
+
for (const setting of configurationSettingToAdd) {
|
|
166
|
+
configurationChanges.push({
|
|
167
|
+
changeType: ChangeType.Create,
|
|
168
|
+
currentValue: null,
|
|
169
|
+
newValue: setting
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
return configurationChanges;
|
|
157
173
|
}
|
|
158
174
|
async applyUpdatesToServer(settingsToPut, settingsToDelete, timeout, options, progressCallback) {
|
|
159
175
|
const deleteTaskManager = this.newAdaptiveTaskManager((setting) => this.configurationClient.deleteConfigurationSetting(setting, options), settingsToDelete);
|
|
@@ -198,14 +214,16 @@ export class AppConfigurationImporter {
|
|
|
198
214
|
* @internal
|
|
199
215
|
*/
|
|
200
216
|
isConfigurationChanges(obj) {
|
|
201
|
-
if (obj
|
|
217
|
+
if (!Array.isArray(obj)) {
|
|
202
218
|
return false;
|
|
203
219
|
}
|
|
204
|
-
|
|
205
|
-
return
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
220
|
+
// Validate it's an array of ConfigurationSettingChange objects
|
|
221
|
+
return obj.every(item => item &&
|
|
222
|
+
typeof item === "object" &&
|
|
223
|
+
"changeType" in item &&
|
|
224
|
+
"currentValue" in item &&
|
|
225
|
+
"newValue" in item &&
|
|
226
|
+
Object.values(ChangeType).includes(item.changeType));
|
|
209
227
|
}
|
|
210
228
|
}
|
|
211
229
|
//# sourceMappingURL=appConfigurationImporter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appConfigurationImporter.js","sourceRoot":"","sources":["../../src/appConfigurationImporter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { \n AppConfigurationClient, \n ConfigurationSetting, \n SetConfigurationSettingParam, \n FeatureFlagValue, \n SecretReferenceValue } from \"@azure/app-configuration\";\nimport { ConfigurationSettingsSource } from \"./settingsImport/configurationSettingsSource\";\nimport { ConfigurationChangesSource } from \"./settingsImport/configurationChangesSource\";\nimport { ImportMode } from \"./enums\";\nimport { OperationTimeoutError, ArgumentError } from \"./errors\";\nimport { AdaptiveTaskManager } from \"./internal/adaptiveTaskManager\";\nimport { ImportProgress, KeyLabelLookup, ConfigurationChanges } from \"./models\";\nimport { isConfigSettingEqual } from \"./internal/utils\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { Constants } from \"./internal/constants\";\nimport { OperationOptions } from \"@azure/core-client\";\nimport { ImportOptions } from \"./options\";\n\n/**\n * Entrypoint class for sync configuration\n */\nexport class AppConfigurationImporter {\n private configurationClient: AppConfigurationClient;\n /**\n * Initializes a new instance of the AppConfigurationSync class.\n * @param configurationClient - App configuration client for manipulate the target App Configuration.\n */\n constructor(configurationClient: AppConfigurationClient) {\n this.configurationClient = configurationClient;\n }\n\n /**\n * Import settings into the Azure App Configuration service.\n * \n * Example usage:\n * ```ts\n * const fileData = fs.readFileSync(\"mylocalPath\").toString();\n * const source = new StringConfigurationSettingsSource({data:fileData, format: ConfigurationFormat.Json});\n * await importer.Import(source, { timeout: 60 });\n * ```\n * \n * @param configurationSettingsSource - A ConfigurationSettingsSource instance.\n * @param options - Import options including timeout, progress callback, strict mode, and import mode.\n * @returns Promise<void>\n */\n public async Import(\n configurationSettingsSource: ConfigurationSettingsSource,\n options: ImportOptions\n ): Promise<void> {\n if (configurationSettingsSource instanceof ConfigurationChangesSource) {\n // When using ConfigurationChanges, strict and importMode parameters are not applicable\n if (options?.strict || options?.importMode) {\n throw new ArgumentError(\"Parameters 'strict' and 'importMode' are not applicable when importing pre-calculated changes.\");\n }\n }\n\n // Generate correlationRequestId for operations in the same activity\n const customCorrelationRequestId: string = uuidv4();\n const customHeadersOption: OperationOptions = {\n requestOptions: {\n customHeaders: {\n [Constants.CorrelationRequestIdHeader]: customCorrelationRequestId\n }\n }\n };\n\n const configurationChanges = await this.GetConfigurationChanges(configurationSettingsSource, options?.strict, options?.importMode, customHeadersOption);\n\n return await this.applyUpdatesToServer([...configurationChanges.ToAdd, ...configurationChanges.ToModify, ...configurationChanges.ToRefresh], configurationChanges.ToDelete, options.timeout, customHeadersOption, options.progressCallback);\n }\n\n /**\n * Get configuration changes between source settings and existing settings in Azure App Configuration service without applying any changes\n *\n * Example usage:\n * ```ts\n * const fileData = fs.readFileSync(\"mylocalPath\").toString();\n * const configurationChanges = await client.GetConfigurationChanges(\n * new StringConfigurationSettingsSource({data:fileData, format: ConfigurationFormat.Json}),\n * false,\n * ImportMode.All,\n * options\n * );\n * ```\n * @param configSettingsSource - A ConfigurationSettingsSource instance.\n * @param strict - Use strict mode to delete settings not in source.\n * @param importMode - Determines the behavior when analyzing key-values.\n * 'All' will include all key-values. \n * 'Ignore-Match' will exclude settings that have matching key-values in App Configuration.\n * @param customHeadersOption - Custom headers for the operation.\n * @returns ConfigurationChanges object containing Added, Modified, and Deleted settings\n */\n public async GetConfigurationChanges(\n configSettingsSource: ConfigurationSettingsSource,\n strict = false,\n importMode = ImportMode.IgnoreMatch,\n customHeadersOption?: OperationOptions\n ): Promise<ConfigurationChanges> {\n this.validateImportMode(importMode);\n\n // Generate correlationRequestId for operations in the same activity\n if (!customHeadersOption) {\n const customCorrelationRequestId: string = uuidv4();\n customHeadersOption = {\n requestOptions: {\n customHeaders: {\n [Constants.CorrelationRequestIdHeader]: customCorrelationRequestId\n }\n }\n };\n }\n\n const configSettingsResult = await configSettingsSource.GetConfigurationSettings();\n\n // If the source returns ConfigurationChanges (e.g., ConfigurationChangesSource), \n // return them directly without further processing since changes are already calculated\n if (this.isConfigurationChanges(configSettingsResult)) {\n return configSettingsResult as ConfigurationChanges;\n }\n \n const configSettings = configSettingsResult as Array<SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>>;\n const configurationSettingToDelete: ConfigurationSetting<string>[] = [];\n const configurationSettingToModify: SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>[] = [];\n const configurationSettingToAdd: SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>[] = [];\n const configurationSettingToRefresh: SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>[] = [];\n const srcKeyLabelLookUp: KeyLabelLookup = {};\n \n configSettings.forEach((config: SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>) => {\n if (!srcKeyLabelLookUp[config.key]) {\n srcKeyLabelLookUp[config.key] = {};\n }\n srcKeyLabelLookUp[config.key][config.label || \"\"] = true;\n });\n\n configurationSettingToAdd.push(...configSettings);\n\n for await (const existing of this.configurationClient.listConfigurationSettings({...configSettingsSource.FilterOptions, ...customHeadersOption})) {\n const isKeyLabelPresent: boolean = srcKeyLabelLookUp[existing.key] && srcKeyLabelLookUp[existing.key][existing.label || \"\"];\n if (strict && !isKeyLabelPresent) {\n configurationSettingToDelete.push(existing);\n }\n\n const incoming = configSettings.find(configSetting => configSetting.key == existing.key && configSetting.label === existing.label);\n\n if (incoming) {\n // Remove from add list since it already exists\n configurationSettingToAdd.splice(configurationSettingToAdd.indexOf(incoming), 1);\n\n if (!isConfigSettingEqual(incoming, existing)) {\n // Key-value has changed, add to ToModify\n configurationSettingToModify.push(incoming);\n } \n else if (importMode === ImportMode.All) {\n // Key-value is unchanged and importMode is All, add to ToRefresh\n configurationSettingToRefresh.push(incoming);\n }\n }\n }\n\n return {\n ToAdd: configurationSettingToAdd,\n ToModify: configurationSettingToModify,\n ToDelete: configurationSettingToDelete,\n ToRefresh: configurationSettingToRefresh\n };\n }\n\n private async applyUpdatesToServer(\n settingsToPut: SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>[], \n settingsToDelete: ConfigurationSetting<string>[],\n timeout: number,\n options: OperationOptions,\n progressCallback?: (progress: ImportProgress) => unknown | undefined\n ): Promise<void> {\n const deleteTaskManager = this.newAdaptiveTaskManager((setting) => this.configurationClient.deleteConfigurationSetting(setting, options), settingsToDelete);\n const startTime = Date.now();\n await this.executeTasksWithTimeout(deleteTaskManager, timeout);\n const endTime = Date.now();\n const deleteTimeConsumed = (endTime - startTime) / 1000;\n timeout -= deleteTimeConsumed;\n\n const importTaskManager = this.newAdaptiveTaskManager((setting) => this.configurationClient.setConfigurationSetting(setting, options), settingsToPut);\n await this.executeTasksWithTimeout(importTaskManager, timeout, progressCallback);\n }\n\n private newAdaptiveTaskManager<T>(task: (setting: T) => Promise<any>, configurationSettings: Array<T>) {\n let index = 0;\n return new AdaptiveTaskManager(() => {\n if (index == configurationSettings.length) {\n return undefined;\n }\n const configSet = configurationSettings[index++];\n\n return async () => {\n return task(configSet);\n };\n }, configurationSettings.length);\n }\n\n private async executeTasksWithTimeout<T>(taskManager: AdaptiveTaskManager<T>, timeInSeconds: number, callback?: (progress: ImportProgress) => unknown) {\n let timer: NodeJS.Timeout;\n const taskPromise = taskManager.Start(callback);\n const timeoutPromise = new Promise((_, reject) => {\n timer = setTimeout(() => reject(new OperationTimeoutError()), timeInSeconds * 1000);\n });\n await Promise.race([taskPromise, timeoutPromise]).finally(() => {\n clearTimeout(timer); // clear timeout when importPromise successfully resolve or faultily reject.\n });\n }\n\n private validateImportMode(importMode: ImportMode): void {\n if (importMode && !(importMode == ImportMode.IgnoreMatch || \n importMode == ImportMode.All)) {\n throw new ArgumentError(\"Only options supported for Import Mode are 'All' and 'Ignore-Match'.\");\n }\n }\n\n /**\n * Type guard to detect a ConfigurationChanges object.\n * @internal\n */\n private isConfigurationChanges(obj: unknown): obj is ConfigurationChanges {\n if (obj === null || typeof obj !== \"object\") {\n return false;\n }\n const configChanges = obj as Partial<ConfigurationChanges>;\n return Array.isArray(configChanges.ToAdd) && \n Array.isArray(configChanges.ToModify) && \n Array.isArray(configChanges.ToDelete) && \n Array.isArray(configChanges.ToRefresh);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"appConfigurationImporter.js","sourceRoot":"","sources":["../../src/appConfigurationImporter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { \n AppConfigurationClient, \n ConfigurationSetting, \n SetConfigurationSettingParam, \n FeatureFlagValue, \n SecretReferenceValue } from \"@azure/app-configuration\";\nimport { ConfigurationSettingsSource } from \"./settingsImport/configurationSettingsSource\";\nimport { ConfigurationChangesSource } from \"./settingsImport/configurationChangesSource\";\nimport { ImportMode, ChangeType } from \"./enums\";\nimport { OperationTimeoutError, ArgumentError } from \"./errors\";\nimport { AdaptiveTaskManager } from \"./internal/adaptiveTaskManager\";\nimport { ImportProgress, KeyLabelLookup, ConfigurationSettingChange } from \"./models\";\nimport { isConfigSettingEqual } from \"./internal/utils\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { Constants } from \"./internal/constants\";\nimport { OperationOptions } from \"@azure/core-client\";\nimport { ImportOptions } from \"./options\";\n\n/**\n * Entrypoint class for sync configuration\n */\nexport class AppConfigurationImporter {\n private configurationClient: AppConfigurationClient;\n /**\n * Initializes a new instance of the AppConfigurationSync class.\n * @param configurationClient - App configuration client for manipulate the target App Configuration.\n */\n constructor(configurationClient: AppConfigurationClient) {\n this.configurationClient = configurationClient;\n }\n\n /**\n * Import settings into the Azure App Configuration service.\n * \n * Example usage:\n * ```ts\n * const fileData = fs.readFileSync(\"mylocalPath\").toString();\n * const source = new StringConfigurationSettingsSource({data:fileData, format: ConfigurationFormat.Json});\n * await importer.Import(source, { timeout: 60 });\n * ```\n * \n * @param configurationSettingsSource - A ConfigurationSettingsSource instance.\n * @param options - Import options including timeout, progress callback, strict mode, and import mode.\n * @returns Promise<void>\n */\n public async Import(\n configurationSettingsSource: ConfigurationSettingsSource,\n options: ImportOptions\n ): Promise<void> {\n if (configurationSettingsSource instanceof ConfigurationChangesSource) {\n // When using ConfigurationChanges, strict and importMode parameters are not applicable\n if (options?.strict || options?.importMode) {\n throw new ArgumentError(\"Parameters 'strict' and 'importMode' are not applicable when importing pre-calculated changes.\");\n }\n }\n\n // Generate correlationRequestId for operations in the same activity\n const customCorrelationRequestId: string = uuidv4();\n const customHeadersOption: OperationOptions = {\n requestOptions: {\n customHeaders: {\n [Constants.CorrelationRequestIdHeader]: customCorrelationRequestId\n }\n }\n };\n\n const configurationChanges = await this.GetConfigurationChanges(configurationSettingsSource, options?.strict, options?.importMode, customHeadersOption);\n \n const settingsToWrite: SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>[] = configurationChanges\n .filter(c => (c.changeType === ChangeType.Create || c.changeType === ChangeType.Update || c.changeType === ChangeType.None) && c.newValue)\n .map(c => c.newValue!);\n\n const settingsToDelete: ConfigurationSetting[] = configurationChanges\n .filter(c => c.changeType === ChangeType.Delete && c.currentValue)\n .map(c => c.currentValue!);\n\n return await this.applyUpdatesToServer(settingsToWrite, settingsToDelete, options.timeout, customHeadersOption, options.progressCallback);\n }\n\n /**\n * Get configuration changes between source settings and existing settings in Azure App Configuration service without applying any changes\n *\n * Example usage:\n * ```ts\n * const fileData = fs.readFileSync(\"mylocalPath\").toString();\n * const configurationChanges = await client.GetConfigurationChanges(\n * new StringConfigurationSettingsSource({data:fileData, format: ConfigurationFormat.Json}),\n * false,\n * ImportMode.All,\n * options\n * );\n * ```\n * @param configSettingsSource - A ConfigurationSettingsSource instance.\n * @param strict - Use strict mode to delete settings not in source.\n * @param importMode - Determines the behavior when analyzing key-values.\n * 'All' will include all key-values. \n * 'Ignore-Match' will exclude settings that have matching key-values in App Configuration.\n * @param customHeadersOption - Custom headers for the operation.\n * @returns Array of ConfigurationSettingChange objects representing the changes\n */\n public async GetConfigurationChanges(\n configSettingsSource: ConfigurationSettingsSource,\n strict = false,\n importMode = ImportMode.IgnoreMatch,\n customHeadersOption?: OperationOptions\n ): Promise<Array<ConfigurationSettingChange>> {\n this.validateImportMode(importMode);\n\n // Generate correlationRequestId for operations in the same activity\n if (!customHeadersOption) {\n const customCorrelationRequestId: string = uuidv4();\n customHeadersOption = {\n requestOptions: {\n customHeaders: {\n [Constants.CorrelationRequestIdHeader]: customCorrelationRequestId\n }\n }\n };\n }\n\n const configSettingsResult = await configSettingsSource.GetConfigurationSettings();\n\n // If the source returns ConfigurationChanges (e.g., ConfigurationChangesSource), \n // return them directly without further processing since changes are already calculated\n if (this.isConfigurationChanges(configSettingsResult)) {\n return configSettingsResult as Array<ConfigurationSettingChange>;\n }\n \n const configSettings = configSettingsResult as Array<SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>>;\n const configurationChanges: Array<ConfigurationSettingChange> = [];\n const configurationSettingToAdd: SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>[] = [];\n const srcKeyLabelLookUp: KeyLabelLookup = {};\n \n configSettings.forEach((config: SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>) => {\n if (!srcKeyLabelLookUp[config.key]) {\n srcKeyLabelLookUp[config.key] = {};\n }\n srcKeyLabelLookUp[config.key][config.label || \"\"] = true;\n });\n\n configurationSettingToAdd.push(...configSettings);\n\n for await (const existing of this.configurationClient.listConfigurationSettings({...configSettingsSource.FilterOptions, ...customHeadersOption})) {\n const isKeyLabelPresent: boolean = srcKeyLabelLookUp[existing.key] && srcKeyLabelLookUp[existing.key][existing.label || \"\"];\n \n if (strict && !isKeyLabelPresent) {\n configurationChanges.push({\n changeType: ChangeType.Delete,\n currentValue: existing,\n newValue: null\n });\n }\n\n const incoming = configSettings.find(configSetting => configSetting.key == existing.key && configSetting.label === existing.label);\n\n if (incoming) {\n // Remove from add list since it already exists\n configurationSettingToAdd.splice(configurationSettingToAdd.indexOf(incoming), 1);\n\n if (!isConfigSettingEqual(incoming, existing)) {\n configurationChanges.push({\n changeType: ChangeType.Update,\n currentValue: existing,\n newValue: incoming\n });\n } \n else if (importMode === ImportMode.All) {\n configurationChanges.push({\n changeType: ChangeType.None,\n currentValue: existing,\n newValue: incoming\n });\n }\n }\n }\n\n for (const setting of configurationSettingToAdd) {\n configurationChanges.push({\n changeType: ChangeType.Create,\n currentValue: null,\n newValue: setting\n });\n }\n\n return configurationChanges;\n }\n\n private async applyUpdatesToServer(\n settingsToPut: SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>[], \n settingsToDelete: ConfigurationSetting<string>[],\n timeout: number,\n options: OperationOptions,\n progressCallback?: (progress: ImportProgress) => unknown | undefined\n ): Promise<void> {\n const deleteTaskManager = this.newAdaptiveTaskManager((setting) => this.configurationClient.deleteConfigurationSetting(setting, options), settingsToDelete);\n const startTime = Date.now();\n await this.executeTasksWithTimeout(deleteTaskManager, timeout);\n const endTime = Date.now();\n const deleteTimeConsumed = (endTime - startTime) / 1000;\n timeout -= deleteTimeConsumed;\n\n const importTaskManager = this.newAdaptiveTaskManager((setting) => this.configurationClient.setConfigurationSetting(setting, options), settingsToPut);\n await this.executeTasksWithTimeout(importTaskManager, timeout, progressCallback);\n }\n\n private newAdaptiveTaskManager<T>(task: (setting: T) => Promise<any>, configurationSettings: Array<T>) {\n let index = 0;\n return new AdaptiveTaskManager(() => {\n if (index == configurationSettings.length) {\n return undefined;\n }\n const configSet = configurationSettings[index++];\n\n return async () => {\n return task(configSet);\n };\n }, configurationSettings.length);\n }\n\n private async executeTasksWithTimeout<T>(taskManager: AdaptiveTaskManager<T>, timeInSeconds: number, callback?: (progress: ImportProgress) => unknown) {\n let timer: NodeJS.Timeout;\n const taskPromise = taskManager.Start(callback);\n const timeoutPromise = new Promise((_, reject) => {\n timer = setTimeout(() => reject(new OperationTimeoutError()), timeInSeconds * 1000);\n });\n await Promise.race([taskPromise, timeoutPromise]).finally(() => {\n clearTimeout(timer); // clear timeout when importPromise successfully resolve or faultily reject.\n });\n }\n\n private validateImportMode(importMode: ImportMode): void {\n if (importMode && !(importMode == ImportMode.IgnoreMatch || \n importMode == ImportMode.All)) {\n throw new ArgumentError(\"Only options supported for Import Mode are 'All' and 'Ignore-Match'.\");\n }\n }\n\n /**\n * Type guard to detect a ConfigurationChanges object.\n * @internal\n */\n private isConfigurationChanges(obj: unknown): obj is Array<ConfigurationSettingChange> {\n if (!Array.isArray(obj)) {\n return false;\n }\n \n // Validate it's an array of ConfigurationSettingChange objects\n return obj.every(item => \n item && \n typeof item === \"object\" &&\n \"changeType\" in item &&\n \"currentValue\" in item &&\n \"newValue\" in item &&\n Object.values(ChangeType).includes(item.changeType)\n );\n }\n}\n"]}
|
package/dist-esm/src/enums.js
CHANGED
|
@@ -25,4 +25,14 @@ export var ImportMode;
|
|
|
25
25
|
ImportMode[ImportMode["All"] = 0] = "All";
|
|
26
26
|
ImportMode[ImportMode["IgnoreMatch"] = 1] = "IgnoreMatch";
|
|
27
27
|
})(ImportMode || (ImportMode = {}));
|
|
28
|
+
/**
|
|
29
|
+
* Enums of change type for configuration settings changes
|
|
30
|
+
*/
|
|
31
|
+
export var ChangeType;
|
|
32
|
+
(function (ChangeType) {
|
|
33
|
+
ChangeType[ChangeType["None"] = 0] = "None";
|
|
34
|
+
ChangeType[ChangeType["Create"] = 1] = "Create";
|
|
35
|
+
ChangeType[ChangeType["Delete"] = 2] = "Delete";
|
|
36
|
+
ChangeType[ChangeType["Update"] = 3] = "Update";
|
|
37
|
+
})(ChangeType || (ChangeType = {}));
|
|
28
38
|
//# sourceMappingURL=enums.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/enums.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;GAEG;AACH,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,6DAAI,CAAA;IACJ,yEAAU,CAAA;IACV,6DAAI,CAAA;AACN,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,qEAAO,CAAA;IACP,iEAAK,CAAA;AACP,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,QAG/B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,yCAAG,CAAA;IACH,yDAAW,CAAA;AACb,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/**\n * Enums of configuration Format.\n */\nexport enum ConfigurationFormat {\n Json,\n Properties,\n Yaml,\n}\n\n/**\n * Enums of configuration Profile.\n */\nexport enum ConfigurationProfile {\n Default,\n KvSet,\n}\n\n/**\n * Enums of import mode.\n */\nexport enum ImportMode {\n All,\n IgnoreMatch\n}"]}
|
|
1
|
+
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/enums.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;GAEG;AACH,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,6DAAI,CAAA;IACJ,yEAAU,CAAA;IACV,6DAAI,CAAA;AACN,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,qEAAO,CAAA;IACP,iEAAK,CAAA;AACP,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,QAG/B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,yCAAG,CAAA;IACH,yDAAW,CAAA;AACb,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,2CAAI,CAAA;IACJ,+CAAM,CAAA;IACN,+CAAM,CAAA;IACN,+CAAM,CAAA;AACR,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/**\n * Enums of configuration Format.\n */\nexport enum ConfigurationFormat {\n Json,\n Properties,\n Yaml,\n}\n\n/**\n * Enums of configuration Profile.\n */\nexport enum ConfigurationProfile {\n Default,\n KvSet,\n}\n\n/**\n * Enums of import mode.\n */\nexport enum ImportMode {\n All,\n IgnoreMatch\n}\n\n/**\n * Enums of change type for configuration settings changes\n */\nexport enum ChangeType {\n None,\n Create,\n Delete,\n Update\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAOtE,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AAEzB,OAAO,EAAE,iCAAiC,EAAE,MAAM,oDAAoD,CAAC;AAEvG,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AACzF,OAAO,EAAE,mCAAmC,EAAE,MAAM,sDAAsD,CAAC;AAC3G,OAAO,EAAE,yCAAyC,EAAE,MAAM,4DAA4D,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport { AppConfigurationImporter } from \"./appConfigurationImporter\";\nexport {\n StringSourceOptions,\n IterableSourceOptions,\n ReadableStreamSourceOptions,\n ImportOptions\n} from \"./options\";\nexport * from \"./enums\";\nexport * from \"./errors\";\nexport { ImportProgress as ImportResult,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAOtE,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AAEzB,OAAO,EAAE,iCAAiC,EAAE,MAAM,oDAAoD,CAAC;AAEvG,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AACzF,OAAO,EAAE,mCAAmC,EAAE,MAAM,sDAAsD,CAAC;AAC3G,OAAO,EAAE,yCAAyC,EAAE,MAAM,4DAA4D,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport { AppConfigurationImporter } from \"./appConfigurationImporter\";\nexport {\n StringSourceOptions,\n IterableSourceOptions,\n ReadableStreamSourceOptions,\n ImportOptions\n} from \"./options\";\nexport * from \"./enums\";\nexport * from \"./errors\";\nexport { ImportProgress as ImportResult, ConfigurationSettingChange } from \"./models\";\nexport { StringConfigurationSettingsSource } from \"./settingsImport/stringConfigurationSettingsSource\";\nexport { ConfigurationSettingsSource } from \"./settingsImport/configurationSettingsSource\";\nexport { ConfigurationChangesSource } from \"./settingsImport/configurationChangesSource\";\nexport { IterableConfigurationSettingsSource } from \"./settingsImport/iterableConfigurationSettingsSource\";\nexport { ReadableStreamConfigurationSettingsSource } from \"./settingsImport/readableStreamConfigurationSettingsSource\";"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { \n SecretReferenceValue,\n ConfigurationSetting,\n SetConfigurationSettingParam,\n FeatureFlagValue\n} from \"@azure/app-configuration\";\n\n/**\n * @internal\n */\nexport type ClientFilter = { name: string; parameters?: Record<string, unknown> };\n\n/**\n * @internal\n */\nexport interface JsonSecretReferenceValue {\n uri: string;\n}\n\n/**\n * @internal\n */\nexport type KvSetConfigurationItem = {\n key: string;\n value?: string;\n label?: string;\n content_type?: string;\n tags?: { [propertyName: string]: string };\n}\n\nexport interface ImportProgress {\n successCount: number;\n importCount: number;\n}\n\nexport interface Tags {\n [propertyName: string]: string;\n}\n\nexport interface FeatureFlagClientFilters {\n name: string;\n parameters?: Record<string, unknown> | undefined;\n}\n\nexport interface KeyLabelLookup {\n [key: string]: {\n [label: string] : boolean\n }\n}\n\nexport interface
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { \n SecretReferenceValue,\n ConfigurationSetting,\n SetConfigurationSettingParam,\n FeatureFlagValue\n} from \"@azure/app-configuration\";\nimport { ChangeType } from \"./enums\";\n\n/**\n * @internal\n */\nexport type ClientFilter = { name: string; parameters?: Record<string, unknown> };\n\n/**\n * @internal\n */\nexport interface JsonSecretReferenceValue {\n uri: string;\n}\n\n/**\n * @internal\n */\nexport type KvSetConfigurationItem = {\n key: string;\n value?: string;\n label?: string;\n content_type?: string;\n tags?: { [propertyName: string]: string };\n}\n\nexport interface ImportProgress {\n successCount: number;\n importCount: number;\n}\n\nexport interface Tags {\n [propertyName: string]: string;\n}\n\nexport interface FeatureFlagClientFilters {\n name: string;\n parameters?: Record<string, unknown> | undefined;\n}\n\nexport interface KeyLabelLookup {\n [key: string]: {\n [label: string] : boolean\n }\n}\n\nexport interface ConfigurationSettingChange {\n changeType: ChangeType;\n /** The current value of the configuration setting */\n currentValue: ConfigurationSetting<string> | null;\n /** The new value of the configuration setting */\n newValue: SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue> | null;\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configurationChangesSource.js","sourceRoot":"","sources":["../../../src/settingsImport/configurationChangesSource.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAKlC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,0BAA0B;IAGrC,YAAY,
|
|
1
|
+
{"version":3,"file":"configurationChangesSource.js","sourceRoot":"","sources":["../../../src/settingsImport/configurationChangesSource.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAKlC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,0BAA0B;IAGrC,YAAY,oBAAuD,EAAE,aAAgD;QACnH,IAAI,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1D,MAAM,IAAI,aAAa,CAAC,iEAAiE,CAAC,CAAC;SAC5F;QACD,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;IACnD,CAAC;IAED;;SAEK;IACE,KAAK,CAAC,wBAAwB;QACnC,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { ConfigurationSettingsSource } from \"./configurationSettingsSource\";\nimport { ConfigurationSettingChange } from \"../models\";\nimport { ListConfigurationSettingsOptions } from \"@azure/app-configuration\";\nimport { ArgumentError } from \"../errors\";\n\n/**\n * A ConfigurationSettingsSource that wraps pre-calculated configuration changes.\n * \n * Use this class to import changes that were previously obtained via GetConfigurationChanges().\n * \n * Example usage:\n * ```ts\n * // First, get the configuration changes\n * const changes = await importer.GetConfigurationChanges(source);\n * \n * // Import the pre-calculated changes\n * const changesSource = new ConfigurationChangesSource(changes);\n * await importer.Import(changesSource, { timeout: 60 });\n * ```\n */\nexport class ConfigurationChangesSource implements ConfigurationSettingsSource {\n private readonly configurationChanges: Array<ConfigurationSettingChange>;\n\n constructor(configurationChanges: Array<ConfigurationSettingChange>, filterOptions?: ListConfigurationSettingsOptions) {\n if (filterOptions && Object.keys(filterOptions).length > 0) {\n throw new ArgumentError(\"FilterOptions are not supported for ConfigurationChangesSource.\");\n }\n this.configurationChanges = configurationChanges;\n }\n\n /**\n * @inheritdoc\n */\n public async GetConfigurationSettings(): Promise<Array<ConfigurationSettingChange>> {\n return this.configurationChanges;\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configurationSettingsSource.js","sourceRoot":"","sources":["../../../src/settingsImport/configurationSettingsSource.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n FeatureFlagValue,\n ListConfigurationSettingsOptions,\n SecretReferenceValue,\n SetConfigurationSettingParam\n} from \"@azure/app-configuration\";\nimport {
|
|
1
|
+
{"version":3,"file":"configurationSettingsSource.js","sourceRoot":"","sources":["../../../src/settingsImport/configurationSettingsSource.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n FeatureFlagValue,\n ListConfigurationSettingsOptions,\n SecretReferenceValue,\n SetConfigurationSettingParam\n} from \"@azure/app-configuration\";\nimport { ConfigurationSettingChange } from \"../models\";\n\n/**\n * Interface of all ConfigurationSettingsSource\n */\nexport interface ConfigurationSettingsSource {\n /**\n * Get ConfigurationSettings collection from source.\n *\n * @returns Collection of ConfigurationSettings or ConfigurationSettingChanges\n */\n GetConfigurationSettings(): Promise<Array<SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>> | Array<ConfigurationSettingChange>>;\n\n /**\n * Get label and prefix filter\n *\n * @returns label and prefix\n */\n FilterOptions?: ListConfigurationSettingsOptions;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@azure/app-configuration-importer",
|
|
3
3
|
"author": "Microsoft Corporation",
|
|
4
4
|
"description": "A client library for importing/exporting key-values between configuration sources and Azure App Configuration service",
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "3.0.0-preview",
|
|
6
6
|
"sdk-type": "client",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"node",
|
|
@@ -68,9 +68,9 @@ export declare class AppConfigurationImporter {
|
|
|
68
68
|
* 'All' will include all key-values.
|
|
69
69
|
* 'Ignore-Match' will exclude settings that have matching key-values in App Configuration.
|
|
70
70
|
* @param customHeadersOption - Custom headers for the operation.
|
|
71
|
-
* @returns
|
|
71
|
+
* @returns Array of ConfigurationSettingChange objects representing the changes
|
|
72
72
|
*/
|
|
73
|
-
GetConfigurationChanges(configSettingsSource: ConfigurationSettingsSource, strict?: boolean, importMode?: ImportMode, customHeadersOption?: OperationOptions): Promise<
|
|
73
|
+
GetConfigurationChanges(configSettingsSource: ConfigurationSettingsSource, strict?: boolean, importMode?: ImportMode, customHeadersOption?: OperationOptions): Promise<Array<ConfigurationSettingChange>>;
|
|
74
74
|
private applyUpdatesToServer;
|
|
75
75
|
private newAdaptiveTaskManager;
|
|
76
76
|
private executeTasksWithTimeout;
|
|
@@ -95,11 +95,14 @@ export declare class ArgumentError extends Error {
|
|
|
95
95
|
export declare class ArgumentNullError extends Error {
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
98
|
+
/**
|
|
99
|
+
* Enums of change type for configuration settings changes
|
|
100
|
+
*/
|
|
101
|
+
export declare enum ChangeType {
|
|
102
|
+
None = 0,
|
|
103
|
+
Create = 1,
|
|
104
|
+
Delete = 2,
|
|
105
|
+
Update = 3
|
|
103
106
|
}
|
|
104
107
|
|
|
105
108
|
/**
|
|
@@ -119,11 +122,11 @@ export declare interface ConfigurationChanges {
|
|
|
119
122
|
*/
|
|
120
123
|
export declare class ConfigurationChangesSource implements ConfigurationSettingsSource {
|
|
121
124
|
private readonly configurationChanges;
|
|
122
|
-
constructor(configurationChanges:
|
|
125
|
+
constructor(configurationChanges: Array<ConfigurationSettingChange>, filterOptions?: ListConfigurationSettingsOptions);
|
|
123
126
|
/**
|
|
124
127
|
* @inheritdoc
|
|
125
128
|
*/
|
|
126
|
-
GetConfigurationSettings(): Promise<
|
|
129
|
+
GetConfigurationSettings(): Promise<Array<ConfigurationSettingChange>>;
|
|
127
130
|
}
|
|
128
131
|
|
|
129
132
|
/**
|
|
@@ -143,6 +146,14 @@ export declare enum ConfigurationProfile {
|
|
|
143
146
|
KvSet = 1
|
|
144
147
|
}
|
|
145
148
|
|
|
149
|
+
export declare interface ConfigurationSettingChange {
|
|
150
|
+
changeType: ChangeType;
|
|
151
|
+
/** The current value of the configuration setting */
|
|
152
|
+
currentValue: ConfigurationSetting<string> | null;
|
|
153
|
+
/** The new value of the configuration setting */
|
|
154
|
+
newValue: SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue> | null;
|
|
155
|
+
}
|
|
156
|
+
|
|
146
157
|
/**
|
|
147
158
|
* Interface of all ConfigurationSettingsSource
|
|
148
159
|
*/
|
|
@@ -150,9 +161,9 @@ export declare interface ConfigurationSettingsSource {
|
|
|
150
161
|
/**
|
|
151
162
|
* Get ConfigurationSettings collection from source.
|
|
152
163
|
*
|
|
153
|
-
* @returns Collection of ConfigurationSettings or
|
|
164
|
+
* @returns Collection of ConfigurationSettings or ConfigurationSettingChanges
|
|
154
165
|
*/
|
|
155
|
-
GetConfigurationSettings(): Promise<Array<SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>> |
|
|
166
|
+
GetConfigurationSettings(): Promise<Array<SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>> | Array<ConfigurationSettingChange>>;
|
|
156
167
|
/**
|
|
157
168
|
* Get label and prefix filter
|
|
158
169
|
*
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AppConfigurationClient } from "@azure/app-configuration";
|
|
2
2
|
import { ConfigurationSettingsSource } from "./settingsImport/configurationSettingsSource";
|
|
3
3
|
import { ImportMode } from "./enums";
|
|
4
|
-
import {
|
|
4
|
+
import { ConfigurationSettingChange } from "./models";
|
|
5
5
|
import { OperationOptions } from "@azure/core-client";
|
|
6
6
|
import { ImportOptions } from "./options";
|
|
7
7
|
/**
|
|
@@ -48,9 +48,9 @@ export declare class AppConfigurationImporter {
|
|
|
48
48
|
* 'All' will include all key-values.
|
|
49
49
|
* 'Ignore-Match' will exclude settings that have matching key-values in App Configuration.
|
|
50
50
|
* @param customHeadersOption - Custom headers for the operation.
|
|
51
|
-
* @returns
|
|
51
|
+
* @returns Array of ConfigurationSettingChange objects representing the changes
|
|
52
52
|
*/
|
|
53
|
-
GetConfigurationChanges(configSettingsSource: ConfigurationSettingsSource, strict?: boolean, importMode?: ImportMode, customHeadersOption?: OperationOptions): Promise<
|
|
53
|
+
GetConfigurationChanges(configSettingsSource: ConfigurationSettingsSource, strict?: boolean, importMode?: ImportMode, customHeadersOption?: OperationOptions): Promise<Array<ConfigurationSettingChange>>;
|
|
54
54
|
private applyUpdatesToServer;
|
|
55
55
|
private newAdaptiveTaskManager;
|
|
56
56
|
private executeTasksWithTimeout;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appConfigurationImporter.d.ts","sourceRoot":"","sources":["../../src/appConfigurationImporter.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,sBAAsB,EAIA,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAE3F,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"appConfigurationImporter.d.ts","sourceRoot":"","sources":["../../src/appConfigurationImporter.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,sBAAsB,EAIA,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAE3F,OAAO,EAAE,UAAU,EAAc,MAAM,SAAS,CAAC;AAGjD,OAAO,EAAkC,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAItF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C;;GAEG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,mBAAmB,CAAyB;IACpD;;;OAGG;gBACS,mBAAmB,EAAE,sBAAsB;IAIvD;;;;;;;;;;;;;OAaG;IACU,MAAM,CACjB,2BAA2B,EAAE,2BAA2B,EACxD,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC;IA+BhB;;;;;;;;;;;;;;;;;;;;OAoBG;IACU,uBAAuB,CAClC,oBAAoB,EAAE,2BAA2B,EACjD,MAAM,UAAQ,EACd,UAAU,aAAyB,EACnC,mBAAmB,CAAC,EAAE,gBAAgB,GACrC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAkF/B,oBAAoB;IAkBlC,OAAO,CAAC,sBAAsB;YAchB,uBAAuB;IAWrC,OAAO,CAAC,kBAAkB;IAO1B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;CAe/B"}
|
package/types/src/enums.d.ts
CHANGED
|
@@ -20,4 +20,13 @@ export declare enum ImportMode {
|
|
|
20
20
|
All = 0,
|
|
21
21
|
IgnoreMatch = 1
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Enums of change type for configuration settings changes
|
|
25
|
+
*/
|
|
26
|
+
export declare enum ChangeType {
|
|
27
|
+
None = 0,
|
|
28
|
+
Create = 1,
|
|
29
|
+
Delete = 2,
|
|
30
|
+
Update = 3
|
|
31
|
+
}
|
|
23
32
|
//# sourceMappingURL=enums.d.ts.map
|
package/types/src/enums.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../src/enums.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,oBAAY,mBAAmB;IAC7B,IAAI,IAAA;IACJ,UAAU,IAAA;IACV,IAAI,IAAA;CACL;AAED;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,OAAO,IAAA;IACP,KAAK,IAAA;CACN;AAED;;GAEG;AACH,oBAAY,UAAU;IACpB,GAAG,IAAA;IACH,WAAW,IAAA;CACZ"}
|
|
1
|
+
{"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../src/enums.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,oBAAY,mBAAmB;IAC7B,IAAI,IAAA;IACJ,UAAU,IAAA;IACV,IAAI,IAAA;CACL;AAED;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,OAAO,IAAA;IACP,KAAK,IAAA;CACN;AAED;;GAEG;AACH,oBAAY,UAAU;IACpB,GAAG,IAAA;IACH,WAAW,IAAA;CACZ;AAED;;GAEG;AACH,oBAAY,UAAU;IACpB,IAAI,IAAA;IACJ,MAAM,IAAA;IACN,MAAM,IAAA;IACN,MAAM,IAAA;CACP"}
|
package/types/src/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { AppConfigurationImporter } from "./appConfigurationImporter";
|
|
|
2
2
|
export { StringSourceOptions, IterableSourceOptions, ReadableStreamSourceOptions, ImportOptions } from "./options";
|
|
3
3
|
export * from "./enums";
|
|
4
4
|
export * from "./errors";
|
|
5
|
-
export { ImportProgress as ImportResult,
|
|
5
|
+
export { ImportProgress as ImportResult, ConfigurationSettingChange } from "./models";
|
|
6
6
|
export { StringConfigurationSettingsSource } from "./settingsImport/stringConfigurationSettingsSource";
|
|
7
7
|
export { ConfigurationSettingsSource } from "./settingsImport/configurationSettingsSource";
|
|
8
8
|
export { ConfigurationChangesSource } from "./settingsImport/configurationChangesSource";
|
package/types/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,EAC3B,aAAa,EACd,MAAM,WAAW,CAAC;AACnB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,cAAc,IAAI,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,EAC3B,aAAa,EACd,MAAM,WAAW,CAAC;AACnB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,cAAc,IAAI,YAAY,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EAAE,iCAAiC,EAAE,MAAM,oDAAoD,CAAC;AACvG,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAC3F,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AACzF,OAAO,EAAE,mCAAmC,EAAE,MAAM,sDAAsD,CAAC;AAC3G,OAAO,EAAE,yCAAyC,EAAE,MAAM,4DAA4D,CAAC"}
|
package/types/src/models.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SecretReferenceValue, ConfigurationSetting, SetConfigurationSettingParam, FeatureFlagValue } from "@azure/app-configuration";
|
|
2
|
+
import { ChangeType } from "./enums";
|
|
2
3
|
/**
|
|
3
4
|
* @internal
|
|
4
5
|
*/
|
|
@@ -40,10 +41,11 @@ export interface KeyLabelLookup {
|
|
|
40
41
|
[label: string]: boolean;
|
|
41
42
|
};
|
|
42
43
|
}
|
|
43
|
-
export interface
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
export interface ConfigurationSettingChange {
|
|
45
|
+
changeType: ChangeType;
|
|
46
|
+
/** The current value of the configuration setting */
|
|
47
|
+
currentValue: ConfigurationSetting<string> | null;
|
|
48
|
+
/** The new value of the configuration setting */
|
|
49
|
+
newValue: SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue> | null;
|
|
48
50
|
}
|
|
49
51
|
//# sourceMappingURL=models.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,4BAA4B,EAC5B,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,4BAA4B,EAC5B,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAElF;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE;QAAE,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CAC3C,CAAA;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,IAAI;IACnB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAClD;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,CAAC,KAAK,EAAE,MAAM,GAAI,OAAO,CAAA;KAC1B,CAAA;CACF;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,UAAU,CAAC;IACvB,qDAAqD;IACrD,YAAY,EAAE,oBAAoB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAClD,iDAAiD;IACjD,QAAQ,EAAE,4BAA4B,CAAC,MAAM,GAAG,gBAAgB,GAAG,oBAAoB,CAAC,GAAG,IAAI,CAAC;CACjG"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ConfigurationSettingsSource } from "./configurationSettingsSource";
|
|
2
|
-
import {
|
|
2
|
+
import { ConfigurationSettingChange } from "../models";
|
|
3
3
|
import { ListConfigurationSettingsOptions } from "@azure/app-configuration";
|
|
4
4
|
/**
|
|
5
5
|
* A ConfigurationSettingsSource that wraps pre-calculated configuration changes.
|
|
@@ -18,10 +18,10 @@ import { ListConfigurationSettingsOptions } from "@azure/app-configuration";
|
|
|
18
18
|
*/
|
|
19
19
|
export declare class ConfigurationChangesSource implements ConfigurationSettingsSource {
|
|
20
20
|
private readonly configurationChanges;
|
|
21
|
-
constructor(configurationChanges:
|
|
21
|
+
constructor(configurationChanges: Array<ConfigurationSettingChange>, filterOptions?: ListConfigurationSettingsOptions);
|
|
22
22
|
/**
|
|
23
23
|
* @inheritdoc
|
|
24
24
|
*/
|
|
25
|
-
GetConfigurationSettings(): Promise<
|
|
25
|
+
GetConfigurationSettings(): Promise<Array<ConfigurationSettingChange>>;
|
|
26
26
|
}
|
|
27
27
|
//# sourceMappingURL=configurationChangesSource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configurationChangesSource.d.ts","sourceRoot":"","sources":["../../../src/settingsImport/configurationChangesSource.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"configurationChangesSource.d.ts","sourceRoot":"","sources":["../../../src/settingsImport/configurationChangesSource.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAG5E;;;;;;;;;;;;;;GAcG;AACH,qBAAa,0BAA2B,YAAW,2BAA2B;IAC5E,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAoC;gBAE7D,oBAAoB,EAAE,KAAK,CAAC,0BAA0B,CAAC,EAAE,aAAa,CAAC,EAAE,gCAAgC;IAOrH;;SAEK;IACQ,wBAAwB,IAAI,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;CAGpF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FeatureFlagValue, ListConfigurationSettingsOptions, SecretReferenceValue, SetConfigurationSettingParam } from "@azure/app-configuration";
|
|
2
|
-
import {
|
|
2
|
+
import { ConfigurationSettingChange } from "../models";
|
|
3
3
|
/**
|
|
4
4
|
* Interface of all ConfigurationSettingsSource
|
|
5
5
|
*/
|
|
@@ -7,9 +7,9 @@ export interface ConfigurationSettingsSource {
|
|
|
7
7
|
/**
|
|
8
8
|
* Get ConfigurationSettings collection from source.
|
|
9
9
|
*
|
|
10
|
-
* @returns Collection of ConfigurationSettings or
|
|
10
|
+
* @returns Collection of ConfigurationSettings or ConfigurationSettingChanges
|
|
11
11
|
*/
|
|
12
|
-
GetConfigurationSettings(): Promise<Array<SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>> |
|
|
12
|
+
GetConfigurationSettings(): Promise<Array<SetConfigurationSettingParam<string | FeatureFlagValue | SecretReferenceValue>> | Array<ConfigurationSettingChange>>;
|
|
13
13
|
/**
|
|
14
14
|
* Get label and prefix filter
|
|
15
15
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configurationSettingsSource.d.ts","sourceRoot":"","sources":["../../../src/settingsImport/configurationSettingsSource.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAChB,gCAAgC,EAChC,oBAAoB,EACpB,4BAA4B,EAC7B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"configurationSettingsSource.d.ts","sourceRoot":"","sources":["../../../src/settingsImport/configurationSettingsSource.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAChB,gCAAgC,EAChC,oBAAoB,EACpB,4BAA4B,EAC7B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,wBAAwB,IAAI,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,MAAM,GAAG,gBAAgB,GAAG,oBAAoB,CAAC,CAAC,GAAG,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAE/J;;;;OAIG;IACF,aAAa,CAAC,EAAE,gCAAgC,CAAC;CACnD"}
|