Skip to content

Commit 5e114a5

Browse files
committed
Create Error class similar to ActiveModel
Previously a model's errors was simply a hash of strings. This made it difficult to do things like getting the "full message" including a humanized attribute name, or access the underlying error code. This replaces the previous version with an actual object that has all of these things available. Additionally, the error object is typed so that it only includes the attributes available on the model in question.
1 parent ab3984f commit 5e114a5

33 files changed

+389
-173
lines changed

lib-esm/model.d.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { MiddlewareStack, BeforeFilter, AfterFilter } from "./middleware-stack";
99
import { Omit } from "./util/omit";
1010
import { JsonapiResource, JsonapiResponseDoc, JsonapiResourceIdentifier } from "./jsonapi-spec";
1111
import { IncludeScopeHash } from "./util/include-directive";
12+
import { ValidationErrors } from "./validation-errors";
1213
export declare type KeyCaseValue = "dash" | "camel" | "snake";
1314
export interface KeyCase {
1415
server: KeyCaseValue;
@@ -110,7 +111,7 @@ export declare class JSORMBase {
110111
private _copyPrototypeDescriptors();
111112
isType(jsonapiType: string): boolean;
112113
isPersisted: boolean;
113-
_onStoreChange: Function;
114+
_onStoreChange?: (event: any, attrs: any) => void;
114115
private onStoreChange();
115116
unlisten(): void;
116117
listen(): void;
@@ -126,7 +127,7 @@ export declare class JSORMBase {
126127
relationshipResourceIdentifiers(relationNames: string[]): Record<string, JsonapiResourceIdentifier[]>;
127128
fromJsonapi(resource: JsonapiResource, payload: JsonapiResponseDoc, includeDirective?: IncludeScopeHash): any;
128129
readonly resourceIdentifier: JsonapiResourceIdentifier;
129-
errors: object;
130+
errors: ValidationErrors<this>;
130131
readonly hasError: boolean;
131132
clearErrors(): void;
132133
isDirty(relationships?: IncludeScope): boolean;

lib-esm/model.js

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib-esm/model.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib-esm/util/dirty-check.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ declare class DirtyChecker<T extends JSORMBase> {
1111
} & {
1212
reset: never;
1313
destroy: never;
14-
fromJsonapi: never;
1514
id: never;
1615
temp_id: never;
1716
stale: never;
@@ -33,6 +32,7 @@ declare class DirtyChecker<T extends JSORMBase> {
3332
assignAttributes: never;
3433
setMeta: never;
3534
relationshipResourceIdentifiers: never;
35+
fromJsonapi: never;
3636
resourceIdentifier: never;
3737
errors: never;
3838
hasError: never;
@@ -51,7 +51,6 @@ declare class DirtyChecker<T extends JSORMBase> {
5151
} & {
5252
reset: never;
5353
destroy: never;
54-
fromJsonapi: never;
5554
id: never;
5655
temp_id: never;
5756
stale: never;
@@ -73,6 +72,7 @@ declare class DirtyChecker<T extends JSORMBase> {
7372
assignAttributes: never;
7473
setMeta: never;
7574
relationshipResourceIdentifiers: never;
75+
fromJsonapi: never;
7676
resourceIdentifier: never;
7777
errors: never;
7878
hasError: never;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { JSORMBase } from "../model";
2+
import { JsonapiResponseDoc } from "../jsonapi-spec";
3+
export declare class ValidationErrorBuilder<T extends JSORMBase> {
4+
static apply<T extends JSORMBase>(model: T, payload: JsonapiResponseDoc): void;
5+
model: T;
6+
payload: JsonapiResponseDoc;
7+
constructor(model: T, payload: JsonapiResponseDoc);
8+
apply(): void;
9+
private _processResource(errorsAccumulator, meta, error);
10+
private _processRelationship<R>(model, meta, err);
11+
}

lib-esm/util/validation-errors.js renamed to lib-esm/util/validation-error-builder.js

Lines changed: 25 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib-esm/util/validation-error-builder.js.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib-esm/util/validation-errors.d.ts

Lines changed: 0 additions & 11 deletions
This file was deleted.

lib-esm/util/validation-errors.js.map

Lines changed: 0 additions & 1 deletion
This file was deleted.

lib-esm/util/write-payload.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ export declare class WritePayload<T extends JSORMBase> {
1515
} & {
1616
reset: never;
1717
destroy: never;
18-
fromJsonapi: never;
1918
id: never;
2019
temp_id: never;
2120
stale: never;
@@ -37,6 +36,7 @@ export declare class WritePayload<T extends JSORMBase> {
3736
assignAttributes: never;
3837
setMeta: never;
3938
relationshipResourceIdentifiers: never;
39+
fromJsonapi: never;
4040
resourceIdentifier: never;
4141
errors: never;
4242
hasError: never;

0 commit comments

Comments
 (0)