From 6044001da938fafd5988495500fc6d58a74dfabb Mon Sep 17 00:00:00 2001 From: Katie Gengler Date: Tue, 19 Aug 2025 01:34:56 -0400 Subject: [PATCH] Fix fetching data in fastboot/prember --- app/adapters/application.js | 23 ++++++++++++++++++----- config/fastboot.js | 15 +++++++++++++++ 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/app/adapters/application.js b/app/adapters/application.js index 43ef200a..d3cb0273 100644 --- a/app/adapters/application.js +++ b/app/adapters/application.js @@ -2,6 +2,7 @@ import { inject as service } from '@ember/service'; import JSONAPIAdapter from '@ember-data/adapter/json-api'; import { pluralize } from 'ember-inflector'; import { isBlank } from '@ember/utils'; +import config from 'ember-api-docs/config/environment'; export default class Application extends JSONAPIAdapter { currentProject = ''; @@ -39,7 +40,6 @@ export default class Application extends JSONAPIAdapter { async findRecord(store, { modelName }, id) { let url; - // let host = this.host; let projectName = this.currentProject; if (['namespace', 'class', 'module'].indexOf(modelName) > -1) { @@ -77,10 +77,23 @@ export default class Application extends JSONAPIAdapter { throw new Error('Unexpected model lookup'); } - url = `/${url}.json`; + const base = this.fastboot.isFastBoot + ? config.APP.domain + : window.location.origin; - let response = await fetch(url); - let json = await response.json(); - return json; + url = `${base}/${url}.json`; + try { + let response = await fetch(url); + if (!response.ok) { + throw new Error( + `Network response was not ok: ${response.status} ${response.statusText}` + ); + } + let json = await response.json(); + return json; + } catch (error) { + console.error(`Failed to fetch or parse JSON from ${url}:`, error); + throw new Error(`Failed to load data for ${url}: ${error.message}`); + } } } diff --git a/config/fastboot.js b/config/fastboot.js index a537769f..bbc11c38 100644 --- a/config/fastboot.js +++ b/config/fastboot.js @@ -3,6 +3,21 @@ module.exports = function () { buildSandboxGlobals(defaultGlobals) { return Object.assign({}, defaultGlobals, { atob: atob, + AbortController, + fetch: fetch, + ReadableStream: + typeof ReadableStream !== 'undefined' + ? ReadableStream + : require('node:stream/web').ReadableStream, + WritableStream: + typeof WritableStream !== 'undefined' + ? WritableStream + : require('node:stream/web').WritableStream, + TransformStream: + typeof TransformStream !== 'undefined' + ? TransformStream + : require('node:stream/web').TransformStream, + Headers: typeof Headers !== 'undefined' ? Headers : undefined, }); }, };