dlsjs 1.0.5 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,108 +0,0 @@
1
- import {reservedDeepProperty, reservedKey, reservedProperty, reservedWord} from "./transRule.js";
2
- import {deepConvert} from "../ES/Trans.js";
3
-
4
- /**
5
- * 翻译器的翻译中心,执行各个翻译规则,可以把符合条件的字符或者对象转换为目标格式
6
- * @param data
7
- * @param params
8
- * @param reservedDeepProperty
9
- * @param reservedKey
10
- * @param reservedProperty
11
- * @param reservedWord
12
- * @return {(function(): void)|*}
13
- */
14
- function transValue(data, params, {reservedDeepProperty, reservedKey, reservedProperty, reservedWord}) {
15
- if(reservedKey.hasOwnProperty(params.key)) {
16
- return reservedKey[params.key](data, params)
17
- }
18
- if(Object.prototype.toString.call(data) === '[object Object]') {
19
- for(let key in data) {
20
- if(reservedProperty.hasOwnProperty(key)) {
21
- return reservedProperty[key](data, params)
22
- }else if(reservedDeepProperty.hasOwnProperty(key)) {
23
- return reservedDeepProperty[key](data, params)
24
- }
25
- }
26
- }
27
- if(typeof data === 'string') {
28
- let regexRes = /^(@[a-zA-Z0-9]+)\/(.+)/.exec(data)
29
- if(regexRes) {
30
- const [matchString, $1, $2] = regexRes;
31
- if(reservedWord.hasOwnProperty($1)) {
32
- return reservedWord[$1](data, params, $2)
33
- }
34
- }
35
- }
36
- return data
37
- }
38
-
39
- /**
40
- * 终止符判断。防止翻译器无法停止,这里设置终止条件,返回值为ture时视作当前分支终结。
41
- * @param data
42
- * @param params
43
- * @param reservedDeepProperty
44
- * @param reservedKey
45
- * @param reservedProperty
46
- * @param reservedWord
47
- * @returns {boolean}
48
- */
49
- function isTerminator(data, params, {reservedDeepProperty, reservedKey, reservedProperty, reservedWord}) {
50
- // 键名匹配成功时,翻译键值后不再继续遍历
51
- if(reservedKey.hasOwnProperty(params.key)) {
52
- return true
53
- }
54
- // 键名未匹配时,键值如果是对象,进入属性匹配与深度匹配, 匹配到则识别此处为分支终点
55
- if(Object.prototype.toString.call(data) === '[object Object]') {
56
- for(let key in data) {
57
- if(reservedProperty.hasOwnProperty(key) && !(data.hasOwnProperty('@canDeep') || data.hasOwnProperty('@json') || data.hasOwnProperty('@stepV2'))) {
58
- return true
59
- }else if(reservedProperty.hasOwnProperty(key) && (data.hasOwnProperty('@canDeep') || data.hasOwnProperty('@json') || data.hasOwnProperty('@stepV2'))){
60
- return 'deep'
61
- }else if(reservedDeepProperty.hasOwnProperty(key)) {
62
- reservedDeepProperty[key](data, params)
63
- }
64
- }
65
- }
66
- // 键名未匹配时,键值如果是字符,进入键值正则匹配
67
- if(typeof data === 'string') {
68
- let regexRes = /^(@[a-zA-Z0-9]+)\/(.+)/.exec(data)
69
- if(regexRes) {
70
- const [matchString, $1, $2] = regexRes;
71
- if(reservedWord.hasOwnProperty($1)) {
72
- return true
73
- }
74
- }
75
- }
76
- return false
77
- }
78
-
79
- /**
80
- * dlsjs提供的预设翻译器
81
- * @param jsonObj 从数据库取出,将要翻译的对象
82
- * @param scope 提供当前环境下,可以让翻译器访问的指针
83
- * @returns {*}
84
- */
85
- export const dlsjsTrans = createMyTrans({})
86
-
87
- /**
88
- * 构建自己的翻译器
89
- * @param rules
90
- * @returns {function(*, *): *|[]}
91
- */
92
- export function createMyTrans(rules = {}) {
93
- const myTransFunc = (data, params) => transValue(data, params, {
94
- reservedDeepProperty: Object.assign({}, reservedDeepProperty, rules.reservedDeepProperty),
95
- reservedKey: Object.assign({}, reservedKey, rules.reservedKey),
96
- reservedProperty: Object.assign({}, reservedProperty, rules.reservedProperty),
97
- reservedWord: Object.assign({}, reservedWord, rules.reservedWord),
98
- })
99
- const myIsTerminator = (data, params) => isTerminator(data, params, {
100
- reservedDeepProperty: Object.assign({}, reservedDeepProperty, rules.reservedDeepProperty),
101
- reservedKey: Object.assign({}, reservedKey, rules.reservedKey),
102
- reservedProperty: Object.assign({}, reservedProperty, rules.reservedProperty),
103
- reservedWord: Object.assign({}, reservedWord, rules.reservedWord),
104
- })
105
- return (jsonObj, scope) => deepConvert(jsonObj, scope, myTransFunc , myIsTerminator)
106
- }
107
-
108
-
@@ -1,84 +0,0 @@
1
- import {RW} from "../ES/QRW.js";
2
- import dayjs from "dayjs";
3
-
4
- /**
5
- * 直接获取scope.data的数据
6
- * @param value
7
- * @param scope
8
- * @param $2
9
- * @return {*}
10
- */
11
- export function pickRW4Scope(value, scope, $2) {
12
- if(!scope || !scope.data) return null
13
- return RW(scope.data)['#/' + $2]
14
- }
15
-
16
- /**
17
- * 通常使用scope.func与scope.data组合成一个函数,获取其返回值
18
- * @param value
19
- * @param scope
20
- * @param $2
21
- * @return {function(...[*]): *}
22
- */
23
- export function createEval(value, scope, $2) {
24
- let func = new Function('scope', 'RW', 'dayjs', 'return ' + $2)
25
- return func(scope, RW, dayjs)
26
- }
27
-
28
- /**
29
- * 构造一个函数立刻求返回值
30
- */
31
- export function createFuncEval(value, scope, $2) {
32
- let func = new Function('scope', 'RW', 'dayjs', $2)
33
- return func(scope, RW, dayjs)
34
- }
35
-
36
- /**
37
- * 需要返回一个函数
38
- */
39
- export function createFunc(value, scope, $2) {
40
- let func = new Function('scope', 'RW', 'dayjs', 'args', $2)
41
- return (...args) => {
42
- return func(scope, RW, dayjs, args)
43
- }
44
- }
45
-
46
- /**
47
- * 需要返回一个函数,并且函数的返回值是Promise实例,在文本中可以用await 关键字。
48
- */
49
- export function createAsync(value, scope, $2) {
50
- let func = new Function('scope', 'RW', 'dayjs', 'args', `return async function() {${$2}}`)
51
- return (...args) => {
52
- let asyncFunc = func(scope, RW, dayjs, args)
53
- return asyncFunc()
54
- }
55
- }
56
-
57
- /**
58
- * 创建多步function
59
- * @param steps
60
- * @param params
61
- * @return {(function(...[*]): Promise<void>)|*}
62
- */
63
- export function createStep(steps, params) {
64
- return async (...args) => {
65
- for(let step of steps) {
66
- if(step.type === 'custom') {
67
- let func = params.funcScope?.[step.funcName]
68
- let paramList = []
69
- if(step.params) {
70
- for(let p of step.params) {
71
- paramList.push(createEval(p, params)(...args))
72
- }
73
- }
74
- if(typeof func === 'function') {
75
- func(...paramList)
76
- }
77
- }
78
- if(step.type === 'eval') {
79
- let res = createEval(step.value, params)(...args)
80
- if(res === false) return
81
- }
82
- }
83
- }
84
- }
@@ -1,32 +0,0 @@
1
- import {createAsync, createEval, createFunc, createFuncEval, createStep, pickRW4Scope} from "./transFunc.js";
2
-
3
- // 当对象含有下列属性值时,把对象输入对应函数翻译。函数的返回值赋值给输入对象的原指针
4
- export const reservedProperty = {
5
- '@step': function(value, params) {
6
- let steps = value['@step']
7
- return createStep(steps, params)
8
- },
9
- '@json': function (value, params) {
10
- return JSON.parse(value['@json'])
11
- }
12
- }
13
-
14
- // 当对象含有下列属性值时,把对象输入对应函数解析后。返回值应该是一个对象。这个返回值会被再次翻译,直到。。。
15
- export const reservedDeepProperty = {
16
-
17
- }
18
-
19
- // 遇到键值是字符串,且包含下列关键字,就把键值送去解析后返回原地址。
20
- export const reservedWord = {
21
- '@scope': pickRW4Scope,
22
- '@dataScope': pickRW4Scope,
23
- '@eval': createEval,
24
- '@funcEval': createFuncEval,
25
- '@func': createFunc,
26
- '@async': createAsync,
27
- }
28
-
29
- // 遇到键名是下列关键字时,就把键值送去解析
30
- export const reservedKey = {
31
-
32
- }
package/src/index.js DELETED
@@ -1,19 +0,0 @@
1
- export * from './Browser/File'
2
- export * from './Browser/Dom'
3
- export * from './Browser/Nav'
4
- export * from './Browser/Timer'
5
- export * from './Browser/Screen'
6
- export * from './Browser/Local'
7
- export * from './ES/QRW'
8
- export {default as Chain} from './ES/Chain'
9
- export * from './ES/Trans'
10
- export * from './ES/Tree'
11
- export * from './ES/Judgment'
12
- export * from './ES/Singleton'
13
- export * from './Instance/transCore'
14
-
15
- export const DLS_CONFIG = {
16
- TREE_ID: 'id',
17
- TREE_PARENT_ID: 'parentId',
18
- TREE_CHILDREN: 'children'
19
- }