Skip to content

Instantly share code, notes, and snippets.

View voodooattack's full-sized avatar

Abdullah A. Hassan voodooattack

View GitHub Profile
@voodooattack
voodooattack / when-ts.ts
Last active September 18, 2018 05:44
when-ts: first draft
import 'reflect-metadata';
export interface MachineState {
}
/**
* An activation condition, takes two arguments and must return true for the associated action to fire.
*/
export type ActivationCond<State extends MachineState> =
(state: Readonly<State>, machine: EventMachine<State>) => boolean;
@voodooattack
voodooattack / when.md
Last active September 17, 2018 21:25
When: A proposition for a new, event-based programming language based on JavaScript.

when - event-based programming

when is an event-based programming language based on JavaScript, with a few key differences.

when is not fully procedural, and execution can flow non-linearly through the source code.

Program state

A program’s state consists of:

@voodooattack
voodooattack / README.md
Last active September 24, 2017 21:29
A server-side session API for Vulcan.js.

webtoken-session

A server-side session API for Vulcan.js.

This meteor package provides a session object on the Vulcan.js render context.

The session is stored inside a jsonwebtoken cookie on the client and is automatically saved at the end of each request. (including GraphQL queries)

Particularly useful when used in conjunction with internal-graphql*, which makes GraphQL requests internal to the server process.

@voodooattack
voodooattack / README.md
Last active October 2, 2017 01:11
Make Vulcan.js self-contained.

Internal GraphQL for Vulcan.js

To make a GraphQL query on a Vulcan.js server, your server has to connect to itself via a new HTTP connection every time it receives a request.

This package makes it so that Vulcan’s GraphQL queries never leave the process. All GraphQL requests are processed with no overhead.

See also: webtoken-session

@voodooattack
voodooattack / magic.md
Last active September 16, 2018 20:13
Spell specs for the story: The Magineer, you can read it at: https://www.themagineer.com/. The official document is now located at: https://www.themagineer.com/spell-syntax

The Science Of Magic

Forces:

Spatial Manipulation:

  • Manipulate (Attract/Repel/Move) (Velocity Manipulation)
  • Spin (Angular Velocity Manipulation)

Atomic Manipulation:

  • Compress <--> Expand
@voodooattack
voodooattack / gql-directives.js
Last active January 5, 2020 09:57
GraphQL-Sequelize auto-model functionality. Directly translates the schema language into database models via directives.
const { parse, visit, print, Kind, BREAK } = require('graphql/language');
const { buildASTSchema } = require('graphql/utilities');
const { addResolveFunctionsToSchema } = require('graphql-tools');
const Sequelize = require('sequelize');
const { graphql } = require('graphql');
const jexl = require('jexl');
const deepAssign = require('deep-assign');
const { resolver: sequelizeResolver } = require('graphql-sequelize');
const { inspect } = require('util');
@voodooattack
voodooattack / directives.js
Last active November 25, 2021 17:47
Applies static directives to GraphQL schema AST.
import { visit } from 'graphql/language';
/**
* Calls directives with a `resolveStatic` hook at the time of parsing.
* @param ast GraphQL schema AST.
* @param directives The directives collection.
* @param throwOnMissing Should we throw if an unknown directive is encountered?
* @returns {*} Revised AST as transformed by the directives.
*/
export function applyStaticDirectivesToAST(ast, directives, throwOnMissing = true) {
@voodooattack
voodooattack / combine-graphql.js
Last active February 6, 2022 15:11
Combine two GraphQL schemas
import { parse, visit, print } = from 'graphql/language';
/**
* Combine the fields of two or more AST nodes, does no error checking!
* @param types An array with types to combine.
* @returns {*}
*/
export function combineASTTypes(types) {
return types.reduce((p, n) => Object.assign(p, n, { fields: n.fields.concat(p.fields || []) }), {});
}
import { GraphQLSchema } from 'graphql/type';
import { graphql } from 'graphql';
import { type, query, mutation, field, iface, Schema } from '../src';
class MySchema extends Schema { }
/**
* Declare a basic interface
*/
var startTime = Date.now()
var fs = require('fs')
var Iconv = require('iconv').Iconv
var cluster = require('cluster')
var workers;
if (cluster.isMaster) workers = [1, 2, 3, 4].map(_ => cluster.fork())
if (!cluster.isMaster)
{