Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

クエリ書き方大幅変更 #58

Open
wants to merge 22 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions core/ArSyncApi.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
declare const _default: {
fetch: (request: object) => Promise<{}>;
syncFetch: (request: object) => Promise<{}>;
fetch: (request: object) => Promise<unknown>;
syncFetch: (request: object) => Promise<unknown>;
};
export default _default;
6 changes: 3 additions & 3 deletions core/ArSyncModelBase.d.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
interface Request {
api: string;
query: any;
field: string;
params?: any;
query?: any;
}
declare type Path = (string | number)[];
interface Change {
Expand Down Expand Up @@ -66,6 +66,6 @@ export default abstract class ArSyncModelBase<T> {
static _detach(ref: any): void;
private static _attach;
static setConnectionAdapter(_adapter: Adapter): void;
static waitForLoad(...models: ArSyncModelBase<{}>[]): Promise<{}>;
static waitForLoad(...models: ArSyncModelBase<{}>[]): Promise<unknown>;
}
export {};
46 changes: 19 additions & 27 deletions core/DataType.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,24 @@ interface ExtraFieldErrorType {
error: 'extraFieldError';
}
declare type DataTypeExtractFromQueryHash<BaseType, QueryType> = '*' extends keyof QueryType ? {
[key in Exclude<(keyof BaseType) | (keyof QueryType), '_meta' | '_params' | '*'>]: (key extends keyof BaseType ? (key extends keyof QueryType ? (QueryType[key] extends true ? DataTypeExtractField<BaseType, key> : DataTypeFromQuery<BaseType[key] & {}, QueryType[key]>) : DataTypeExtractField<BaseType, key>) : ExtraFieldErrorType);
[key in Exclude<(keyof BaseType) | (keyof QueryType), '_meta' | '*'>]: (key extends keyof QueryType ? _DataTypePickField<BaseType, key, QueryType[key]> : key extends keyof BaseType ? DataTypeExtractField<BaseType, key> : ExtraFieldErrorType);
} : {
[key in keyof QueryType]: (key extends keyof BaseType ? (QueryType[key] extends true ? DataTypeExtractField<BaseType, key> : DataTypeFromQuery<BaseType[key] & {}, QueryType[key]>) : ExtraFieldErrorType);
[key in keyof QueryType]: _DataTypePickField<BaseType, key, QueryType[key]>;
};
declare type _DataTypeFromQuery<BaseType, QueryType> = QueryType extends keyof BaseType | '*' ? DataTypeExtractFieldsFromQuery<BaseType, QueryType> : QueryType extends Readonly<(keyof BaseType | '*')[]> ? DataTypeExtractFieldsFromQuery<BaseType, Values<QueryType>> : QueryType extends {
as: string;
} ? {
error: 'type for alias field is not supported';
} | undefined : DataTypeExtractFromQueryHash<BaseType, QueryType>;
export declare type DataTypeFromQuery<BaseType, QueryType> = BaseType extends any[] ? CheckAttributesField<BaseType[0], QueryType>[] : null extends BaseType ? CheckAttributesField<BaseType & {}, QueryType> | null : CheckAttributesField<BaseType & {}, QueryType>;
declare type _DataTypePickField<BaseType, Key, SubQuery> = SubQuery extends {
field: infer N;
query?: infer Q;
} ? (N extends keyof BaseType ? (IsAnyCompareLeftType extends Q ? DataTypeExtractField<BaseType, N> : DataTypeFromQuery<BaseType[N], Q>) : ExtraFieldErrorType) : (Key extends keyof BaseType ? (SubQuery extends true | {
query?: true | never;
params: any;
} ? DataTypeExtractField<BaseType, Key> : DataTypeFromQuery<BaseType[Key], SubQuery extends {
query: infer Q;
} ? Q : SubQuery>) : ExtraFieldErrorType);
declare type _DataTypeFromQuery<BaseType, QueryType> = QueryType extends keyof BaseType | '*' ? DataTypeExtractFieldsFromQuery<BaseType, QueryType> : QueryType extends Readonly<(keyof BaseType | '*')[]> ? DataTypeExtractFieldsFromQuery<BaseType, Values<QueryType>> : DataTypeExtractFromQueryHash<BaseType, QueryType>;
declare type CheckIsArray<BaseType, QueryType> = BaseType extends (infer Type)[] ? (null extends Type ? (CheckAttributesField<Exclude<Type, null>, QueryType> | null) : CheckAttributesField<Type, QueryType>)[] : CheckAttributesField<BaseType, QueryType>;
declare type DataTypeFromQuery<BaseType, QueryType> = null extends BaseType ? CheckIsArray<Exclude<BaseType, null>, QueryType> | null : CheckIsArray<BaseType, QueryType>;
declare type CheckAttributesField<P, Q> = Q extends {
attributes: infer R;
query: infer R;
} ? _DataTypeFromQuery<P, R> : _DataTypeFromQuery<P, Q>;
declare type IsAnyCompareLeftType = {
__any: never;
Expand All @@ -36,25 +42,11 @@ declare type CollectExtraFields<Type, Path> = IsAnyCompareLeftType extends Type
declare type _CollectExtraFields<Type> = keyof (Type) extends never ? null : Values<{
[key in keyof Type]: CollectExtraFields<Type[key], [key]>;
}>;
declare type SelectString<T> = T extends string ? T : never;
declare type _ValidateDataTypeExtraFileds<Extra, Type> = SelectString<Values<Extra>> extends never ? Type : {
declare type _ValidateDataTypeExtraFileds<Extra, Type> = Values<Extra> extends never ? Type : {
error: {
extraFields: SelectString<Values<Extra>>;
extraFields: Values<Extra>;
};
};
declare type ValidateDataTypeExtraFileds<Type> = _ValidateDataTypeExtraFileds<CollectExtraFields<Type, []>, Type>;
declare type RequestBase = {
api: string;
query: any;
params?: any;
_meta?: {
data: any;
};
};
declare type DataTypeBaseFromRequestType<R> = R extends {
_meta?: {
data: infer DataType;
};
} ? DataType : never;
export declare type DataTypeFromRequest<Req extends RequestBase, R extends RequestBase> = ValidateDataTypeExtraFileds<DataTypeFromQuery<DataTypeBaseFromRequestType<Req>, R['query']>>;
declare type ValidateDataTypeExtraFileds<Type> = _ValidateDataTypeExtraFileds<Exclude<CollectExtraFields<Type, []>, null>, Type>;
export declare type DataTypeFromQueryPair<BaseType, QueryType> = ValidateDataTypeExtraFileds<DataTypeFromQuery<BaseType, QueryType>>;
export {};
4 changes: 2 additions & 2 deletions core/hooksBase.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ interface ModelStatus {
}
export declare type DataAndStatus<T> = [T | null, ModelStatus];
export interface Request {
api: string;
field: string;
params?: any;
query: any;
query?: any;
}
interface ArSyncModel<T> {
data: T | null;
Expand Down
1 change: 1 addition & 0 deletions core/parseRequest.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export declare function parseRequest(request: any, attrsonly?: any): {};
43 changes: 43 additions & 0 deletions core/parseRequest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function parseRequest(request, attrsonly) {
const query = {};
let field = null;
let params = null;
if (!request)
request = [];
if (request.constructor !== Array)
request = [request];
for (const arg of request) {
if (typeof (arg) === 'string') {
query[arg] = {};
}
else if (typeof (arg) === 'object') {
for (const key in arg) {
const value = arg[key];
if (attrsonly) {
query[key] = parseRequest(value);
continue;
}
if (key === 'query') {
const child = parseRequest(value, true);
for (const k in child)
query[k] = child[k];
}
else if (key === 'field') {
field = value;
}
else if (key === 'params') {
params = value;
}
else {
query[key] = parseRequest(value);
}
}
}
}
if (attrsonly)
return query;
return { query, field, params };
}
exports.parseRequest = parseRequest;
Loading