@mcp-abap-adt/adt-backup 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +64 -0
- package/dist/bin/adt-backup.d.ts +3 -0
- package/dist/bin/adt-backup.d.ts.map +1 -0
- package/dist/bin/adt-backup.js +8 -0
- package/dist/lib/auth/NoopTokenProvider.d.ts +5 -0
- package/dist/lib/auth/NoopTokenProvider.d.ts.map +1 -0
- package/dist/lib/auth/NoopTokenProvider.js +9 -0
- package/dist/lib/auth/createTokenProvider.d.ts +4 -0
- package/dist/lib/auth/createTokenProvider.d.ts.map +1 -0
- package/dist/lib/auth/createTokenProvider.js +22 -0
- package/dist/lib/auth/getSapConfigFromBroker.d.ts +13 -0
- package/dist/lib/auth/getSapConfigFromBroker.d.ts.map +1 -0
- package/dist/lib/auth/getSapConfigFromBroker.js +184 -0
- package/dist/lib/auth/index.d.ts +4 -0
- package/dist/lib/auth/index.d.ts.map +1 -0
- package/dist/lib/auth/index.js +19 -0
- package/dist/lib/backup/backupObject.d.ts +4 -0
- package/dist/lib/backup/backupObject.d.ts.map +1 -0
- package/dist/lib/backup/backupObject.js +166 -0
- package/dist/lib/backup/index.d.ts +5 -0
- package/dist/lib/backup/index.d.ts.map +1 -0
- package/dist/lib/backup/index.js +20 -0
- package/dist/lib/backup/readBasicMetadata.d.ts +7 -0
- package/dist/lib/backup/readBasicMetadata.d.ts.map +1 -0
- package/dist/lib/backup/readBasicMetadata.js +64 -0
- package/dist/lib/backup/readMetadataXmlForType.d.ts +4 -0
- package/dist/lib/backup/readMetadataXmlForType.d.ts.map +1 -0
- package/dist/lib/backup/readMetadataXmlForType.js +100 -0
- package/dist/lib/backup/readSourceText.d.ts +4 -0
- package/dist/lib/backup/readSourceText.d.ts.map +1 -0
- package/dist/lib/backup/readSourceText.js +96 -0
- package/dist/lib/cli/applyLogEnv.d.ts +2 -0
- package/dist/lib/cli/applyLogEnv.d.ts.map +1 -0
- package/dist/lib/cli/applyLogEnv.js +50 -0
- package/dist/lib/cli/createLogger.d.ts +7 -0
- package/dist/lib/cli/createLogger.d.ts.map +1 -0
- package/dist/lib/cli/createLogger.js +30 -0
- package/dist/lib/cli/getVerbosity.d.ts +2 -0
- package/dist/lib/cli/getVerbosity.d.ts.map +1 -0
- package/dist/lib/cli/getVerbosity.js +27 -0
- package/dist/lib/cli/index.d.ts +13 -0
- package/dist/lib/cli/index.d.ts.map +1 -0
- package/dist/lib/cli/index.js +28 -0
- package/dist/lib/cli/isEnvEnabled.d.ts +2 -0
- package/dist/lib/cli/isEnvEnabled.d.ts.map +1 -0
- package/dist/lib/cli/isEnvEnabled.js +10 -0
- package/dist/lib/cli/logVerbose.d.ts +2 -0
- package/dist/lib/cli/logVerbose.d.ts.map +1 -0
- package/dist/lib/cli/logVerbose.js +9 -0
- package/dist/lib/cli/parseArgs.d.ts +2 -0
- package/dist/lib/cli/parseArgs.d.ts.map +1 -0
- package/dist/lib/cli/parseArgs.js +22 -0
- package/dist/lib/cli/redact.d.ts +4 -0
- package/dist/lib/cli/redact.d.ts.map +1 -0
- package/dist/lib/cli/redact.js +75 -0
- package/dist/lib/cli/shouldEnableAdtLogger.d.ts +2 -0
- package/dist/lib/cli/shouldEnableAdtLogger.d.ts.map +1 -0
- package/dist/lib/cli/shouldEnableAdtLogger.js +10 -0
- package/dist/lib/cli/shouldEnableBrokerLogger.d.ts +2 -0
- package/dist/lib/cli/shouldEnableBrokerLogger.d.ts.map +1 -0
- package/dist/lib/cli/shouldEnableBrokerLogger.js +9 -0
- package/dist/lib/cli/shouldEnableConnectionLogger.d.ts +2 -0
- package/dist/lib/cli/shouldEnableConnectionLogger.d.ts.map +1 -0
- package/dist/lib/cli/shouldEnableConnectionLogger.js +7 -0
- package/dist/lib/cli/shouldEnableProviderLogger.d.ts +2 -0
- package/dist/lib/cli/shouldEnableProviderLogger.d.ts.map +1 -0
- package/dist/lib/cli/shouldEnableProviderLogger.js +9 -0
- package/dist/lib/cli/shouldEnableStoreLogger.d.ts +2 -0
- package/dist/lib/cli/shouldEnableStoreLogger.d.ts.map +1 -0
- package/dist/lib/cli/shouldEnableStoreLogger.js +9 -0
- package/dist/lib/cli/usage.d.ts +2 -0
- package/dist/lib/cli/usage.d.ts.map +1 -0
- package/dist/lib/cli/usage.js +187 -0
- package/dist/lib/constants/index.d.ts +3 -0
- package/dist/lib/constants/index.d.ts.map +1 -0
- package/dist/lib/constants/index.js +18 -0
- package/dist/lib/constants/typeOrder.d.ts +3 -0
- package/dist/lib/constants/typeOrder.d.ts.map +1 -0
- package/dist/lib/constants/typeOrder.js +22 -0
- package/dist/lib/constants/xmlParser.d.ts +3 -0
- package/dist/lib/constants/xmlParser.d.ts.map +1 -0
- package/dist/lib/constants/xmlParser.js +8 -0
- package/dist/lib/crypto/computeBackupChecksum.d.ts +3 -0
- package/dist/lib/crypto/computeBackupChecksum.d.ts.map +1 -0
- package/dist/lib/crypto/computeBackupChecksum.js +14 -0
- package/dist/lib/crypto/computeCodeChecksum.d.ts +2 -0
- package/dist/lib/crypto/computeCodeChecksum.d.ts.map +1 -0
- package/dist/lib/crypto/computeCodeChecksum.js +8 -0
- package/dist/lib/crypto/decodeBase64.d.ts +2 -0
- package/dist/lib/crypto/decodeBase64.d.ts.map +1 -0
- package/dist/lib/crypto/decodeBase64.js +6 -0
- package/dist/lib/crypto/encodeBase64.d.ts +2 -0
- package/dist/lib/crypto/encodeBase64.d.ts.map +1 -0
- package/dist/lib/crypto/encodeBase64.js +6 -0
- package/dist/lib/crypto/hashText.d.ts +2 -0
- package/dist/lib/crypto/hashText.d.ts.map +1 -0
- package/dist/lib/crypto/hashText.js +7 -0
- package/dist/lib/crypto/index.d.ts +10 -0
- package/dist/lib/crypto/index.d.ts.map +1 -0
- package/dist/lib/crypto/index.js +25 -0
- package/dist/lib/crypto/stripBackupChecksum.d.ts +3 -0
- package/dist/lib/crypto/stripBackupChecksum.d.ts.map +1 -0
- package/dist/lib/crypto/stripBackupChecksum.js +8 -0
- package/dist/lib/crypto/updateTreeChecksums.d.ts +3 -0
- package/dist/lib/crypto/updateTreeChecksums.d.ts.map +1 -0
- package/dist/lib/crypto/updateTreeChecksums.js +17 -0
- package/dist/lib/crypto/verifyBackupChecksum.d.ts +3 -0
- package/dist/lib/crypto/verifyBackupChecksum.d.ts.map +1 -0
- package/dist/lib/crypto/verifyBackupChecksum.js +13 -0
- package/dist/lib/crypto/verifyTreeChecksums.d.ts +3 -0
- package/dist/lib/crypto/verifyTreeChecksums.d.ts.map +1 -0
- package/dist/lib/crypto/verifyTreeChecksums.js +22 -0
- package/dist/lib/dependencies/collectTreeDependencies.d.ts +4 -0
- package/dist/lib/dependencies/collectTreeDependencies.d.ts.map +1 -0
- package/dist/lib/dependencies/collectTreeDependencies.js +99 -0
- package/dist/lib/index.d.ts +14 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +29 -0
- package/dist/lib/restore/applyTransportRequest.d.ts +2 -0
- package/dist/lib/restore/applyTransportRequest.d.ts.map +1 -0
- package/dist/lib/restore/applyTransportRequest.js +12 -0
- package/dist/lib/restore/buildRestorePlan.d.ts +12 -0
- package/dist/lib/restore/buildRestorePlan.d.ts.map +1 -0
- package/dist/lib/restore/buildRestorePlan.js +46 -0
- package/dist/lib/restore/collectDeletionTargets.d.ts +7 -0
- package/dist/lib/restore/collectDeletionTargets.d.ts.map +1 -0
- package/dist/lib/restore/collectDeletionTargets.js +23 -0
- package/dist/lib/restore/deleteBackupObjects.d.ts +4 -0
- package/dist/lib/restore/deleteBackupObjects.d.ts.map +1 -0
- package/dist/lib/restore/deleteBackupObjects.js +22 -0
- package/dist/lib/restore/index.d.ts +9 -0
- package/dist/lib/restore/index.d.ts.map +1 -0
- package/dist/lib/restore/index.js +24 -0
- package/dist/lib/restore/restoreObject.d.ts +4 -0
- package/dist/lib/restore/restoreObject.d.ts.map +1 -0
- package/dist/lib/restore/restoreObject.js +242 -0
- package/dist/lib/restore/restoreObjects.d.ts +4 -0
- package/dist/lib/restore/restoreObjects.d.ts.map +1 -0
- package/dist/lib/restore/restoreObjects.js +28 -0
- package/dist/lib/restore/restoreTreeBackup.d.ts +4 -0
- package/dist/lib/restore/restoreTreeBackup.d.ts.map +1 -0
- package/dist/lib/restore/restoreTreeBackup.js +69 -0
- package/dist/lib/restore/restoreTreeNode.d.ts +4 -0
- package/dist/lib/restore/restoreTreeNode.d.ts.map +1 -0
- package/dist/lib/restore/restoreTreeNode.js +276 -0
- package/dist/lib/restore/sortByDependencies.d.ts +3 -0
- package/dist/lib/restore/sortByDependencies.d.ts.map +1 -0
- package/dist/lib/restore/sortByDependencies.js +65 -0
- package/dist/lib/restore/sortTreeNodesByDependencies.d.ts +3 -0
- package/dist/lib/restore/sortTreeNodesByDependencies.d.ts.map +1 -0
- package/dist/lib/restore/sortTreeNodesByDependencies.js +101 -0
- package/dist/lib/run.d.ts +2 -0
- package/dist/lib/run.d.ts.map +1 -0
- package/dist/lib/run.js +748 -0
- package/dist/lib/state/index.d.ts +2 -0
- package/dist/lib/state/index.d.ts.map +1 -0
- package/dist/lib/state/index.js +17 -0
- package/dist/lib/state/verbosity.d.ts +4 -0
- package/dist/lib/state/verbosity.d.ts.map +1 -0
- package/dist/lib/state/verbosity.js +6 -0
- package/dist/lib/tree/buildConfigForNode.d.ts +3 -0
- package/dist/lib/tree/buildConfigForNode.d.ts.map +1 -0
- package/dist/lib/tree/buildConfigForNode.js +116 -0
- package/dist/lib/tree/buildPackageBackupTree.d.ts +4 -0
- package/dist/lib/tree/buildPackageBackupTree.d.ts.map +1 -0
- package/dist/lib/tree/buildPackageBackupTree.js +27 -0
- package/dist/lib/tree/buildTreeList.d.ts +13 -0
- package/dist/lib/tree/buildTreeList.d.ts.map +1 -0
- package/dist/lib/tree/buildTreeList.js +19 -0
- package/dist/lib/tree/collectTreeObjects.d.ts +3 -0
- package/dist/lib/tree/collectTreeObjects.d.ts.map +1 -0
- package/dist/lib/tree/collectTreeObjects.js +18 -0
- package/dist/lib/tree/enrichTreeNode.d.ts +4 -0
- package/dist/lib/tree/enrichTreeNode.d.ts.map +1 -0
- package/dist/lib/tree/enrichTreeNode.js +69 -0
- package/dist/lib/tree/findNodeInTree.d.ts +3 -0
- package/dist/lib/tree/findNodeInTree.d.ts.map +1 -0
- package/dist/lib/tree/findNodeInTree.js +30 -0
- package/dist/lib/tree/flattenTree.d.ts +3 -0
- package/dist/lib/tree/flattenTree.d.ts.map +1 -0
- package/dist/lib/tree/flattenTree.js +12 -0
- package/dist/lib/tree/formatTreeListText.d.ts +5 -0
- package/dist/lib/tree/formatTreeListText.d.ts.map +1 -0
- package/dist/lib/tree/formatTreeListText.js +26 -0
- package/dist/lib/tree/getNodeFunctionGroupName.d.ts +3 -0
- package/dist/lib/tree/getNodeFunctionGroupName.d.ts.map +1 -0
- package/dist/lib/tree/getNodeFunctionGroupName.js +12 -0
- package/dist/lib/tree/getNodeObjectId.d.ts +3 -0
- package/dist/lib/tree/getNodeObjectId.d.ts.map +1 -0
- package/dist/lib/tree/getNodeObjectId.js +9 -0
- package/dist/lib/tree/getNodeObjectSpec.d.ts +3 -0
- package/dist/lib/tree/getNodeObjectSpec.d.ts.map +1 -0
- package/dist/lib/tree/getNodeObjectSpec.js +21 -0
- package/dist/lib/tree/index.d.ts +13 -0
- package/dist/lib/tree/index.d.ts.map +1 -0
- package/dist/lib/tree/index.js +28 -0
- package/dist/lib/tree/isRestoreImplemented.d.ts +3 -0
- package/dist/lib/tree/isRestoreImplemented.d.ts.map +1 -0
- package/dist/lib/tree/isRestoreImplemented.js +27 -0
- package/dist/lib/tree/mapAdtTypeToSupported.d.ts +3 -0
- package/dist/lib/tree/mapAdtTypeToSupported.d.ts.map +1 -0
- package/dist/lib/tree/mapAdtTypeToSupported.js +75 -0
- package/dist/lib/tree/readPayloadForType.d.ts +7 -0
- package/dist/lib/tree/readPayloadForType.d.ts.map +1 -0
- package/dist/lib/tree/readPayloadForType.js +38 -0
- package/dist/lib/types.d.ts +60 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/utils/applyConfigName.d.ts +3 -0
- package/dist/lib/utils/applyConfigName.d.ts.map +1 -0
- package/dist/lib/utils/applyConfigName.js +67 -0
- package/dist/lib/utils/asArray.d.ts +2 -0
- package/dist/lib/utils/asArray.d.ts.map +1 -0
- package/dist/lib/utils/asArray.js +9 -0
- package/dist/lib/utils/asConfig.d.ts +3 -0
- package/dist/lib/utils/asConfig.d.ts.map +1 -0
- package/dist/lib/utils/asConfig.js +6 -0
- package/dist/lib/utils/diffAttributes.d.ts +17 -0
- package/dist/lib/utils/diffAttributes.d.ts.map +1 -0
- package/dist/lib/utils/diffAttributes.js +27 -0
- package/dist/lib/utils/diffUnified.d.ts +4 -0
- package/dist/lib/utils/diffUnified.d.ts.map +1 -0
- package/dist/lib/utils/diffUnified.js +142 -0
- package/dist/lib/utils/ensureDescription.d.ts +3 -0
- package/dist/lib/utils/ensureDescription.d.ts.map +1 -0
- package/dist/lib/utils/ensureDescription.js +9 -0
- package/dist/lib/utils/formatObjectSpec.d.ts +3 -0
- package/dist/lib/utils/formatObjectSpec.d.ts.map +1 -0
- package/dist/lib/utils/formatObjectSpec.js +9 -0
- package/dist/lib/utils/index.d.ts +12 -0
- package/dist/lib/utils/index.d.ts.map +1 -0
- package/dist/lib/utils/index.js +27 -0
- package/dist/lib/utils/normalizeType.d.ts +3 -0
- package/dist/lib/utils/normalizeType.d.ts.map +1 -0
- package/dist/lib/utils/normalizeType.js +43 -0
- package/dist/lib/utils/objectId.d.ts +3 -0
- package/dist/lib/utils/objectId.d.ts.map +1 -0
- package/dist/lib/utils/objectId.js +9 -0
- package/dist/lib/utils/parseBehaviorDefinitionFromClass.d.ts +2 -0
- package/dist/lib/utils/parseBehaviorDefinitionFromClass.d.ts.map +1 -0
- package/dist/lib/utils/parseBehaviorDefinitionFromClass.js +10 -0
- package/dist/lib/utils/parseObjectSpec.d.ts +3 -0
- package/dist/lib/utils/parseObjectSpec.d.ts.map +1 -0
- package/dist/lib/utils/parseObjectSpec.js +27 -0
- package/dist/lib/utils/responseToText.d.ts +4 -0
- package/dist/lib/utils/responseToText.d.ts.map +1 -0
- package/dist/lib/utils/responseToText.js +11 -0
- package/dist/lib/utils/toBackupConfig.d.ts +3 -0
- package/dist/lib/utils/toBackupConfig.d.ts.map +1 -0
- package/dist/lib/utils/toBackupConfig.js +6 -0
- package/dist/lib/verify/collectBackupNodes.d.ts +3 -0
- package/dist/lib/verify/collectBackupNodes.d.ts.map +1 -0
- package/dist/lib/verify/collectBackupNodes.js +13 -0
- package/dist/lib/verify/findOtherType.d.ts +4 -0
- package/dist/lib/verify/findOtherType.d.ts.map +1 -0
- package/dist/lib/verify/findOtherType.js +41 -0
- package/dist/lib/verify/formatVerifyResultsText.d.ts +3 -0
- package/dist/lib/verify/formatVerifyResultsText.d.ts.map +1 -0
- package/dist/lib/verify/formatVerifyResultsText.js +30 -0
- package/dist/lib/verify/getExpectedPackage.d.ts +3 -0
- package/dist/lib/verify/getExpectedPackage.d.ts.map +1 -0
- package/dist/lib/verify/getExpectedPackage.js +14 -0
- package/dist/lib/verify/index.d.ts +8 -0
- package/dist/lib/verify/index.d.ts.map +1 -0
- package/dist/lib/verify/index.js +23 -0
- package/dist/lib/verify/types.d.ts +23 -0
- package/dist/lib/verify/types.d.ts.map +1 -0
- package/dist/lib/verify/types.js +2 -0
- package/dist/lib/verify/verifyBackup.d.ts +10 -0
- package/dist/lib/verify/verifyBackup.d.ts.map +1 -0
- package/dist/lib/verify/verifyBackup.js +54 -0
- package/dist/lib/verify/verifyObjectInSystem.d.ts +5 -0
- package/dist/lib/verify/verifyObjectInSystem.d.ts.map +1 -0
- package/dist/lib/verify/verifyObjectInSystem.js +136 -0
- package/dist/lib/xml/extractMetadata.d.ts +5 -0
- package/dist/lib/xml/extractMetadata.d.ts.map +1 -0
- package/dist/lib/xml/extractMetadata.js +13 -0
- package/dist/lib/xml/findAttribute.d.ts +3 -0
- package/dist/lib/xml/findAttribute.d.ts.map +1 -0
- package/dist/lib/xml/findAttribute.js +29 -0
- package/dist/lib/xml/findNode.d.ts +3 -0
- package/dist/lib/xml/findNode.d.ts.map +1 -0
- package/dist/lib/xml/findNode.js +30 -0
- package/dist/lib/xml/findNodeValue.d.ts +3 -0
- package/dist/lib/xml/findNodeValue.d.ts.map +1 -0
- package/dist/lib/xml/findNodeValue.js +11 -0
- package/dist/lib/xml/findPackageName.d.ts +3 -0
- package/dist/lib/xml/findPackageName.d.ts.map +1 -0
- package/dist/lib/xml/findPackageName.js +35 -0
- package/dist/lib/xml/flattenXmlAttributes.d.ts +2 -0
- package/dist/lib/xml/flattenXmlAttributes.d.ts.map +1 -0
- package/dist/lib/xml/flattenXmlAttributes.js +82 -0
- package/dist/lib/xml/getAttribute.d.ts +3 -0
- package/dist/lib/xml/getAttribute.d.ts.map +1 -0
- package/dist/lib/xml/getAttribute.js +12 -0
- package/dist/lib/xml/getNodeAttribute.d.ts +3 -0
- package/dist/lib/xml/getNodeAttribute.d.ts.map +1 -0
- package/dist/lib/xml/getNodeAttribute.js +11 -0
- package/dist/lib/xml/getNodeDescription.d.ts +3 -0
- package/dist/lib/xml/getNodeDescription.d.ts.map +1 -0
- package/dist/lib/xml/getNodeDescription.js +12 -0
- package/dist/lib/xml/getNodeName.d.ts +3 -0
- package/dist/lib/xml/getNodeName.d.ts.map +1 -0
- package/dist/lib/xml/getNodeName.js +12 -0
- package/dist/lib/xml/getNodeType.d.ts +3 -0
- package/dist/lib/xml/getNodeType.d.ts.map +1 -0
- package/dist/lib/xml/getNodeType.js +12 -0
- package/dist/lib/xml/index.d.ts +19 -0
- package/dist/lib/xml/index.d.ts.map +1 -0
- package/dist/lib/xml/index.js +34 -0
- package/dist/lib/xml/isNodeObject.d.ts +3 -0
- package/dist/lib/xml/isNodeObject.d.ts.map +1 -0
- package/dist/lib/xml/isNodeObject.js +12 -0
- package/dist/lib/xml/parseBehaviorDefinitionConfig.d.ts +3 -0
- package/dist/lib/xml/parseBehaviorDefinitionConfig.d.ts.map +1 -0
- package/dist/lib/xml/parseBehaviorDefinitionConfig.js +40 -0
- package/dist/lib/xml/parseClassConfig.d.ts +3 -0
- package/dist/lib/xml/parseClassConfig.d.ts.map +1 -0
- package/dist/lib/xml/parseClassConfig.js +59 -0
- package/dist/lib/xml/parseDataElementConfig.d.ts +3 -0
- package/dist/lib/xml/parseDataElementConfig.d.ts.map +1 -0
- package/dist/lib/xml/parseDataElementConfig.js +67 -0
- package/dist/lib/xml/parseDomainConfig.d.ts +3 -0
- package/dist/lib/xml/parseDomainConfig.d.ts.map +1 -0
- package/dist/lib/xml/parseDomainConfig.js +66 -0
- package/dist/lib/xml/parseEnhancementConfig.d.ts +3 -0
- package/dist/lib/xml/parseEnhancementConfig.d.ts.map +1 -0
- package/dist/lib/xml/parseEnhancementConfig.js +73 -0
- package/dist/lib/xml/parsePackageConfig.d.ts +3 -0
- package/dist/lib/xml/parsePackageConfig.d.ts.map +1 -0
- package/dist/lib/xml/parsePackageConfig.js +48 -0
- package/dist/lib/xml/parseTableTypeConfig.d.ts +3 -0
- package/dist/lib/xml/parseTableTypeConfig.d.ts.map +1 -0
- package/dist/lib/xml/parseTableTypeConfig.js +64 -0
- package/dist/lib/xml/readAttr.d.ts +3 -0
- package/dist/lib/xml/readAttr.d.ts.map +1 -0
- package/dist/lib/xml/readAttr.js +16 -0
- package/dist/lib/xml/toBoolean.d.ts +2 -0
- package/dist/lib/xml/toBoolean.d.ts.map +1 -0
- package/dist/lib/xml/toBoolean.js +15 -0
- package/dist/lib/xml/toNumber.d.ts +2 -0
- package/dist/lib/xml/toNumber.d.ts.map +1 -0
- package/dist/lib/xml/toNumber.js +10 -0
- package/package.json +64 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.restoreTreeBackup = restoreTreeBackup;
|
|
4
|
+
const logVerbose_1 = require("../cli/logVerbose");
|
|
5
|
+
const typeOrder_1 = require("../constants/typeOrder");
|
|
6
|
+
const flattenTree_1 = require("../tree/flattenTree");
|
|
7
|
+
const getNodeObjectId_1 = require("../tree/getNodeObjectId");
|
|
8
|
+
const restoreTreeNode_1 = require("./restoreTreeNode");
|
|
9
|
+
const sortTreeNodesByDependencies_1 = require("./sortTreeNodesByDependencies");
|
|
10
|
+
async function restoreTreeBackup(client, root, mode, activate, transportRequest, restoreIds, restoreActions, activateOnCreate = true, softwareComponent) {
|
|
11
|
+
const allNodes = (0, flattenTree_1.flattenTree)(root).filter((node) => node.type && node.restoreStatus === 'ok');
|
|
12
|
+
const nodes = restoreIds
|
|
13
|
+
? allNodes.filter((node) => {
|
|
14
|
+
const id = (0, getNodeObjectId_1.getNodeObjectId)(node);
|
|
15
|
+
return id ? restoreIds.has(id) : false;
|
|
16
|
+
})
|
|
17
|
+
: allNodes;
|
|
18
|
+
// Separate packages from non-packages
|
|
19
|
+
// Packages keep their tree order (parent before children)
|
|
20
|
+
const packageNodes = nodes.filter((node) => node.type === 'package');
|
|
21
|
+
const nonPackageNodes = nodes.filter((node) => node.type !== 'package');
|
|
22
|
+
// Sort non-packages by dependencies or typeOrder
|
|
23
|
+
const priority = new Map(typeOrder_1.typeOrder.map((type, index) => [type, index]));
|
|
24
|
+
const hasDependencies = nonPackageNodes.some((node) => Array.isArray(node.usedBy) && node.usedBy.length > 0);
|
|
25
|
+
const sortedNonPackages = hasDependencies
|
|
26
|
+
? (0, sortTreeNodesByDependencies_1.sortTreeNodesByDependencies)(nonPackageNodes)
|
|
27
|
+
: nonPackageNodes.sort((a, b) => {
|
|
28
|
+
const aOrder = a.type ? (priority.get(a.type) ?? 999) : 999;
|
|
29
|
+
const bOrder = b.type ? (priority.get(b.type) ?? 999) : 999;
|
|
30
|
+
return aOrder - bOrder || a.name.localeCompare(b.name);
|
|
31
|
+
});
|
|
32
|
+
// Packages first (in tree order), then sorted non-packages
|
|
33
|
+
const orderedNodes = [...packageNodes, ...sortedNonPackages];
|
|
34
|
+
// Collect package names from backup tree for inheritance logic
|
|
35
|
+
const backupPackageNames = new Set(packageNodes.map((node) => node.name));
|
|
36
|
+
(0, logVerbose_1.logVerbose)(2, `Restoring ${orderedNodes.length} node(s) from tree (mode=${mode}, activate=${activate})`);
|
|
37
|
+
(0, logVerbose_1.logVerbose)(2, ` Packages: ${packageNodes.length}, Other objects: ${sortedNonPackages.length}`);
|
|
38
|
+
const activationList = [];
|
|
39
|
+
for (const node of orderedNodes) {
|
|
40
|
+
(0, logVerbose_1.logVerbose)(3, `Restore ${node.type}:${node.name}`);
|
|
41
|
+
const nodeId = (0, getNodeObjectId_1.getNodeObjectId)(node);
|
|
42
|
+
const nodeMode = mode === 'upsert' && nodeId && restoreActions?.has(nodeId)
|
|
43
|
+
? restoreActions.get(nodeId)
|
|
44
|
+
: mode;
|
|
45
|
+
const shouldActivate = nodeMode === 'create' ? activateOnCreate : activate;
|
|
46
|
+
const isPackage = node.type === 'package';
|
|
47
|
+
// Defer activation for non-package objects if activation is requested
|
|
48
|
+
const effectiveActivate = isPackage ? shouldActivate : false;
|
|
49
|
+
if (nodeMode === 'upsert') {
|
|
50
|
+
try {
|
|
51
|
+
await (0, restoreTreeNode_1.restoreTreeNode)(client, node, 'create', effectiveActivate, transportRequest, softwareComponent, backupPackageNames);
|
|
52
|
+
}
|
|
53
|
+
catch (_error) {
|
|
54
|
+
await (0, restoreTreeNode_1.restoreTreeNode)(client, node, 'update', effectiveActivate, transportRequest, softwareComponent, backupPackageNames);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
await (0, restoreTreeNode_1.restoreTreeNode)(client, node, nodeMode || mode, effectiveActivate, transportRequest, softwareComponent, backupPackageNames);
|
|
59
|
+
}
|
|
60
|
+
if (!isPackage && shouldActivate && node.adtType) {
|
|
61
|
+
activationList.push({ name: node.name, type: node.adtType });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (activationList.length > 0) {
|
|
65
|
+
(0, logVerbose_1.logVerbose)(2, `Activating ${activationList.length} object(s)...`);
|
|
66
|
+
// Pass true for preauditRequested to check before activating
|
|
67
|
+
await client.getUtils().activateObjectsGroup(activationList, true);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AdtClient } from '@mcp-abap-adt/adt-clients';
|
|
2
|
+
import type { BackupTreeNode, RestoreMode } from '../types';
|
|
3
|
+
export declare function restoreTreeNode(client: AdtClient, node: BackupTreeNode, mode: RestoreMode, activate: boolean, transportRequest?: string, softwareComponentOverride?: string, backupPackageNames?: Set<string>): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=restoreTreeNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restoreTreeNode.d.ts","sourceRoot":"","sources":["../../../src/lib/restore/restoreTreeNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAkBV,MAAM,2BAA2B,CAAC;AAGnC,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5D,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,OAAO,EACjB,gBAAgB,CAAC,EAAE,MAAM,EACzB,yBAAyB,CAAC,EAAE,MAAM,EAClC,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC,CAiUf"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.restoreTreeNode = restoreTreeNode;
|
|
4
|
+
const logVerbose_1 = require("../cli/logVerbose");
|
|
5
|
+
const decodeBase64_1 = require("../crypto/decodeBase64");
|
|
6
|
+
const asConfig_1 = require("../utils/asConfig");
|
|
7
|
+
const ensureDescription_1 = require("../utils/ensureDescription");
|
|
8
|
+
const applyTransportRequest_1 = require("./applyTransportRequest");
|
|
9
|
+
async function restoreTreeNode(client, node, mode, activate, transportRequest, softwareComponentOverride, backupPackageNames) {
|
|
10
|
+
if (!node.type || node.restoreStatus !== 'ok') {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const config = (0, applyTransportRequest_1.applyTransportRequest)((0, ensureDescription_1.ensureDescription)(node.config || {}, node.name), transportRequest);
|
|
14
|
+
const payload = node.codeBase64 ? (0, decodeBase64_1.decodeBase64)(node.codeBase64) : undefined;
|
|
15
|
+
const options = {
|
|
16
|
+
activateOnCreate: activate,
|
|
17
|
+
activateOnUpdate: activate,
|
|
18
|
+
};
|
|
19
|
+
try {
|
|
20
|
+
switch (node.type) {
|
|
21
|
+
case 'package': {
|
|
22
|
+
const pkgConfig = (0, asConfig_1.asConfig)(config);
|
|
23
|
+
// Remove responsible field - let system use current user
|
|
24
|
+
// (backup might have user that doesn't exist in target system)
|
|
25
|
+
if (pkgConfig.responsible) {
|
|
26
|
+
delete pkgConfig.responsible;
|
|
27
|
+
}
|
|
28
|
+
// Check if this package's superPackage is within our backup tree
|
|
29
|
+
const superPackageInBackup = pkgConfig.superPackage &&
|
|
30
|
+
backupPackageNames?.has(pkgConfig.superPackage);
|
|
31
|
+
(0, logVerbose_1.logVerbose)(3, `Package ${node.name}: superPackage=${pkgConfig.superPackage}, softwareComponent=${pkgConfig.softwareComponent}, superPackageInBackup=${superPackageInBackup}`);
|
|
32
|
+
// Set softwareComponent for all packages
|
|
33
|
+
// Priority: CLI override > config value > default 'ZLOCAL'
|
|
34
|
+
// For sub-packages, use CLI override to ensure consistency with parent
|
|
35
|
+
if (softwareComponentOverride) {
|
|
36
|
+
pkgConfig.softwareComponent = softwareComponentOverride;
|
|
37
|
+
}
|
|
38
|
+
else if (!pkgConfig.softwareComponent) {
|
|
39
|
+
pkgConfig.softwareComponent = 'ZLOCAL';
|
|
40
|
+
}
|
|
41
|
+
(0, logVerbose_1.logVerbose)(3, `Package ${node.name}: final softwareComponent=${pkgConfig.softwareComponent}`);
|
|
42
|
+
if (mode !== 'update') {
|
|
43
|
+
await client.getPackage().create(pkgConfig, options);
|
|
44
|
+
}
|
|
45
|
+
if (mode !== 'create') {
|
|
46
|
+
await client.getPackage().update(pkgConfig, options);
|
|
47
|
+
}
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
case 'domain': {
|
|
51
|
+
if (mode !== 'update') {
|
|
52
|
+
await client
|
|
53
|
+
.getDomain()
|
|
54
|
+
.create((0, asConfig_1.asConfig)(config), options);
|
|
55
|
+
}
|
|
56
|
+
if (mode !== 'create') {
|
|
57
|
+
await client
|
|
58
|
+
.getDomain()
|
|
59
|
+
.update((0, asConfig_1.asConfig)(config), options);
|
|
60
|
+
}
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
case 'dataElement': {
|
|
64
|
+
if (mode !== 'update') {
|
|
65
|
+
await client
|
|
66
|
+
.getDataElement()
|
|
67
|
+
.create((0, asConfig_1.asConfig)(config), options);
|
|
68
|
+
}
|
|
69
|
+
if (mode !== 'create') {
|
|
70
|
+
await client
|
|
71
|
+
.getDataElement()
|
|
72
|
+
.update((0, asConfig_1.asConfig)(config), options);
|
|
73
|
+
}
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
case 'structure': {
|
|
77
|
+
if (mode !== 'update') {
|
|
78
|
+
await client
|
|
79
|
+
.getStructure()
|
|
80
|
+
.create((0, asConfig_1.asConfig)(config), options);
|
|
81
|
+
}
|
|
82
|
+
if (payload) {
|
|
83
|
+
await client.getStructure().update((0, asConfig_1.asConfig)({
|
|
84
|
+
...config,
|
|
85
|
+
ddlCode: payload,
|
|
86
|
+
}), options);
|
|
87
|
+
}
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
case 'table': {
|
|
91
|
+
if (mode !== 'update') {
|
|
92
|
+
await client
|
|
93
|
+
.getTable()
|
|
94
|
+
.create((0, asConfig_1.asConfig)(config), options);
|
|
95
|
+
}
|
|
96
|
+
if (payload) {
|
|
97
|
+
await client
|
|
98
|
+
.getTable()
|
|
99
|
+
.update((0, asConfig_1.asConfig)({ ...config, ddlCode: payload }), options);
|
|
100
|
+
}
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
case 'view': {
|
|
104
|
+
if (mode !== 'update') {
|
|
105
|
+
await client.getView().create((0, asConfig_1.asConfig)(config), options);
|
|
106
|
+
}
|
|
107
|
+
if (payload) {
|
|
108
|
+
await client
|
|
109
|
+
.getView()
|
|
110
|
+
.update((0, asConfig_1.asConfig)({ ...config, ddlSource: payload }), options);
|
|
111
|
+
}
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
case 'class': {
|
|
115
|
+
if (mode !== 'update') {
|
|
116
|
+
await client
|
|
117
|
+
.getClass()
|
|
118
|
+
.create((0, asConfig_1.asConfig)(config), options);
|
|
119
|
+
}
|
|
120
|
+
if (payload) {
|
|
121
|
+
await client.getClass().update((0, asConfig_1.asConfig)({
|
|
122
|
+
...config,
|
|
123
|
+
sourceCode: payload,
|
|
124
|
+
}), options);
|
|
125
|
+
}
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
case 'interface': {
|
|
129
|
+
if (mode !== 'update') {
|
|
130
|
+
await client
|
|
131
|
+
.getInterface()
|
|
132
|
+
.create((0, asConfig_1.asConfig)(config), options);
|
|
133
|
+
}
|
|
134
|
+
if (payload) {
|
|
135
|
+
await client.getInterface().update((0, asConfig_1.asConfig)({
|
|
136
|
+
...config,
|
|
137
|
+
sourceCode: payload,
|
|
138
|
+
}), options);
|
|
139
|
+
}
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
case 'program': {
|
|
143
|
+
if (mode !== 'update') {
|
|
144
|
+
await client
|
|
145
|
+
.getProgram()
|
|
146
|
+
.create((0, asConfig_1.asConfig)(config), options);
|
|
147
|
+
}
|
|
148
|
+
if (payload) {
|
|
149
|
+
await client.getProgram().update((0, asConfig_1.asConfig)({
|
|
150
|
+
...config,
|
|
151
|
+
sourceCode: payload,
|
|
152
|
+
}), options);
|
|
153
|
+
}
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
case 'functionGroup': {
|
|
157
|
+
if (mode !== 'update') {
|
|
158
|
+
await client
|
|
159
|
+
.getFunctionGroup()
|
|
160
|
+
.create((0, asConfig_1.asConfig)(config), options);
|
|
161
|
+
}
|
|
162
|
+
if (mode !== 'create') {
|
|
163
|
+
await client
|
|
164
|
+
.getFunctionGroup()
|
|
165
|
+
.update((0, asConfig_1.asConfig)(config), options);
|
|
166
|
+
}
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
case 'functionModule': {
|
|
170
|
+
if (mode !== 'update') {
|
|
171
|
+
await client
|
|
172
|
+
.getFunctionModule()
|
|
173
|
+
.create((0, asConfig_1.asConfig)(config), options);
|
|
174
|
+
}
|
|
175
|
+
if (payload) {
|
|
176
|
+
await client.getFunctionModule().update((0, asConfig_1.asConfig)({
|
|
177
|
+
...config,
|
|
178
|
+
sourceCode: payload,
|
|
179
|
+
}), options);
|
|
180
|
+
}
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
case 'serviceDefinition': {
|
|
184
|
+
if (mode !== 'update') {
|
|
185
|
+
await client
|
|
186
|
+
.getServiceDefinition()
|
|
187
|
+
.create((0, asConfig_1.asConfig)(config), options);
|
|
188
|
+
}
|
|
189
|
+
if (payload) {
|
|
190
|
+
await client.getServiceDefinition().update((0, asConfig_1.asConfig)({
|
|
191
|
+
...config,
|
|
192
|
+
sourceCode: payload,
|
|
193
|
+
}), options);
|
|
194
|
+
}
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
case 'metadataExtension': {
|
|
198
|
+
if (mode !== 'update') {
|
|
199
|
+
await client
|
|
200
|
+
.getMetadataExtension()
|
|
201
|
+
.create((0, asConfig_1.asConfig)(config), options);
|
|
202
|
+
}
|
|
203
|
+
if (payload) {
|
|
204
|
+
await client.getMetadataExtension().update((0, asConfig_1.asConfig)({
|
|
205
|
+
...config,
|
|
206
|
+
sourceCode: payload,
|
|
207
|
+
}), options);
|
|
208
|
+
}
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
case 'behaviorDefinition': {
|
|
212
|
+
if (mode !== 'update') {
|
|
213
|
+
await client
|
|
214
|
+
.getBehaviorDefinition()
|
|
215
|
+
.create((0, asConfig_1.asConfig)(config), options);
|
|
216
|
+
}
|
|
217
|
+
if (payload) {
|
|
218
|
+
await client.getBehaviorDefinition().update((0, asConfig_1.asConfig)({
|
|
219
|
+
...config,
|
|
220
|
+
sourceCode: payload,
|
|
221
|
+
}), options);
|
|
222
|
+
}
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
case 'behaviorImplementation': {
|
|
226
|
+
if (mode !== 'update') {
|
|
227
|
+
await client
|
|
228
|
+
.getBehaviorImplementation()
|
|
229
|
+
.create((0, asConfig_1.asConfig)(config), options);
|
|
230
|
+
}
|
|
231
|
+
if (payload) {
|
|
232
|
+
await client.getBehaviorImplementation().update((0, asConfig_1.asConfig)({
|
|
233
|
+
...config,
|
|
234
|
+
sourceCode: payload,
|
|
235
|
+
}), options);
|
|
236
|
+
}
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
case 'enhancement': {
|
|
240
|
+
if (mode !== 'update') {
|
|
241
|
+
await client
|
|
242
|
+
.getEnhancement()
|
|
243
|
+
.create((0, asConfig_1.asConfig)(config), options);
|
|
244
|
+
}
|
|
245
|
+
if (payload) {
|
|
246
|
+
await client.getEnhancement().update((0, asConfig_1.asConfig)({
|
|
247
|
+
...config,
|
|
248
|
+
sourceCode: payload,
|
|
249
|
+
}), options);
|
|
250
|
+
}
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
case 'tableType': {
|
|
254
|
+
if (mode !== 'update') {
|
|
255
|
+
await client
|
|
256
|
+
.getTableType()
|
|
257
|
+
.create((0, asConfig_1.asConfig)(config), options);
|
|
258
|
+
}
|
|
259
|
+
if (mode !== 'create') {
|
|
260
|
+
await client
|
|
261
|
+
.getTableType()
|
|
262
|
+
.update((0, asConfig_1.asConfig)(config), options);
|
|
263
|
+
}
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
if (error.response?.data) {
|
|
270
|
+
console.error(`Error restoring ${node.type}:${node.name}:`, typeof error.response.data === 'string'
|
|
271
|
+
? error.response.data
|
|
272
|
+
: JSON.stringify(error.response.data, null, 2));
|
|
273
|
+
}
|
|
274
|
+
throw error;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortByDependencies.d.ts","sourceRoot":"","sources":["../../../src/lib/restore/sortByDependencies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAsE1E"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sortByDependencies = sortByDependencies;
|
|
4
|
+
const typeOrder_1 = require("../constants/typeOrder");
|
|
5
|
+
function sortByDependencies(objects) {
|
|
6
|
+
const idToObject = new Map(objects.map((obj) => [obj.id, obj]));
|
|
7
|
+
const dependencies = new Map();
|
|
8
|
+
const indegree = new Map();
|
|
9
|
+
for (const obj of objects) {
|
|
10
|
+
const deps = new Set((obj.dependsOn || []).filter((dep) => idToObject.has(dep)));
|
|
11
|
+
dependencies.set(obj.id, deps);
|
|
12
|
+
indegree.set(obj.id, deps.size);
|
|
13
|
+
}
|
|
14
|
+
const priority = new Map(typeOrder_1.typeOrder.map((type, index) => [type, index]));
|
|
15
|
+
const queue = objects
|
|
16
|
+
.filter((obj) => (indegree.get(obj.id) || 0) === 0)
|
|
17
|
+
.sort((a, b) => {
|
|
18
|
+
const aOrder = priority.get(a.type) ?? 999;
|
|
19
|
+
const bOrder = priority.get(b.type) ?? 999;
|
|
20
|
+
return aOrder - bOrder || a.id.localeCompare(b.id);
|
|
21
|
+
})
|
|
22
|
+
.map((obj) => obj.id);
|
|
23
|
+
const result = [];
|
|
24
|
+
const visited = new Set();
|
|
25
|
+
while (queue.length > 0) {
|
|
26
|
+
const id = queue.shift();
|
|
27
|
+
if (!id) {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const obj = idToObject.get(id);
|
|
31
|
+
if (!obj || visited.has(id)) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
visited.add(id);
|
|
35
|
+
result.push(obj);
|
|
36
|
+
for (const [otherId, deps] of dependencies.entries()) {
|
|
37
|
+
if (!deps.has(id)) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
deps.delete(id);
|
|
41
|
+
const nextIndegree = (indegree.get(otherId) || 0) - 1;
|
|
42
|
+
indegree.set(otherId, nextIndegree);
|
|
43
|
+
if (nextIndegree === 0) {
|
|
44
|
+
queue.push(otherId);
|
|
45
|
+
queue.sort((aId, bId) => {
|
|
46
|
+
const aObj = idToObject.get(aId);
|
|
47
|
+
const bObj = idToObject.get(bId);
|
|
48
|
+
const aOrder = aObj ? (priority.get(aObj.type) ?? 999) : 999;
|
|
49
|
+
const bOrder = bObj ? (priority.get(bObj.type) ?? 999) : 999;
|
|
50
|
+
return aOrder - bOrder || aId.localeCompare(bId);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (result.length !== objects.length) {
|
|
56
|
+
const remaining = objects.filter((obj) => !visited.has(obj.id));
|
|
57
|
+
remaining.sort((a, b) => {
|
|
58
|
+
const aOrder = priority.get(a.type) ?? 999;
|
|
59
|
+
const bOrder = priority.get(b.type) ?? 999;
|
|
60
|
+
return aOrder - bOrder || a.id.localeCompare(b.id);
|
|
61
|
+
});
|
|
62
|
+
result.push(...remaining);
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortTreeNodesByDependencies.d.ts","sourceRoot":"","sources":["../../../src/lib/restore/sortTreeNodesByDependencies.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI/C,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,cAAc,EAAE,GACtB,cAAc,EAAE,CAqGlB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sortTreeNodesByDependencies = sortTreeNodesByDependencies;
|
|
4
|
+
const typeOrder_1 = require("../constants/typeOrder");
|
|
5
|
+
const getNodeObjectId_1 = require("../tree/getNodeObjectId");
|
|
6
|
+
const objectId_1 = require("../utils/objectId");
|
|
7
|
+
const parseObjectSpec_1 = require("../utils/parseObjectSpec");
|
|
8
|
+
function sortTreeNodesByDependencies(nodes) {
|
|
9
|
+
const idToNode = new Map();
|
|
10
|
+
for (const node of nodes) {
|
|
11
|
+
const id = (0, getNodeObjectId_1.getNodeObjectId)(node);
|
|
12
|
+
if (id) {
|
|
13
|
+
idToNode.set(id, node);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const dependencies = new Map();
|
|
17
|
+
for (const id of idToNode.keys()) {
|
|
18
|
+
dependencies.set(id, new Set());
|
|
19
|
+
}
|
|
20
|
+
for (const node of nodes) {
|
|
21
|
+
const currentId = (0, getNodeObjectId_1.getNodeObjectId)(node);
|
|
22
|
+
if (!currentId || !node.usedBy) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
for (const usedBySpec of node.usedBy) {
|
|
26
|
+
let usedById;
|
|
27
|
+
try {
|
|
28
|
+
const spec = (0, parseObjectSpec_1.parseObjectSpec)(usedBySpec);
|
|
29
|
+
usedById = (0, objectId_1.objectId)(spec);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (!idToNode.has(usedById) || usedById === currentId) {
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const deps = dependencies.get(usedById);
|
|
38
|
+
if (deps) {
|
|
39
|
+
deps.add(currentId);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const indegree = new Map();
|
|
44
|
+
for (const [id, deps] of dependencies.entries()) {
|
|
45
|
+
indegree.set(id, deps.size);
|
|
46
|
+
}
|
|
47
|
+
const priority = new Map(typeOrder_1.typeOrder.map((type, index) => [type, index]));
|
|
48
|
+
const queue = Array.from(idToNode.entries())
|
|
49
|
+
.filter(([id]) => (indegree.get(id) || 0) === 0)
|
|
50
|
+
.sort(([, a], [, b]) => {
|
|
51
|
+
const aOrder = a.type ? (priority.get(a.type) ?? 999) : 999;
|
|
52
|
+
const bOrder = b.type ? (priority.get(b.type) ?? 999) : 999;
|
|
53
|
+
return aOrder - bOrder || a.name.localeCompare(b.name);
|
|
54
|
+
})
|
|
55
|
+
.map(([id]) => id);
|
|
56
|
+
const result = [];
|
|
57
|
+
const visited = new Set();
|
|
58
|
+
while (queue.length > 0) {
|
|
59
|
+
const id = queue.shift();
|
|
60
|
+
if (!id) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const node = idToNode.get(id);
|
|
64
|
+
if (!node || visited.has(id)) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
visited.add(id);
|
|
68
|
+
result.push(node);
|
|
69
|
+
for (const [otherId, deps] of dependencies.entries()) {
|
|
70
|
+
if (!deps.has(id)) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
deps.delete(id);
|
|
74
|
+
const nextIndegree = (indegree.get(otherId) || 0) - 1;
|
|
75
|
+
indegree.set(otherId, nextIndegree);
|
|
76
|
+
if (nextIndegree === 0) {
|
|
77
|
+
queue.push(otherId);
|
|
78
|
+
queue.sort((aId, bId) => {
|
|
79
|
+
const aNode = idToNode.get(aId);
|
|
80
|
+
const bNode = idToNode.get(bId);
|
|
81
|
+
const aOrder = aNode?.type ? (priority.get(aNode.type) ?? 999) : 999;
|
|
82
|
+
const bOrder = bNode?.type ? (priority.get(bNode.type) ?? 999) : 999;
|
|
83
|
+
return aOrder - bOrder || aId.localeCompare(bId);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (result.length !== nodes.length) {
|
|
89
|
+
const remaining = nodes.filter((node) => {
|
|
90
|
+
const id = (0, getNodeObjectId_1.getNodeObjectId)(node);
|
|
91
|
+
return id ? !visited.has(id) : true;
|
|
92
|
+
});
|
|
93
|
+
remaining.sort((a, b) => {
|
|
94
|
+
const aOrder = a.type ? (priority.get(a.type) ?? 999) : 999;
|
|
95
|
+
const bOrder = b.type ? (priority.get(b.type) ?? 999) : 999;
|
|
96
|
+
return aOrder - bOrder || a.name.localeCompare(b.name);
|
|
97
|
+
});
|
|
98
|
+
result.push(...remaining);
|
|
99
|
+
}
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/lib/run.ts"],"names":[],"mappings":"AAqDA,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CA4wBzC"}
|