dinoQL

GraphQL 风格的查询语言
授权协议 MIT
开发语言 JavaScript
所属分类 Web应用开发、 GraphQL 项目
软件类型 开源软件
地区 不详
投 递 者 杨腾
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

dinoql 是一个可定制化的 GraphQL 风格的查询语言,用于实现与 JavaScript 对象进行交互。使用 dinoQL 可以像用 GraphQL 遍历 API 一样遍历 JavaScript 对象。

使用和 GraphQL 同样的做法的目的是因为:

使用示例

以下例子都使用如下数据:

const data = {
requests: {
products: [],
users: [{
name: 'Victor Igor',
id: "100",
age: 40
}, {
name: 'Kant Jonas',
id: "200",
age: 35
}],
friends: [{
name: 'Kátia',
id: "300",
age: 10
}]
}
}

Getting only name from users

import dinoql from 'dinoql'
const users = dinoql(data)`
requests {
users {
name
}
}
`
console.log(users) //{ users: [{ name: 'Victor Igor' }, { name: 'Kant Jonas' }] }

Get user by id

import dinoql from 'dinoql'
const users = dinoql(data)`
requests {
users(id: "200") {
name
}
}
`
console.log(users) //{ users: [{ name: 'Kant Jonas' }] }

Aliases - Renaming keys

import dinoql from 'dinoql'
const users = dinoql(data)`
requests {
changeUsers: users(id: "200") {
name
}
}
`
console.log(users) //{ changeUsers: [{ name: 'Kant Jonas' }] }

Resolvers

Resolvers provide the instructions for turning a dinoQL operation into data.

Order by

import dinoql from 'dinoql'
const users = dinoql(data)`
requests {
users(orderBy: age) {
name,
age
}
}
`
console.log(users) 
//{ users: [{ name: 'Kant Jonas', age: 35 }, { name: 'Victor Igor', age: 40 }] }

Default value

import dinoql from 'dinoql'
const users = dinoql(data)`
requests {
notfound(defaultValue: "Hello")
}
`
console.log(users) 
// {notfound: "Hello"}

Parse to Number

import dinoql from 'dinoql'
const users = dinoql(data)`
requests {
users {
id(toNumber: 1)
}
}
`
console.log(users)  //{ users: [{ id: 100 }, { id: 200 }] }

First

import dinoql from 'dinoql'
const users = dinoql(data)`
requests {
users(first: true) {
name
}
}
`
console.log(users)  //{ users: { name: 'Victor Igor' } }

Last

import dinoql from 'dinoql'
const users = dinoql(data)`
requests {
users(last: true) {
name
}
}
`
console.log(users)  //{ users: { name: 'Kant Jonas' } }

Building your own resolver

You can create a function to change a value in query.

import dql, { addResolvers } from 'dinoql';
const incAge = (list, right) => {
const valueToInc = Number(right);
return list.map(item => ({ ...item, age: item.age + valueToInc }));
};
addResolvers(({ incAge }));
const value = dql(data)`
requests {
users(incAge: 2) {
name,
age
}
}
`;
// { users: [{ name: 'Victor Igor', age: 42 }, { name: 'Kant Jonas', age: 37 }] }

Custom options

Keep structure

import dinoql from 'dinoql'
const users = dinoql(data, { keep: true })`
requests {
users(id: "200") {
name
}
}
`
console.log(users)
/*
{ 
requests: { 
users: [{ name: 'Kant Jonas' }] 
}
} 
*/

Improve performance

You can improve performance parsing in build time your queries.

How ?

  1. Create files  .graphql  or  .gql  and add your queries.

  2. Import your queries from  .graphql|.gql

# your queries
query MyQuery {
requests {
users
}
}
//your js
import dinoql from 'dinoql'
import { MyQuery } from './MyQueries';
const users = dinoql(data)(MyQuery)
  1. Setup your webpack - example

Fragments support

You can share piece of query logic.

fragment queryOne on Query {
users {
name
}
}
fragment queryTwo on Query {
products
}
query Form {
requests {
...queryOne,
...queryTwo,
friends
}
}
 相关资料
  • 你可能已经想知道如何将你放在*.vue文件中的代码检查风格了,尽管它们不是JavaScript。我们将假设你正在使用ESLint(如果你还没用,那你应该用了!)。 你还需要[eslint-plugin-html](https://github.com/BenoitZugmeyer/eslint-plugin-html),它支持在 *.vue 文件中提取和删除JavaScript。 确保在ESLin

  • 假设我需要解析一个JSON(见下文)。 首先,我解析“status”字段,以获得的实例(见下文) 我可以用解析JSON以获得而不首先获得吗?

  • 我有一个使用Hibernate 4.x的应用程序,它当前正在使用本机Hibernate API(这意味着我有一个和)。我刚刚注意到,现有的标准API被弃用了,而支持JPA的(高级)标准API: Hibernate提供了一个旧的、遗留的API,应该将其视为不推荐使用的API。任何特性开发都不会针对这些API。最终,特定于Hibernate的条件特性将作为JPA的扩展进行移植。 我不想将我的应用程序转

  • 问题内容: 我有一个很大的Excel工作表,看起来与此类似: 我要做的是创建一个新的动态生成的表格,其中显示了所有人员。 在SQL中,这将是同步:。我以前从未在excel中使用过VBA(我是一位经验丰富的PHP / Javascript程序员,并且已在MS Access中使用过VBA),所以我正在寻找初学者的指导以帮助我入门。也许有人可以推荐一个简单的教程或博客文章,其功能类似于我需要做的事情?

  • Computer language design is just like a stroll in the park. Jurassic Park, that is. — Larry Wall 在本章中,我们将学习如下内容: 使用 Puppet 社区规范 使用模块 使用标准的命名规范 使用嵌入式 Ruby 代码 使用纯 Ruby 代码书写配置清单 遍历多个项目 书写强大的条件语句 在 if 语句中

  • Hyperledger Composer中的查询以定制的查询语言编写。查询在业务网络定义中的一个叫(queries.qry)的查询文件中定义。 查询语法 所有查询都必须包含description和statement属性。 描述 该description属性是描述查询功能的字符串。它必须包含但可以包含任何东西。 声明 该statement属性包含查询的定义规则,可以具有以下运算符: SELECT 是

  • 我认为我的问题是一个常见的问题,我正在权衡作为解决方案的GraphQL的成本和收益。 我在一个产品上工作,该产品的数据由基于CRUD的RESTAPI存储。我们的应用程序组件公开了一个数据搜索接口,当然需要某种服务器端支持来请求该数据。这可以包括排序、筛选、选择字段等。当然,在Hibernate上下文中提供这些功能的更传统方式,比如endpoint的查询参数附加项,但是在这一上下文中尝试CopyQL

  • camelCase 很糟 你曾维护过别人的代码吗?你维护过像这样的代码吗? my $variableThatContainsData = someSubroutineThatMucksWithData( $someAwfulVariable ); 混合大小写单词在 Perl 世界被称为 camelCase,通常它的令人不悦之处是使 阅读代码更难。 甚至具有糟糕名称的代码使用下划线也能变得