jostraca 0.1.2 → 0.1.3
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.
- package/dist/jostraca.d.ts +8 -7
- package/dist/jostraca.js +91 -77
- package/dist/jostraca.js.map +1 -1
- package/package.json +2 -2
- package/src/jostraca.ts +109 -91
package/dist/jostraca.d.ts
CHANGED
|
@@ -4,13 +4,14 @@ type JostracaOptions = {
|
|
|
4
4
|
};
|
|
5
5
|
type Component = (props: any, children?: any) => void;
|
|
6
6
|
declare function Jostraca(): {
|
|
7
|
-
cmp: (component: Function) => Component;
|
|
8
|
-
each: (subject: any, apply?: any) => any;
|
|
9
7
|
generate: (opts: JostracaOptions, root: Function) => void;
|
|
10
|
-
Project: Component;
|
|
11
|
-
Code: Component;
|
|
12
|
-
File: Component;
|
|
13
|
-
Folder: Component;
|
|
14
8
|
};
|
|
9
|
+
declare const Code: Component;
|
|
10
|
+
declare const File: Component;
|
|
11
|
+
declare const Project: Component;
|
|
12
|
+
declare const Folder: Component;
|
|
13
|
+
declare function cmp(component: Function): Component;
|
|
14
|
+
declare function each(subject: any, apply?: any): any;
|
|
15
|
+
declare function select(key: any, map: Record<string, Function>): any;
|
|
15
16
|
export type { JostracaOptions, Component, };
|
|
16
|
-
export { Jostraca, };
|
|
17
|
+
export { Jostraca, cmp, each, select, Project, Code, File, Folder, };
|
package/dist/jostraca.js
CHANGED
|
@@ -24,11 +24,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
24
24
|
return result;
|
|
25
25
|
};
|
|
26
26
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.Folder = exports.File = exports.Code = exports.Project = void 0;
|
|
27
28
|
exports.Jostraca = Jostraca;
|
|
29
|
+
exports.cmp = cmp;
|
|
30
|
+
exports.each = each;
|
|
31
|
+
exports.select = select;
|
|
28
32
|
const Fs = __importStar(require("node:fs"));
|
|
29
33
|
const node_async_hooks_1 = require("node:async_hooks");
|
|
34
|
+
const GLOBAL = global;
|
|
30
35
|
function Jostraca() {
|
|
31
|
-
const GLOBAL = global;
|
|
32
36
|
GLOBAL.jostraca = new node_async_hooks_1.AsyncLocalStorage();
|
|
33
37
|
function generate(opts, root) {
|
|
34
38
|
const fs = opts.fs || Fs;
|
|
@@ -38,6 +42,8 @@ function Jostraca() {
|
|
|
38
42
|
root();
|
|
39
43
|
const ctx$ = GLOBAL.jostraca.getStore();
|
|
40
44
|
const node = ctx$.node;
|
|
45
|
+
// console.log('JOSTRACA TOP')
|
|
46
|
+
// console.dir(node, { depth: null })
|
|
41
47
|
build(node, {
|
|
42
48
|
fs,
|
|
43
49
|
current: {
|
|
@@ -48,54 +54,7 @@ function Jostraca() {
|
|
|
48
54
|
});
|
|
49
55
|
});
|
|
50
56
|
}
|
|
51
|
-
function cmp(component) {
|
|
52
|
-
const cf = (props, children) => {
|
|
53
|
-
props = props || {};
|
|
54
|
-
if (null == props || 'object' !== typeof props) {
|
|
55
|
-
props = { arg: props };
|
|
56
|
-
}
|
|
57
|
-
props.ctx$ = GLOBAL.jostraca.getStore();
|
|
58
|
-
children = 'function' === typeof children ? [children] : children;
|
|
59
|
-
let node = {
|
|
60
|
-
kind: 'content',
|
|
61
|
-
children: []
|
|
62
|
-
};
|
|
63
|
-
const parent = props.ctx$.node = (props.ctx$.node || node);
|
|
64
|
-
const siblings = props.ctx$.children = (props.ctx$.children || []);
|
|
65
|
-
siblings.push(node);
|
|
66
|
-
props.ctx$.children = node.children;
|
|
67
|
-
props.ctx$.node = node;
|
|
68
|
-
let out = component(props, children);
|
|
69
|
-
props.ctx$.children = siblings;
|
|
70
|
-
props.ctx$.node = parent;
|
|
71
|
-
return out;
|
|
72
|
-
};
|
|
73
|
-
Object.defineProperty(cf, 'name', { value: component.name });
|
|
74
|
-
return cf;
|
|
75
|
-
}
|
|
76
|
-
function each(subject, apply) {
|
|
77
|
-
if (null == apply) {
|
|
78
|
-
if (Array.isArray(subject)) {
|
|
79
|
-
for (let fn of subject) {
|
|
80
|
-
fn();
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
if (Array.isArray(subject)) {
|
|
86
|
-
return subject.map(apply);
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
const entries = Object.entries(subject);
|
|
90
|
-
if (entries[0] && entries[0][1] && 'string' === typeof entries[0][1].name) {
|
|
91
|
-
entries.sort((a, b) => a.name < b.name ? 1 : b.name < a.name ? -1 : 0);
|
|
92
|
-
}
|
|
93
|
-
return entries.map((n, ...args) => apply(n[1], [0], ...args));
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
57
|
function build(topnode, ctx) {
|
|
98
|
-
// console.dir(topnode, { depth: null })
|
|
99
58
|
step(topnode, ctx);
|
|
100
59
|
}
|
|
101
60
|
function step(node, ctx) {
|
|
@@ -148,42 +107,97 @@ function Jostraca() {
|
|
|
148
107
|
},
|
|
149
108
|
content: {
|
|
150
109
|
before(node, ctx) {
|
|
151
|
-
const
|
|
152
|
-
ctx.current.file.content.push(
|
|
110
|
+
const content = ctx.current.content = node;
|
|
111
|
+
ctx.current.file.content.push(content.content);
|
|
112
|
+
},
|
|
113
|
+
after(_node, _ctx) {
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
none: {
|
|
117
|
+
before(_node, ctx) {
|
|
153
118
|
},
|
|
154
119
|
after(_node, _ctx) {
|
|
155
120
|
},
|
|
156
121
|
},
|
|
157
122
|
};
|
|
158
|
-
const Code = cmp(function Code(props) {
|
|
159
|
-
let src = props.arg;
|
|
160
|
-
props.ctx$.node.content = src;
|
|
161
|
-
});
|
|
162
|
-
const File = cmp(function File(props, children) {
|
|
163
|
-
props.ctx$.node.kind = 'file';
|
|
164
|
-
props.ctx$.node.name = props.name;
|
|
165
|
-
// Code('// FILE START: ' + props.name + '\n')
|
|
166
|
-
each(children);
|
|
167
|
-
// Code('// FILE END: ' + props.name + '\n')
|
|
168
|
-
});
|
|
169
|
-
const Project = cmp(function Project(props, children) {
|
|
170
|
-
props.ctx$.node.kind = 'project';
|
|
171
|
-
props.ctx$.node.name = props.name;
|
|
172
|
-
each(children);
|
|
173
|
-
});
|
|
174
|
-
const Folder = cmp(function Folder(props, children) {
|
|
175
|
-
props.ctx$.node.kind = 'folder';
|
|
176
|
-
props.ctx$.node.name = props.name;
|
|
177
|
-
each(children);
|
|
178
|
-
});
|
|
179
123
|
return {
|
|
180
|
-
cmp,
|
|
181
|
-
each,
|
|
182
124
|
generate,
|
|
183
|
-
Project,
|
|
184
|
-
Code,
|
|
185
|
-
File,
|
|
186
|
-
Folder,
|
|
187
125
|
};
|
|
188
126
|
}
|
|
127
|
+
const Code = cmp(function Code(props) {
|
|
128
|
+
props.ctx$.node.kind = 'content';
|
|
129
|
+
let src = props.arg;
|
|
130
|
+
props.ctx$.node.content = src;
|
|
131
|
+
});
|
|
132
|
+
exports.Code = Code;
|
|
133
|
+
const File = cmp(function File(props, children) {
|
|
134
|
+
props.ctx$.node.kind = 'file';
|
|
135
|
+
props.ctx$.node.name = props.name;
|
|
136
|
+
// Code('// FILE START: ' + props.name + '\n')
|
|
137
|
+
each(children);
|
|
138
|
+
// Code('// FILE END: ' + props.name + '\n')
|
|
139
|
+
});
|
|
140
|
+
exports.File = File;
|
|
141
|
+
const Project = cmp(function Project(props, children) {
|
|
142
|
+
props.ctx$.node.kind = 'project';
|
|
143
|
+
props.ctx$.node.name = props.name;
|
|
144
|
+
each(children);
|
|
145
|
+
});
|
|
146
|
+
exports.Project = Project;
|
|
147
|
+
const Folder = cmp(function Folder(props, children) {
|
|
148
|
+
props.ctx$.node.kind = 'folder';
|
|
149
|
+
props.ctx$.node.name = props.name;
|
|
150
|
+
each(children);
|
|
151
|
+
});
|
|
152
|
+
exports.Folder = Folder;
|
|
153
|
+
function cmp(component) {
|
|
154
|
+
const cf = (props, children) => {
|
|
155
|
+
props = props || {};
|
|
156
|
+
if (null == props || 'object' !== typeof props) {
|
|
157
|
+
props = { arg: props };
|
|
158
|
+
}
|
|
159
|
+
props.ctx$ = GLOBAL.jostraca.getStore();
|
|
160
|
+
children = 'function' === typeof children ? [children] : children;
|
|
161
|
+
let node = {
|
|
162
|
+
kind: 'none',
|
|
163
|
+
children: []
|
|
164
|
+
};
|
|
165
|
+
const parent = props.ctx$.node = (props.ctx$.node || node);
|
|
166
|
+
const siblings = props.ctx$.children = (props.ctx$.children || []);
|
|
167
|
+
siblings.push(node);
|
|
168
|
+
props.ctx$.children = node.children;
|
|
169
|
+
props.ctx$.node = node;
|
|
170
|
+
let out = component(props, children);
|
|
171
|
+
props.ctx$.children = siblings;
|
|
172
|
+
props.ctx$.node = parent;
|
|
173
|
+
return out;
|
|
174
|
+
};
|
|
175
|
+
Object.defineProperty(cf, 'name', { value: component.name });
|
|
176
|
+
return cf;
|
|
177
|
+
}
|
|
178
|
+
function each(subject, apply) {
|
|
179
|
+
if (null == apply) {
|
|
180
|
+
if (Array.isArray(subject)) {
|
|
181
|
+
for (let fn of subject) {
|
|
182
|
+
fn();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
if (Array.isArray(subject)) {
|
|
188
|
+
return subject.map(apply);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
const entries = Object.entries(subject);
|
|
192
|
+
if (entries[0] && entries[0][1] && 'string' === typeof entries[0][1].name) {
|
|
193
|
+
entries.sort((a, b) => a.name < b.name ? 1 : b.name < a.name ? -1 : 0);
|
|
194
|
+
}
|
|
195
|
+
return entries.map((n, ...args) => apply(n[1], [0], ...args));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
function select(key, map) {
|
|
200
|
+
const fn = map && map[key];
|
|
201
|
+
return fn ? fn() : undefined;
|
|
202
|
+
}
|
|
189
203
|
//# sourceMappingURL=jostraca.js.map
|
package/dist/jostraca.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jostraca.js","sourceRoot":"","sources":["../src/jostraca.ts"],"names":[],"mappings":";AAAA,oDAAoD
|
|
1
|
+
{"version":3,"file":"jostraca.js","sourceRoot":"","sources":["../src/jostraca.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jostraca",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"main": "dist/jostraca.js",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"types": "dist/jostraca.d.ts",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
],
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@hapi/code": "^9.0.3",
|
|
37
|
-
"@types/node": "22.
|
|
37
|
+
"@types/node": "22.1.0",
|
|
38
38
|
"esbuild": "^0.23.0",
|
|
39
39
|
"memfs": "^4.11.1",
|
|
40
40
|
"typescript": "^5.5.4"
|
package/src/jostraca.ts
CHANGED
|
@@ -23,9 +23,11 @@ type Node = {
|
|
|
23
23
|
type Component = (props: any, children?: any) => void
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
const GLOBAL = (global as any)
|
|
27
|
+
|
|
27
28
|
|
|
28
|
-
|
|
29
|
+
|
|
30
|
+
function Jostraca() {
|
|
29
31
|
GLOBAL.jostraca = new AsyncLocalStorage()
|
|
30
32
|
|
|
31
33
|
|
|
@@ -39,6 +41,9 @@ function Jostraca() {
|
|
|
39
41
|
const ctx$ = GLOBAL.jostraca.getStore()
|
|
40
42
|
const node = ctx$.node
|
|
41
43
|
|
|
44
|
+
// console.log('JOSTRACA TOP')
|
|
45
|
+
// console.dir(node, { depth: null })
|
|
46
|
+
|
|
42
47
|
build(
|
|
43
48
|
node,
|
|
44
49
|
{
|
|
@@ -53,65 +58,7 @@ function Jostraca() {
|
|
|
53
58
|
}
|
|
54
59
|
|
|
55
60
|
|
|
56
|
-
function cmp(component: Function): Component {
|
|
57
|
-
const cf = (props: any, children?: any) => {
|
|
58
|
-
props = props || {}
|
|
59
|
-
if (null == props || 'object' !== typeof props) {
|
|
60
|
-
props = { arg: props }
|
|
61
|
-
}
|
|
62
|
-
props.ctx$ = GLOBAL.jostraca.getStore()
|
|
63
|
-
children = 'function' === typeof children ? [children] : children
|
|
64
|
-
|
|
65
|
-
let node = {
|
|
66
|
-
kind: 'content',
|
|
67
|
-
children: []
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const parent = props.ctx$.node = (props.ctx$.node || node)
|
|
71
|
-
const siblings = props.ctx$.children = (props.ctx$.children || [])
|
|
72
|
-
siblings.push(node)
|
|
73
|
-
|
|
74
|
-
props.ctx$.children = node.children
|
|
75
|
-
props.ctx$.node = node
|
|
76
|
-
|
|
77
|
-
let out = component(props, children)
|
|
78
|
-
|
|
79
|
-
props.ctx$.children = siblings
|
|
80
|
-
props.ctx$.node = parent
|
|
81
|
-
|
|
82
|
-
return out
|
|
83
|
-
}
|
|
84
|
-
Object.defineProperty(cf, 'name', { value: component.name })
|
|
85
|
-
return cf
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
function each(subject: any, apply?: any) {
|
|
90
|
-
if (null == apply) {
|
|
91
|
-
if (Array.isArray(subject)) {
|
|
92
|
-
for (let fn of subject) {
|
|
93
|
-
fn()
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
if (Array.isArray(subject)) {
|
|
99
|
-
return subject.map(apply)
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
const entries: any = Object.entries(subject)
|
|
103
|
-
if (entries[0] && entries[0][1] && 'string' === typeof entries[0][1].name) {
|
|
104
|
-
entries.sort((a: any, b: any) => a.name < b.name ? 1 : b.name < a.name ? -1 : 0)
|
|
105
|
-
}
|
|
106
|
-
return entries.map((n: any, ...args: any[]) =>
|
|
107
|
-
apply(n[1], [0], ...args))
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
|
|
113
61
|
function build(topnode: Node, ctx: any) {
|
|
114
|
-
// console.dir(topnode, { depth: null })
|
|
115
62
|
step(topnode, ctx)
|
|
116
63
|
}
|
|
117
64
|
|
|
@@ -186,70 +133,132 @@ function Jostraca() {
|
|
|
186
133
|
|
|
187
134
|
content: {
|
|
188
135
|
before(node: Node, ctx: any) {
|
|
189
|
-
const
|
|
190
|
-
ctx.current.file.content.push(
|
|
136
|
+
const content = ctx.current.content = node
|
|
137
|
+
ctx.current.file.content.push(content.content)
|
|
191
138
|
},
|
|
192
139
|
|
|
193
140
|
after(_node: Node, _ctx: any) {
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
none: {
|
|
146
|
+
before(_node: Node, ctx: any) {
|
|
147
|
+
},
|
|
194
148
|
|
|
149
|
+
after(_node: Node, _ctx: any) {
|
|
195
150
|
},
|
|
196
151
|
},
|
|
197
152
|
|
|
153
|
+
}
|
|
154
|
+
|
|
198
155
|
|
|
156
|
+
return {
|
|
157
|
+
generate,
|
|
199
158
|
}
|
|
159
|
+
}
|
|
200
160
|
|
|
201
161
|
|
|
162
|
+
const Code = cmp(function Code(props: any) {
|
|
163
|
+
props.ctx$.node.kind = 'content'
|
|
164
|
+
let src = props.arg
|
|
165
|
+
props.ctx$.node.content = src
|
|
166
|
+
})
|
|
202
167
|
|
|
203
|
-
const Code = cmp(function Code(props: any) {
|
|
204
|
-
let src = props.arg
|
|
205
|
-
props.ctx$.node.content = src
|
|
206
|
-
})
|
|
207
168
|
|
|
169
|
+
const File = cmp(function File(props: any, children: any) {
|
|
170
|
+
props.ctx$.node.kind = 'file'
|
|
171
|
+
props.ctx$.node.name = props.name
|
|
208
172
|
|
|
209
|
-
|
|
210
|
-
props.ctx$.node.kind = 'file'
|
|
211
|
-
props.ctx$.node.name = props.name
|
|
173
|
+
// Code('// FILE START: ' + props.name + '\n')
|
|
212
174
|
|
|
213
|
-
|
|
175
|
+
each(children)
|
|
214
176
|
|
|
215
|
-
|
|
177
|
+
// Code('// FILE END: ' + props.name + '\n')
|
|
178
|
+
})
|
|
216
179
|
|
|
217
|
-
// Code('// FILE END: ' + props.name + '\n')
|
|
218
|
-
})
|
|
219
180
|
|
|
181
|
+
const Project: Component = cmp(function Project(props: any, children: any) {
|
|
182
|
+
props.ctx$.node.kind = 'project'
|
|
183
|
+
props.ctx$.node.name = props.name
|
|
220
184
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
props.ctx$.node.name = props.name
|
|
185
|
+
each(children)
|
|
186
|
+
})
|
|
224
187
|
|
|
225
|
-
each(children)
|
|
226
|
-
})
|
|
227
188
|
|
|
189
|
+
const Folder = cmp(function Folder(props: any, children: any) {
|
|
190
|
+
props.ctx$.node.kind = 'folder'
|
|
191
|
+
props.ctx$.node.name = props.name
|
|
228
192
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
props.ctx$.node.name = props.name
|
|
193
|
+
each(children)
|
|
194
|
+
})
|
|
232
195
|
|
|
233
|
-
each(children)
|
|
234
|
-
})
|
|
235
196
|
|
|
197
|
+
function cmp(component: Function): Component {
|
|
198
|
+
const cf = (props: any, children?: any) => {
|
|
199
|
+
props = props || {}
|
|
200
|
+
if (null == props || 'object' !== typeof props) {
|
|
201
|
+
props = { arg: props }
|
|
202
|
+
}
|
|
203
|
+
props.ctx$ = GLOBAL.jostraca.getStore()
|
|
204
|
+
children = 'function' === typeof children ? [children] : children
|
|
236
205
|
|
|
206
|
+
let node = {
|
|
207
|
+
kind: 'none',
|
|
208
|
+
children: []
|
|
209
|
+
}
|
|
237
210
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
211
|
+
const parent = props.ctx$.node = (props.ctx$.node || node)
|
|
212
|
+
const siblings = props.ctx$.children = (props.ctx$.children || [])
|
|
213
|
+
siblings.push(node)
|
|
214
|
+
|
|
215
|
+
props.ctx$.children = node.children
|
|
216
|
+
props.ctx$.node = node
|
|
217
|
+
|
|
218
|
+
let out = component(props, children)
|
|
219
|
+
|
|
220
|
+
props.ctx$.children = siblings
|
|
221
|
+
props.ctx$.node = parent
|
|
222
|
+
|
|
223
|
+
return out
|
|
224
|
+
}
|
|
225
|
+
Object.defineProperty(cf, 'name', { value: component.name })
|
|
226
|
+
return cf
|
|
227
|
+
}
|
|
242
228
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
229
|
+
|
|
230
|
+
function each(subject: any, apply?: any) {
|
|
231
|
+
if (null == apply) {
|
|
232
|
+
if (Array.isArray(subject)) {
|
|
233
|
+
for (let fn of subject) {
|
|
234
|
+
fn()
|
|
235
|
+
}
|
|
236
|
+
}
|
|
247
237
|
}
|
|
238
|
+
else {
|
|
239
|
+
if (Array.isArray(subject)) {
|
|
240
|
+
return subject.map(apply)
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
const entries: any = Object.entries(subject)
|
|
244
|
+
if (entries[0] && entries[0][1] && 'string' === typeof entries[0][1].name) {
|
|
245
|
+
entries.sort((a: any, b: any) => a.name < b.name ? 1 : b.name < a.name ? -1 : 0)
|
|
246
|
+
}
|
|
247
|
+
return entries.map((n: any, ...args: any[]) =>
|
|
248
|
+
apply(n[1], [0], ...args))
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
248
252
|
|
|
249
253
|
|
|
254
|
+
function select(key: any, map: Record<string, Function>) {
|
|
255
|
+
const fn = map && map[key]
|
|
256
|
+
return fn ? fn() : undefined
|
|
250
257
|
}
|
|
251
258
|
|
|
252
259
|
|
|
260
|
+
|
|
261
|
+
|
|
253
262
|
export type {
|
|
254
263
|
JostracaOptions,
|
|
255
264
|
Component,
|
|
@@ -258,4 +267,13 @@ export type {
|
|
|
258
267
|
|
|
259
268
|
export {
|
|
260
269
|
Jostraca,
|
|
270
|
+
cmp,
|
|
271
|
+
|
|
272
|
+
each,
|
|
273
|
+
select,
|
|
274
|
+
|
|
275
|
+
Project,
|
|
276
|
+
Code,
|
|
277
|
+
File,
|
|
278
|
+
Folder,
|
|
261
279
|
}
|