Skip to content

Commit

Permalink
fix: add deprecations for the deprecated APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
NullVoxPopuli committed May 1, 2022
1 parent 2007670 commit 5b07081
Show file tree
Hide file tree
Showing 8 changed files with 157 additions and 6 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ jobs:
- name: Test with ${{ matrix.node }}
run: pnpm --filter ember-app run ember:test
try-scenarios:
name: Ember Compatibility
name: ${{ matrix.ember-try-scenario }}
timeout-minutes: 10
runs-on: ubuntu-latest
needs: tests
Expand Down Expand Up @@ -152,7 +152,7 @@ jobs:
node_modules/.bin/ember try:one ${{ matrix.ember-try-scenario }}
--skip-cleanup
typescript-compatibility:
name: Type checking - ${{ matrix.typescript-scenario }}
name: types w/ ${{ matrix.typescript-scenario }}
timeout-minutes: 5
runs-on: ubuntu-latest
continue-on-error: true
Expand Down
31 changes: 31 additions & 0 deletions ember-resources/src/deprecated-in-v4/ember-concurrency.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,28 @@ import { assert } from '@ember/debug';
import { invokeHelper } from '@ember/helper';
import { get } from '@ember/object';

import { dependencySatisfies, importSync, macroCondition } from '@embroider/macros';

import { TASK, TaskResource } from './resources/ember-concurrency-task';
import { DEFAULT_THUNK, normalizeThunk } from './utils';

import type { TaskInstance, TaskIsh } from './resources/ember-concurrency-task';
import type { Cache, Constructable } from './types';
import type { deprecate as emberDebugDeprecate } from '@ember/debug';

let deprecate: typeof emberDebugDeprecate;

if (
macroCondition(
dependencySatisfies('ember-source', '^3.28') || dependencySatisfies('ember-source', '^4.0.0')
)
) {
// @ts-ignore
deprecate = importSync('@ember/debug').deprecate;
} else {
// @ts-ignore
deprecate = (globalThis.Ember || importSync('@ember/debug')).deprecate;
}

/**
* @deprecated
Expand Down Expand Up @@ -60,6 +77,20 @@ export function useTask<
>(context: object, task: LocalTask, thunk?: () => Args) {
assert(`Task does not have a perform method. Is it actually a task?`, 'perform' in task);

deprecate(
`The useTask is deprecated. Please migrate to task, exported from 'ember-resources/util/ember-concurrency'`,
false,
{
id: 'ember-resources.useTask',
until: '5.0.0',
url: 'https://github.com/NullVoxPopuli/ember-resources/blob/main/MIGRATIONS.md#usetask',
for: 'ember-resources',
since: {
available: '4.6',
},
}
);

let target = buildUnproxiedTaskResource(context, task, (thunk || DEFAULT_THUNK) as () => Args);

// TS can't figure out what the proxy is doing
Expand Down
31 changes: 31 additions & 0 deletions ember-resources/src/deprecated-in-v4/resources/lifecycle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,24 @@ import { associateDestroyableChild, registerDestructor } from '@ember/destroyabl
// @ts-ignore
import { capabilities as helperCapabilities, setHelperManager } from '@ember/helper';

import { dependencySatisfies, importSync, macroCondition } from '@embroider/macros';

import type { ArgsWrapper, Cache, LooseArgs, Thunk } from '[deprecated-types]';
import type { deprecate as emberDebugDeprecate } from '@ember/debug';

let deprecate: typeof emberDebugDeprecate;

if (
macroCondition(
dependencySatisfies('ember-source', '^3.28') || dependencySatisfies('ember-source', '^4.0.0')
)
) {
// @ts-ignore
deprecate = importSync('@ember/debug').deprecate;
} else {
// @ts-ignore
deprecate = (globalThis.Ember || importSync('@ember/debug')).deprecate;
}

export declare interface LifecycleResource<T extends LooseArgs = ArgsWrapper> {
args: T;
Expand Down Expand Up @@ -108,6 +125,20 @@ export class LifecycleResource<T extends LooseArgs = ArgsWrapper> {

constructor(owner: unknown, public args: T) {
setOwner(this, owner);

deprecate(
`The LifecycleResource is deprecated. Please migrate to Resource, exported from 'ember-resources/core'`,
false,
{
id: 'ember-resources.LifecycleResource',
until: '5.0.0',
url: 'https://github.com/NullVoxPopuli/ember-resources/blob/main/MIGRATIONS.md#lifecycleresource',
for: 'ember-resources',
since: {
available: '4.6',
},
}
);
}
}

Expand Down
31 changes: 31 additions & 0 deletions ember-resources/src/deprecated-in-v4/resources/simple.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,29 @@ import { associateDestroyableChild, destroy } from '@ember/destroyable';
// @ts-ignore
import { capabilities as helperCapabilities, setHelperManager } from '@ember/helper';

import { dependencySatisfies, importSync, macroCondition } from '@embroider/macros';

import type { ArgsWrapper, Cache, LooseArgs, Thunk } from '../types';
import type { deprecate as emberDebugDeprecate } from '@ember/debug';

let deprecate: typeof emberDebugDeprecate;

export declare interface Resource<T extends LooseArgs = ArgsWrapper> {
args: T;
}

if (
macroCondition(
dependencySatisfies('ember-source', '^3.28') || dependencySatisfies('ember-source', '^4.0.0')
)
) {
// @ts-ignore
deprecate = importSync('@ember/debug').deprecate;
} else {
// @ts-ignore
deprecate = (globalThis.Ember || importSync('@ember/debug')).deprecate;
}

/**
* @deprecated
*/
Expand Down Expand Up @@ -49,6 +66,20 @@ export class Resource<T extends LooseArgs = ArgsWrapper> {
/* eslint-enable @typescript-eslint/no-unused-vars */
) {
setOwner(this, owner);

deprecate(
`The hookless-Resource is deprecated. Please migrate to Resource, exported from 'ember-resources/core'`,
false,
{
id: 'ember-resources.OldResource',
until: '5.0.0',
url: 'https://github.com/NullVoxPopuli/ember-resources/blob/main/MIGRATIONS.md#resource',
for: 'ember-resources',
since: {
available: '4.6',
},
}
);
}
}

Expand Down
27 changes: 27 additions & 0 deletions ember-resources/src/deprecated-in-v4/use-resource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,29 @@ import { assert } from '@ember/debug';
// @ts-ignore
import { invokeHelper } from '@ember/helper';

import { dependencySatisfies, importSync, macroCondition } from '@embroider/macros';

import { LifecycleResource } from './resources/lifecycle';
import { Resource } from './resources/simple';
import { DEFAULT_THUNK, normalizeThunk, proxyClass } from './utils';

import type { ResourceFn } from './resources/function-runner';
import type { Cache, Constructable, Thunk } from './types';
import type { deprecate as emberDebugDeprecate } from '@ember/debug';

let deprecate: typeof emberDebugDeprecate;

if (
macroCondition(
dependencySatisfies('ember-source', '^3.28') || dependencySatisfies('ember-source', '^4.0.0')
)
) {
// @ts-ignore
deprecate = importSync('@ember/debug').deprecate;
} else {
// @ts-ignore
deprecate = (globalThis.Ember || importSync('@ember/debug')).deprecate;
}

// https://github.com/josemarluedke/glimmer-apollo/blob/main/packages/glimmer-apollo/src/-private/use-resource.ts
function useUnproxiedResource<Instance = unknown>(
Expand Down Expand Up @@ -90,6 +107,16 @@ export function useResource<Instance extends object, Args extends unknown[]>(
klass: Constructable<Instance>,
thunk?: Thunk | (() => Args)
): Instance {
deprecate(`useResource is deprecated. Please migrate to Resource.from. `, false, {
id: 'ember-resources.useResource',
until: '5.0.0',
url: 'https://github.com/NullVoxPopuli/ember-resources/blob/main/MIGRATIONS.md#useresource',
for: 'ember-resources',
since: {
available: '4.6',
},
});

assert(
`Expected second argument, klass, to be a Resource. ` +
`This is different from the v1 series where useResource could be used for both functions and class-based Resources. ` +
Expand Down
31 changes: 31 additions & 0 deletions ember-resources/src/deprecated-in-v4/use.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,26 @@ import { assert } from '@ember/debug';
// @ts-ignore
import { invokeHelper } from '@ember/helper';

import { dependencySatisfies, importSync, macroCondition } from '@embroider/macros';

import { normalizeThunk } from './utils';

import type { Thunk } from './types';
import type { deprecate as emberDebugDeprecate } from '@ember/debug';

let deprecate: typeof emberDebugDeprecate;

if (
macroCondition(
dependencySatisfies('ember-source', '^3.28') || dependencySatisfies('ember-source', '^4.0.0')
)
) {
// @ts-ignore
deprecate = importSync('@ember/debug').deprecate;
} else {
// @ts-ignore
deprecate = (globalThis.Ember || importSync('@ember/debug')).deprecate;
}

interface Class<T = unknown> {
new (...args: unknown[]): T;
Expand Down Expand Up @@ -54,6 +71,20 @@ interface Descriptor {
export function use(_prototype: object, key: string, descriptor?: Descriptor): void {
if (!descriptor) return;

deprecate(
`The @use decorator is deprecated. Please migrate to the decorator-less Resources`,
false,
{
id: 'ember-resources.at-use',
until: '5.0.0',
url: 'https://github.com/NullVoxPopuli/ember-resources/blob/main/MIGRATIONS.md#use',
for: 'ember-resources',
since: {
available: '4.6',
},
}
);

assert(`@use can only be used with string-keys`, typeof key === 'string');

let resources = new WeakMap<object, { resource: unknown; type: 'class' | 'function' }>();
Expand Down
6 changes: 3 additions & 3 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion testing/ember-app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
"ember-auto-import": "2.4.0",
"ember-cli": "~4.1.1",
"ember-cli-app-version": "^5.0.0",
"ember-cli-babel": "^7.26.11",
"ember-cli-babel": "^7.0.0",
"ember-cli-dependency-checker": "^3.2.0",
"ember-cli-htmlbars": "^6.0.0",
"ember-cli-inject-live-reload": "^2.1.0",
Expand Down

0 comments on commit 5b07081

Please sign in to comment.