Skip to content

Instantly share code, notes, and snippets.

@erukiti
erukiti / test.js
Created November 7, 2017 06:46
s2sでコメントを挿入する実験 (Babel6でも動くバージョン)
const plugin = babel => {
const {types: t} = babel
return {
inherits: inheritsOpts,
name: 's2s-jsdoc-creator',
visitor: {
Function(nodePath, state) {
const comment = `*
* @hoge
@erukiti
erukiti / test.js
Created November 6, 2017 02:47
babel-core 6と7で挙動が違う
const {transform} = require('babel-core')
const src = 'function hoge() {}'
const plugin = () => {
const visitor = {
Function: (nodePath) => {
nodePath.addComment('leading', 'hoge')
}
}
@erukiti
erukiti / proxy-spike1.js
Created November 1, 2017 07:24
うーん、Proxyだけで演算子オーバーライドを実現するのは無理っぽい?
class Fraction {
constructor(num, denom) {
this.num = num
this.denom = denom
this._reduce()
}
_reduce() {
if (this.num === 0) {
this.denom = 1
const generateObject = (scope, ...nodes) => {
return t.objectExpression(
nodes.map(node => {
return t.objectProperty(scope.generateUidIdentifier(), node)
})
)
}
@erukiti
erukiti / siblings.js
Last active October 15, 2017 12:05
babel-traverseのsiblingまわりの挙動を確認
const {transform} = require('babel-core')
const src = `
const a = 1
const b = 2
let c, d, e
c = 1 * 2 + 3 + 4 * 2
console.log(c)
`
@erukiti
erukiti / optimizer.js
Created October 12, 2017 11:40
最適化プラグイン
const {transform} = require('babel-core')
const babylon = require('babylon')
const WasCreated = Symbol('WasCreated')
const source = `
let b = 0
console.log(b)
b = b + 2
console.log(b)
@erukiti
erukiti / override.js
Last active October 11, 2017 10:39
演算子オーバライドっぽいbabelプラグインの実験
const {transform} = require('babel-core')
const WasCreated = Symbol('WasCreated')
const src = `
class Integer {
value: number
constructor(value: number) {
this.value = Math.floor(value)
@erukiti
erukiti / index.js
Created September 11, 2017 12:09
AST使った計算機 (引数に"1 * 3"みたいに式を指定)
const babylon = require('babylon')
const parse = (source) => {
try {
const ast = babylon.parse(source)
delete ast.tokens
return {ast}
} catch (err) {
return {error: err}
}
@erukiti
erukiti / typescript.ts
Created August 24, 2017 07:20
TypeScript はダックタイピングな型判定しやがるらしい
class Dog {
voice() {
return 'wanwan'
}
}
class Cat {
voice() {
return 'nya-n'
}
@erukiti
erukiti / serve.js
Created June 4, 2017 16:05
express+browserifyで、トランスパイル・バンドル処理を隠蔽するやつ
#! /usr/bin/env node
const path = require('path')
const express = require('express')
const browserify = require('browserify')
const app = express()
const sourcePath = path.resolve(process.argv.length <= 2 ? './' : process.argv[2])
app.use((req, res, next) => {