@4a/enum

simple enum type for js

Usage no npm install needed!

<script type="module">
  import 4aEnum from 'https://cdn.skypack.dev/@4a/enum';
</script>

README

Enum type

简单的Enum类型

Install

npm i @4a/enum

Usage

// ES6
import Enum from '@4a/enum'

// or Nodejs
const Enum = require('@4a/enum')


const DemoEnum = Enum({
    name: "NAME",
    homePage: "HOMEPAGE",
})

DemoEnum.name.rawValue // "NAME"
DemoEnum.homePage.rawValue // "HOMEPAGE"

DemoEnum.$has(DemoEnum.homePage)

DemoEnum.$append('OK', 'OK')
DemoEnum.$extend({ fail: 'FAIL' })
function Message(code, message) {
    return { code, message }
}

const ResultMessage = Enum({
    errorToken: Message(1000, "token error"),
    expiredToken: Message(1001, "token expired"),
})

ResultMessage.errorToken // {code: 1000, message: "token error"}
ResultMessage.expiredToken // {code: 1001, message: "token expired"}

try {
    throw ResultMessage.errorToken.Error()
}
catch(err) {
    if (err instanceof Enum.EnumError) {
        console.log(err.Encode())
    }
    console.log(err)
}

Assert

const assert = require('@4a/enum/assert')

// assert.ok(1 === 2, ResultMessage.errorToken.Error())
// assert.fail(1 === 1, ResultMessage.errorToken.Error())
// assert.equal(1, 2, ResultMessage.errorToken.Error())
// assert.notEqual(1, 1, ResultMessage.errorToken.Error())
// assert.deepEqual([1], [2], ResultMessage.errorToken.Error())

try {
    assert.notDeepEqual([2], [2], ResultMessage.errorToken.Error('custom error message'))
}
catch(err) {
    if (err instanceof Enum.EnumError) {
        console.log(101, err.Encode())
        console.log(101, err.Encode().code)
        console.log(101, err.Encode().message)
        console.log(101, err)
    }
}
const APP = Enum({
    name: 'wechat',
    version: '1.0.0',
    demo: { foo: 'bar' }
})

APP.version.isEqual('1.0.0') // true
APP.version.isNotEqual('1.0.0') // false

APP.demo.isDeepEqual({ foo: 'bar' }) // true
APP.demo.isNotDeepEqual({ foo: 'bar' }) // false

Notes

const Enum = require('@4a/enum')

Enum // 创建的类型是静态类型,默认不可修改
Enum.Enum // Enum原始类
Enum.EnumItem // Enum子项的父类
Enum.EnumError // Enum的错误类型父类


// 创建一个Enum类型
// Enum根据obj参数来创建Enum类型
// obj子项的值如果是js原始对象,EnumItem实例的值就是obj对应子项的值
// obj子项的值如果不是原始对象,enumItem.rawValue属性就是obj对应子项的值
const obj = {a: 1, b: 2, app: 3}
const Message = Enum(obj)


// EnumError
// EnumItem实例可以直接调用Error方法创建EnumError实例,message参数可选
// 如果EnumItem没有message属性,则必须传递message参数
throw Message.app.Error(message)

// EnumError实例可以调用Encode方法来进行重新编码
Message.app.Error(message).Encode()

Example

npm test

Vue

vue.config.js配置中注意配置transpileDependencies属性,让webpack可以编译@4a/enum

// Example
// 兼容低版本浏览器  
transpileDependencies: [
    /[/\\]node_modules[/\\]@4a\/enum[/\\]/,
]