pacc 4.25.1 → 4.26.0
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/README.md +27 -9
- package/package.json +1 -1
- package/src/expand.mjs +4 -2
- package/src/expression.mjs +36 -20
- package/src/tokens.mjs +1 -1
- package/types/expand.d.mts +7 -3
package/README.md
CHANGED
|
@@ -79,26 +79,28 @@ const result = getAttribute({ a: [0,{ b: 4 }]}, "a[1].b");
|
|
|
79
79
|
* [priority\_attribute](#priority_attribute)
|
|
80
80
|
* [timeout\_attribute](#timeout_attribute)
|
|
81
81
|
* [language\_attribute](#language_attribute)
|
|
82
|
-
* [
|
|
82
|
+
* [expand](#expand)
|
|
83
83
|
* [Parameters](#parameters-3)
|
|
84
|
-
* [
|
|
84
|
+
* [filter](#filter)
|
|
85
85
|
* [Parameters](#parameters-4)
|
|
86
|
-
* [
|
|
86
|
+
* [setAttributes](#setattributes)
|
|
87
87
|
* [Parameters](#parameters-5)
|
|
88
|
+
* [getAttributes](#getattributes)
|
|
89
|
+
* [Parameters](#parameters-6)
|
|
88
90
|
* [tokens](#tokens)
|
|
89
91
|
* [tokens](#tokens-1)
|
|
90
|
-
* [Parameters](#parameters-6)
|
|
91
|
-
* [setAttribute](#setattribute)
|
|
92
92
|
* [Parameters](#parameters-7)
|
|
93
|
-
* [
|
|
93
|
+
* [setAttribute](#setattribute)
|
|
94
94
|
* [Parameters](#parameters-8)
|
|
95
|
-
* [
|
|
95
|
+
* [getAttribute](#getattribute)
|
|
96
96
|
* [Parameters](#parameters-9)
|
|
97
|
+
* [getAttributeAndOperator](#getattributeandoperator)
|
|
98
|
+
* [Parameters](#parameters-10)
|
|
97
99
|
* [lookup](#lookup)
|
|
98
100
|
* [Token](#token)
|
|
99
101
|
* [Properties](#properties-1)
|
|
100
102
|
* [createToken](#createtoken)
|
|
101
|
-
* [Parameters](#parameters-
|
|
103
|
+
* [Parameters](#parameters-11)
|
|
102
104
|
* [PLUS](#plus)
|
|
103
105
|
* [MINUS](#minus)
|
|
104
106
|
* [STAR](#star)
|
|
@@ -135,7 +137,7 @@ Create attributes from its definition.
|
|
|
135
137
|
### Parameters
|
|
136
138
|
|
|
137
139
|
* `newDefinitions` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
|
|
138
|
-
* `presentDefinitions` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?** optional
|
|
140
|
+
* `presentDefinitions` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?** optional merge in attributes
|
|
139
141
|
|
|
140
142
|
Returns **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** attributes
|
|
141
143
|
|
|
@@ -367,6 +369,22 @@ Type: [AttributeDefinition](#attributedefinition)
|
|
|
367
369
|
|
|
368
370
|
Type: [AttributeDefinition](#attributedefinition)
|
|
369
371
|
|
|
372
|
+
## expand
|
|
373
|
+
|
|
374
|
+
Expand expressions inside of object graphs.
|
|
375
|
+
|
|
376
|
+
### Parameters
|
|
377
|
+
|
|
378
|
+
* `object` **any** 
|
|
379
|
+
* `context` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** (optional, default `{}`)
|
|
380
|
+
|
|
381
|
+
* `context.root` **any** 
|
|
382
|
+
* `context.stopClass` **[function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)?** 
|
|
383
|
+
* `context.leadIn` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?** 
|
|
384
|
+
* `context.leadOut` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?** 
|
|
385
|
+
|
|
386
|
+
Returns **any** 
|
|
387
|
+
|
|
370
388
|
## filter
|
|
371
389
|
|
|
372
390
|
Generate filter function.
|
package/package.json
CHANGED
package/src/expand.mjs
CHANGED
|
@@ -3,11 +3,13 @@ import { parse } from "./expression.mjs";
|
|
|
3
3
|
const maxNestingLevel = 5;
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Expand expressions inside of object graphs.
|
|
7
7
|
* @param {any} object
|
|
8
8
|
* @param {Object} context
|
|
9
9
|
* @param {any} context.root
|
|
10
|
-
* @param {function} context.stopClass
|
|
10
|
+
* @param {function} [context.stopClass]
|
|
11
|
+
* @param {string} [context.leadIn]
|
|
12
|
+
* @param {string} [context.leadOut]
|
|
11
13
|
* @returns {any}
|
|
12
14
|
*/
|
|
13
15
|
export function expand(object, context = {}) {
|
package/src/expression.mjs
CHANGED
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
PLUS,
|
|
19
19
|
MINUS,
|
|
20
20
|
IDENTIFIER,
|
|
21
|
+
COMMA,
|
|
21
22
|
EOF
|
|
22
23
|
} from "./tokens.mjs";
|
|
23
24
|
|
|
@@ -121,10 +122,10 @@ export function parse(input, context = {}) {
|
|
|
121
122
|
advance();
|
|
122
123
|
};
|
|
123
124
|
|
|
124
|
-
const nud = (
|
|
125
|
-
switch (
|
|
125
|
+
const nud = (last, left) => {
|
|
126
|
+
switch (last.type) {
|
|
126
127
|
case "prefix":
|
|
127
|
-
switch (
|
|
128
|
+
switch (last) {
|
|
128
129
|
case OPEN_ROUND: {
|
|
129
130
|
const node = expression(0);
|
|
130
131
|
expect(CLOSE_ROUND);
|
|
@@ -142,66 +143,66 @@ export function parse(input, context = {}) {
|
|
|
142
143
|
return node;
|
|
143
144
|
}
|
|
144
145
|
}
|
|
145
|
-
return { token, left, right: expression(
|
|
146
|
+
return { token: last, left, right: expression(last.precedence) };
|
|
146
147
|
case "eof":
|
|
147
148
|
error("unexpected EOF");
|
|
148
149
|
}
|
|
149
150
|
|
|
150
|
-
switch (typeof
|
|
151
|
+
switch (typeof last) {
|
|
151
152
|
case "string":
|
|
152
153
|
case "number":
|
|
153
154
|
case "bigint":
|
|
154
155
|
case "boolean":
|
|
155
|
-
return
|
|
156
|
+
return last;
|
|
156
157
|
}
|
|
157
158
|
|
|
158
|
-
if (
|
|
159
|
+
if (last === IDENTIFIER) {
|
|
159
160
|
return { eval: pathEval, path: [value] };
|
|
160
161
|
}
|
|
161
162
|
|
|
162
|
-
return { token };
|
|
163
|
+
return { token: last };
|
|
163
164
|
};
|
|
164
165
|
|
|
165
|
-
const led = (
|
|
166
|
-
switch (
|
|
166
|
+
const led = (last, left) => {
|
|
167
|
+
switch (last.type) {
|
|
167
168
|
case "infixr": {
|
|
168
|
-
const right = expression(
|
|
169
|
+
const right = expression(last.precedence - 1);
|
|
169
170
|
if (typeof left === typeof right) {
|
|
170
171
|
switch (typeof left) {
|
|
171
172
|
case "string":
|
|
172
173
|
case "number":
|
|
173
174
|
case "bigint":
|
|
174
175
|
case "boolean":
|
|
175
|
-
return binop(
|
|
176
|
+
return binop(last, left, right, binopError);
|
|
176
177
|
}
|
|
177
178
|
}
|
|
178
179
|
|
|
179
180
|
return {
|
|
180
181
|
eval: (node, current) =>
|
|
181
182
|
binop(
|
|
182
|
-
|
|
183
|
+
last,
|
|
183
184
|
left.eval ? left.eval(left, current) : left,
|
|
184
185
|
right.eval ? right.eval(right, current) : right,
|
|
185
186
|
binopError
|
|
186
187
|
),
|
|
187
|
-
|
|
188
|
+
last,
|
|
188
189
|
left,
|
|
189
190
|
right
|
|
190
191
|
};
|
|
191
192
|
}
|
|
192
193
|
|
|
193
194
|
case "infix": {
|
|
194
|
-
let right = expression(
|
|
195
|
+
let right = expression(last.precedence);
|
|
195
196
|
|
|
196
197
|
if (typeof left === typeof right) {
|
|
197
198
|
switch (typeof left) {
|
|
198
199
|
case "string":
|
|
199
200
|
case "number":
|
|
200
201
|
case "bigint":
|
|
201
|
-
return binop(
|
|
202
|
+
return binop(last, left, right, binopError);
|
|
202
203
|
}
|
|
203
204
|
}
|
|
204
|
-
if (
|
|
205
|
+
if (last === DOT) {
|
|
205
206
|
if (left.path) {
|
|
206
207
|
left.path.push(...right.path);
|
|
207
208
|
return left;
|
|
@@ -221,18 +222,33 @@ export function parse(input, context = {}) {
|
|
|
221
222
|
return {
|
|
222
223
|
eval: (node, current) =>
|
|
223
224
|
binop(
|
|
224
|
-
|
|
225
|
+
last,
|
|
225
226
|
left.eval ? left.eval(left, current) : left,
|
|
226
227
|
right.eval ? right.eval(right, current) : right,
|
|
227
228
|
binopError
|
|
228
229
|
),
|
|
229
|
-
token,
|
|
230
|
+
token: last,
|
|
230
231
|
left,
|
|
231
232
|
right
|
|
232
233
|
};
|
|
233
234
|
}
|
|
234
235
|
case "prefix":
|
|
235
|
-
switch (
|
|
236
|
+
switch (last) {
|
|
237
|
+
case OPEN_ROUND:
|
|
238
|
+
{
|
|
239
|
+
const args = [];
|
|
240
|
+
while (token !== CLOSE_ROUND) {
|
|
241
|
+
args.push(expression(0));
|
|
242
|
+
if (token === COMMA) {
|
|
243
|
+
advance();
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
left.path.push(args);
|
|
247
|
+
left.eval = node =>
|
|
248
|
+
context.globals[node.path[0]](...node.path[1]);
|
|
249
|
+
return left;
|
|
250
|
+
}
|
|
251
|
+
break;
|
|
236
252
|
case OPEN_BRACKET: {
|
|
237
253
|
const predicate = expression(0);
|
|
238
254
|
expect(CLOSE_BRACKET);
|
package/src/tokens.mjs
CHANGED
|
@@ -34,7 +34,7 @@ export /** @type {Token} */ const GREATER_EQUAL = createToken(
|
|
|
34
34
|
);
|
|
35
35
|
export /** @type {Token} */ const LESS = createToken("<", 40, "infixr");
|
|
36
36
|
export /** @type {Token} */ const LESS_EQUAL = createToken("<=", 40, "infixr");
|
|
37
|
-
export /** @type {Token} */ const OPEN_ROUND = createToken("(",
|
|
37
|
+
export /** @type {Token} */ const OPEN_ROUND = createToken("(", 40, "prefix");
|
|
38
38
|
export /** @type {Token} */ const CLOSE_ROUND = createToken(")", 0, "infix");
|
|
39
39
|
export /** @type {Token} */ const OPEN_BRACKET = createToken("[", 10, "prefix");
|
|
40
40
|
export /** @type {Token} */ const CLOSE_BRACKET = createToken("]", 0, "infix");
|
package/types/expand.d.mts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Expand expressions inside of object graphs.
|
|
3
3
|
* @param {any} object
|
|
4
4
|
* @param {Object} context
|
|
5
5
|
* @param {any} context.root
|
|
6
|
-
* @param {function} context.stopClass
|
|
6
|
+
* @param {function} [context.stopClass]
|
|
7
|
+
* @param {string} [context.leadIn]
|
|
8
|
+
* @param {string} [context.leadOut]
|
|
7
9
|
* @returns {any}
|
|
8
10
|
*/
|
|
9
11
|
export function expand(object: any, context?: {
|
|
10
12
|
root: any;
|
|
11
|
-
stopClass
|
|
13
|
+
stopClass?: Function;
|
|
14
|
+
leadIn?: string;
|
|
15
|
+
leadOut?: string;
|
|
12
16
|
}): any;
|