Skip to content

Commit

Permalink
feat: findRecord as legacy op, native promises
Browse files Browse the repository at this point in the history
  • Loading branch information
runspired committed Mar 21, 2023
1 parent 1c6b67a commit 08bdd20
Show file tree
Hide file tree
Showing 102 changed files with 2,390 additions and 3,069 deletions.
1 change: 1 addition & 0 deletions @types/@ember-data/env.d.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export const DEBUG: boolean;
export const TESTING: boolean;
2 changes: 0 additions & 2 deletions packages/-ember-data/addon/-private/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,13 @@ import PromiseProxyMixin from '@ember/object/promise-proxy-mixin';
import ObjectProxy from '@ember/object/proxy';

import { LegacyNetworkHandler } from '@ember-data/legacy-compat';
import { FetchManager } from '@ember-data/legacy-compat/-private';
import { RequestManager } from '@ember-data/request';
import { Fetch } from '@ember-data/request/fetch';
import BaseStore from '@ember-data/store';

export class Store extends BaseStore {
constructor(args: Record<string, unknown>) {
super(args);
this._fetchManager = new FetchManager(this);
this.requestManager = new RequestManager();
this.requestManager.use([LegacyNetworkHandler, Fetch]);
}
Expand Down
2 changes: 1 addition & 1 deletion packages/-ember-data/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const merge = require('broccoli-merge-trees');
const addonBuildConfigForDataPackage = require('@ember-data/private-build-infra/src/addon-build-config-for-data-package');
const version = require('@ember-data/private-build-infra/src/create-version-module');

const addonBaseConfig = addonBuildConfigForDataPackage('ember-data');
const addonBaseConfig = addonBuildConfigForDataPackage(require('./package.json'));

module.exports = Object.assign({}, addonBaseConfig, {
shouldRollupPrivate: true,
Expand Down
37 changes: 6 additions & 31 deletions packages/adapter/addon-main.js
Original file line number Diff line number Diff line change
@@ -1,35 +1,9 @@
const requireModule = require('@ember-data/private-build-infra/src/utilities/require-module');
const getEnv = require('@ember-data/private-build-infra/src/utilities/get-env');
const detectModule = require('@ember-data/private-build-infra/src/utilities/detect-module');

const pkg = require('./package.json');

// do our best to detect being present
// Note: when this is not enough, consuming apps may need
// to "hoist" peer-deps or specify us as a direct dependency
// in order to deal with peer-dep bugs in package managers
function detectModule(moduleName) {
try {
// package managers have peer-deps bugs where another library
// bringing a peer-dependency doesn't necessarily result in all
// versions of the dependent getting the peer-dependency
//
// so we resolve from project as well as from our own location
//
// eslint-disable-next-line node/no-missing-require
require.resolve(moduleName, { paths: [process.cwd(), __dirname] });
return true;
} catch {
try {
// ember-data brings all packages so if present we are present
//
// eslint-disable-next-line node/no-missing-require
require.resolve('ember-data', { paths: [process.cwd(), __dirname] });
return true;
} catch {
return false;
}
}
}

module.exports = {
name: pkg.name,

Expand Down Expand Up @@ -61,8 +35,8 @@ module.exports = {
hostOptions.debug || {}
);

const HAS_DEBUG_PACKAGE = detectModule('@ember-data/debug');
const HAS_META_PACKAGE = detectModule('ember-data');
const HAS_DEBUG_PACKAGE = detectModule('@ember-data/debug', __dirname, pkg);
const HAS_META_PACKAGE = detectModule('ember-data', __dirname, pkg);

const includeDataAdapterInProduction =
typeof hostOptions.includeDataAdapterInProduction === 'boolean'
Expand All @@ -78,7 +52,7 @@ module.exports = {
delete MACRO_PACKAGE_FLAGS['HAS_DEBUG_PACKAGE'];

Object.keys(MACRO_PACKAGE_FLAGS).forEach((key) => {
MACRO_PACKAGE_FLAGS[key] = detectModule(MACRO_PACKAGE_FLAGS[key]);
MACRO_PACKAGE_FLAGS[key] = detectModule(MACRO_PACKAGE_FLAGS[key], __dirname, pkg);
});

// copy configs forward
Expand All @@ -89,6 +63,7 @@ module.exports = {
ownConfig.features = Object.assign({}, FEATURES);
ownConfig.includeDataAdapter = includeDataAdapter;
ownConfig.packages = MACRO_PACKAGE_FLAGS;
ownConfig.env = getEnv(ownConfig);

this._emberDataConfig = ownConfig;
return ownConfig;
Expand Down
1 change: 0 additions & 1 deletion packages/adapter/rollup.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ export default {
'@ember/service',
'@ember-data/store/-private',
'require',
'rsvp',
'ember-inflector',
'@ember/debug',
'@ember/string',
Expand Down
4 changes: 1 addition & 3 deletions packages/adapter/src/-private/utils/continue-on-reject.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import { resolve } from 'rsvp';

export default function continueOnReject<T>(promise: Promise<T>): Promise<T> {
return resolve(promise).catch((e) => e);
return Promise.resolve(promise).catch((e) => e);
}
23 changes: 7 additions & 16 deletions packages/adapter/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,6 @@
import EmberObject from '@ember/object';
import { inject as service } from '@ember/service';

import { Promise as RSVPPromise } from 'rsvp';

import { DEBUG } from '@ember-data/env';
import type { SnapshotRecordArray } from '@ember-data/legacy-compat/-private';
import type Store from '@ember-data/store';
Expand Down Expand Up @@ -246,12 +244,11 @@ export default class Adapter extends EmberObject implements MinimumAdapterInterf
@return {Promise} promise
@public
*/
// @ts-expect-error
findRecord(store: Store, type: ShimModelClass, id: string, snapshot: Snapshot): Promise<AdapterPayload> {
if (DEBUG) {
throw new Error('You subclassed the Adapter class but missing a findRecord override');
}

return RSVPPromise.resolve();
}

/**
Expand Down Expand Up @@ -290,12 +287,11 @@ export default class Adapter extends EmberObject implements MinimumAdapterInterf
type: ShimModelClass,
neverSet,
snapshotRecordArray: SnapshotRecordArray
// @ts-expect-error
): Promise<AdapterPayload> {
if (DEBUG) {
throw new Error('You subclassed the Adapter class but missing a findAll override');
}

return RSVPPromise.resolve();
}

/**
Expand Down Expand Up @@ -330,12 +326,11 @@ export default class Adapter extends EmberObject implements MinimumAdapterInterf
@return {Promise} promise
@public
*/
// @ts-expect-error
query(store: Store, type: ShimModelClass, query): Promise<AdapterPayload> {
if (DEBUG) {
throw new Error('You subclassed the Adapter class but missing a query override');
}

return RSVPPromise.resolve();
}

/**
Expand Down Expand Up @@ -376,12 +371,11 @@ export default class Adapter extends EmberObject implements MinimumAdapterInterf
@return {Promise} promise
@public
*/
// @ts-expect-error
queryRecord(store: Store, type: ShimModelClass, query, adapterOptions): Promise<AdapterPayload> {
if (DEBUG) {
throw new Error('You subclassed the Adapter class but missing a queryRecord override');
}

return RSVPPromise.resolve();
}

/**
Expand Down Expand Up @@ -487,12 +481,11 @@ export default class Adapter extends EmberObject implements MinimumAdapterInterf
@return {Promise} promise
@public
*/
// @ts-expect-error
createRecord(store: Store, type: ShimModelClass, snapshot: Snapshot): Promise<AdapterPayload> {
if (DEBUG) {
throw new Error('You subclassed the Adapter class but missing a createRecord override');
}

return RSVPPromise.resolve();
}

/**
Expand Down Expand Up @@ -545,12 +538,11 @@ export default class Adapter extends EmberObject implements MinimumAdapterInterf
@return {Promise} promise
@public
*/
// @ts-expect-error
updateRecord(store: Store, type: ShimModelClass, snapshot: Snapshot): Promise<AdapterPayload> {
if (DEBUG) {
throw new Error('You subclassed the Adapter class but missing a updateRecord override');
}

return RSVPPromise.resolve();
}

/**
Expand Down Expand Up @@ -595,12 +587,11 @@ export default class Adapter extends EmberObject implements MinimumAdapterInterf
@return {Promise} promise
@public
*/
// @ts-expect-error
deleteRecord(store: Store, type: ShimModelClass, snapshot: Snapshot): Promise<AdapterPayload> {
if (DEBUG) {
throw new Error('You subclassed the Adapter class but missing a deleteRecord override');
}

return RSVPPromise.resolve();
}

/**
Expand Down
10 changes: 4 additions & 6 deletions packages/adapter/src/rest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ import { assert, warn } from '@ember/debug';
import { computed } from '@ember/object';
import { join } from '@ember/runloop';

import { Promise as RSVPPromise } from 'rsvp';

import { DEBUG } from '@ember-data/env';
import type { SnapshotRecordArray } from '@ember-data/legacy-compat/-private';
import type Store from '@ember-data/store';
Expand Down Expand Up @@ -1114,7 +1112,7 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) {
} else {
let hash: JQueryRequestInit = adapter.ajaxOptions(url, type, options);

return new RSVPPromise(function (resolve, reject) {
return new Promise(function (resolve, reject) {
hash.success = function (payload, textStatus, jqXHR) {
let response = ajaxSuccessHandler(adapter, payload, jqXHR, requestData);
join(null, resolve, response);
Expand All @@ -1126,7 +1124,7 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) {
};

adapter._ajax(hash);
}, 'DS: RESTAdapter#ajax ' + type + ' to ' + url);
});
}
}

Expand Down Expand Up @@ -1336,11 +1334,11 @@ function ajaxSuccess(
try {
response = adapter.handleResponse(responseData.status, responseData.headers, payload, requestData);
} catch (error) {
return RSVPPromise.reject(error);
return Promise.reject(error);
}

if (response && response.isAdapterError) {
return RSVPPromise.reject(response);
return Promise.reject(response);
} else {
return response;
}
Expand Down
4 changes: 1 addition & 3 deletions packages/debug/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

const addonBuildConfigForDataPackage = require('@ember-data/private-build-infra/src/addon-build-config-for-data-package');

const name = require('./package').name;

const addonBaseConfig = addonBuildConfigForDataPackage(name);
const addonBaseConfig = addonBuildConfigForDataPackage(require('./package.json'));

module.exports = Object.assign({}, addonBaseConfig, {
shouldRollupPrivate: false,
Expand Down
37 changes: 6 additions & 31 deletions packages/graph/addon-main.js
Original file line number Diff line number Diff line change
@@ -1,35 +1,9 @@
const requireModule = require('@ember-data/private-build-infra/src/utilities/require-module');
const getEnv = require('@ember-data/private-build-infra/src/utilities/get-env');
const detectModule = require('@ember-data/private-build-infra/src/utilities/detect-module');

const pkg = require('./package.json');

// do our best to detect being present
// Note: when this is not enough, consuming apps may need
// to "hoist" peer-deps or specify us as a direct dependency
// in order to deal with peer-dep bugs in package managers
function detectModule(moduleName) {
try {
// package managers have peer-deps bugs where another library
// bringing a peer-dependency doesn't necessarily result in all
// versions of the dependent getting the peer-dependency
//
// so we resolve from project as well as from our own location
//
// eslint-disable-next-line node/no-missing-require
require.resolve(moduleName, { paths: [process.cwd(), __dirname] });
return true;
} catch {
try {
// ember-data brings all packages so if present we are present
//
// eslint-disable-next-line node/no-missing-require
require.resolve('ember-data', { paths: [process.cwd(), __dirname] });
return true;
} catch {
return false;
}
}
}

module.exports = {
name: pkg.name,

Expand Down Expand Up @@ -61,8 +35,8 @@ module.exports = {
hostOptions.debug || {}
);

const HAS_DEBUG_PACKAGE = detectModule('@ember-data/debug');
const HAS_META_PACKAGE = detectModule('ember-data');
const HAS_DEBUG_PACKAGE = detectModule('@ember-data/debug', __dirname, pkg);
const HAS_META_PACKAGE = detectModule('ember-data', __dirname, pkg);

const includeDataAdapterInProduction =
typeof hostOptions.includeDataAdapterInProduction === 'boolean'
Expand All @@ -78,7 +52,7 @@ module.exports = {
delete MACRO_PACKAGE_FLAGS['HAS_DEBUG_PACKAGE'];

Object.keys(MACRO_PACKAGE_FLAGS).forEach((key) => {
MACRO_PACKAGE_FLAGS[key] = detectModule(MACRO_PACKAGE_FLAGS[key]);
MACRO_PACKAGE_FLAGS[key] = detectModule(MACRO_PACKAGE_FLAGS[key], __dirname, pkg);
});

// copy configs forward
Expand All @@ -89,6 +63,7 @@ module.exports = {
ownConfig.features = Object.assign({}, FEATURES);
ownConfig.includeDataAdapter = includeDataAdapter;
ownConfig.packages = MACRO_PACKAGE_FLAGS;
ownConfig.env = getEnv(ownConfig);

this._emberDataConfig = ownConfig;
return ownConfig;
Expand Down
25 changes: 0 additions & 25 deletions packages/graph/index.js

This file was deleted.

3 changes: 0 additions & 3 deletions packages/graph/rollup.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,13 @@ export default {
'@embroider/macros',
'@ember-data/store/-private',
'@ember/service',
'require',
'rsvp',
'ember-inflector',
'@ember/debug',
'@ember/string',
'@ember/object',
'@ember/object/mixin',
'@ember/application',
'@glimmer/env',
'@ember/runloop',
'@ember/polyfills',
],

Expand Down
Loading

0 comments on commit 08bdd20

Please sign in to comment.