private static _resourceDescriptorParser()

in desktop/src/app/utils/arm-resource-utils/arm-resource-utils.ts [147:197]


    private static _resourceDescriptorParser(id: string): ResourceDescriptor {
        if (!this.isResourceId(id)) {
            throw new InvalidArmResourceIdError("Invalid resource id: " + id);
        }

        // extract the subscription id and resource group id, if available.
        let tokens = ArmResourceUtils.regExpSubscriptionAndResourceGroupExtractor.exec(id);

        const result = new ResourceDescriptor();
        result.subscription = tokens && tokens[1] || undefined;
        result.resourceGroup = tokens && tokens[2] || undefined;

        // prefix all ids with '/providers/Microsoft.Resources'. This allows us to generically look
        // for the last '/providers' token and whatever follows (the resources) in any type of resource.
        id = "/providers/Microsoft.Resources" + id;

        // extract the provider and resources. produces [ id, provider, resources ]
        tokens = ArmResourceUtils.regExpProviderExtractor.exec(id);
        if (!tokens) {
            throw new InvalidArmResourceIdError("Invalid resource id: " + id);
        }

        result.provider = tokens[1];
        const resources = tokens[2];

        // extract all resource types and instances.
        let partialType = result.provider;
        result.type = undefined;
        result.types = [];
        result.resource = null;
        result.resources = [];
        result.resourceMap = {};

        // eslint-disable-next-line
        while (tokens = ArmResourceUtils.regExpResourceTypeExtractor.exec(resources)) {
            if (!tokens) {
                throw new InvalidArmResourceIdError("Invalid resource id: " + id);
            }

            result.types.push(tokens[1]);
            result.type = tokens[1]; // Keeps last.

            result.resources.push(tokens[2]);
            result.resource = tokens[2]; // Keeps last.

            partialType += "/" + result.type;
            result.resourceMap[partialType] = result.resource;
        }

        return result;
    }