private static async updateReferenceRequestsIfNecessary()

in src/router/bundle/bundleParser.ts [123:169]


    private static async updateReferenceRequestsIfNecessary(
        requests: BatchReadWriteRequest[],
        dataService: Persistence,
        serverUrl: string,
    ): Promise<BatchReadWriteRequest[]> {
        const fullUrlToRequest: Record<string, BatchReadWriteRequest> = {};
        const idToRequestWithRef: Record<string, BatchReadWriteRequest> = {};
        const allRequests: BatchReadWriteRequest[] = [];
        const requestsWithReference: BatchReadWriteRequest[] = [];
        const requestsWithoutReference: BatchReadWriteRequest[] = [];
        const orderedBundleEntriesId: string[] = [];

        requests.forEach((req) => {
            orderedBundleEntriesId.push(req.id);
            if (req.references) {
                requestsWithReference.push(req);
            } else {
                requestsWithoutReference.push(req);
            }
        });

        requestsWithoutReference.forEach((request) => {
            if (request.fullUrl) {
                fullUrlToRequest[request.fullUrl] = request;
            } else {
                // Resource without a fullUrl can't be referenced, therefore we won't need to do any transformation on it
                allRequests.push(request);
            }
        });

        requestsWithReference.forEach((request) => {
            idToRequestWithRef[request.id] = request;
            // request with a fullUrl have the potential of being referenced
            if (request.fullUrl) {
                fullUrlToRequest[request.fullUrl] = request;
            }
        });

        return this.checkReferences(
            orderedBundleEntriesId,
            idToRequestWithRef,
            fullUrlToRequest,
            allRequests,
            serverUrl,
            dataService,
        );
    }