circuitscript 0.4.0 → 0.5.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.
Files changed (74) hide show
  1. package/dist/cjs/BaseVisitor.js +16 -10
  2. package/dist/cjs/BomGeneration.js +3 -3
  3. package/dist/cjs/ComponentMatchConditions.js +2 -2
  4. package/dist/cjs/annotate/RefdesAnnotationVisitor.js +4 -0
  5. package/dist/cjs/builtinMethods.js +10 -10
  6. package/dist/cjs/execute.js +25 -23
  7. package/dist/cjs/globals.js +7 -14
  8. package/dist/cjs/helpers.js +4 -3
  9. package/dist/cjs/index.js +6 -2
  10. package/dist/cjs/lexer.js +8 -4
  11. package/dist/cjs/objects/BlockTypes.js +10 -0
  12. package/dist/cjs/objects/NumericValue.js +196 -0
  13. package/dist/cjs/objects/ParamDefinition.js +1 -149
  14. package/dist/cjs/objects/PercentageValue.js +15 -0
  15. package/dist/cjs/objects/PinDefinition.js +2 -2
  16. package/dist/cjs/objects/WrappedNumber.js +15 -0
  17. package/dist/cjs/pipeline.js +2 -2
  18. package/dist/cjs/render/draw_symbols.js +78 -78
  19. package/dist/cjs/render/export.js +2 -2
  20. package/dist/cjs/render/geometry.js +11 -12
  21. package/dist/cjs/render/graph.js +2 -2
  22. package/dist/cjs/render/layout.js +46 -46
  23. package/dist/cjs/render/render.js +19 -19
  24. package/dist/cjs/semantic-tokens/SemanticTokenVisitor.js +59 -59
  25. package/dist/cjs/utils.js +21 -83
  26. package/dist/cjs/visitor.js +45 -31
  27. package/dist/esm/BaseVisitor.js +8 -2
  28. package/dist/esm/BomGeneration.js +1 -1
  29. package/dist/esm/ComponentMatchConditions.js +1 -1
  30. package/dist/esm/annotate/RefdesAnnotationVisitor.js +4 -0
  31. package/dist/esm/builtinMethods.js +2 -2
  32. package/dist/esm/execute.js +4 -2
  33. package/dist/esm/globals.js +1 -8
  34. package/dist/esm/helpers.js +3 -2
  35. package/dist/esm/index.js +6 -2
  36. package/dist/esm/lexer.js +8 -4
  37. package/dist/esm/objects/BlockTypes.js +7 -0
  38. package/dist/esm/objects/NumericValue.js +189 -0
  39. package/dist/esm/objects/ParamDefinition.js +0 -148
  40. package/dist/esm/objects/PercentageValue.js +12 -0
  41. package/dist/esm/objects/PinDefinition.js +1 -1
  42. package/dist/esm/objects/WrappedNumber.js +12 -0
  43. package/dist/esm/pipeline.js +2 -2
  44. package/dist/esm/render/draw_symbols.js +2 -2
  45. package/dist/esm/render/export.js +1 -1
  46. package/dist/esm/render/geometry.js +1 -2
  47. package/dist/esm/render/graph.js +1 -1
  48. package/dist/esm/render/layout.js +2 -2
  49. package/dist/esm/render/render.js +1 -1
  50. package/dist/esm/semantic-tokens/SemanticTokenVisitor.js +58 -58
  51. package/dist/esm/utils.js +16 -74
  52. package/dist/esm/visitor.js +17 -3
  53. package/dist/types/ComponentMatchConditions.d.ts +1 -1
  54. package/dist/types/annotate/RefdesAnnotationVisitor.d.ts +3 -1
  55. package/dist/types/execute.d.ts +4 -2
  56. package/dist/types/globals.d.ts +1 -7
  57. package/dist/types/helpers.d.ts +2 -2
  58. package/dist/types/index.d.ts +6 -2
  59. package/dist/types/lexer.d.ts +1 -0
  60. package/dist/types/objects/BlockTypes.d.ts +6 -0
  61. package/dist/types/objects/ClassComponent.d.ts +1 -1
  62. package/dist/types/objects/ExecutionScope.d.ts +2 -1
  63. package/dist/types/objects/NumericValue.d.ts +35 -0
  64. package/dist/types/objects/ParamDefinition.d.ts +0 -41
  65. package/dist/types/objects/PercentageValue.d.ts +6 -0
  66. package/dist/types/objects/PinDefinition.d.ts +1 -1
  67. package/dist/types/objects/WrappedNumber.d.ts +6 -0
  68. package/dist/types/objects/types.d.ts +2 -1
  69. package/dist/types/render/draw_symbols.d.ts +1 -1
  70. package/dist/types/render/geometry.d.ts +1 -1
  71. package/dist/types/render/layout.d.ts +1 -1
  72. package/dist/types/semantic-tokens/SemanticTokenVisitor.d.ts +3 -4
  73. package/dist/types/utils.d.ts +1 -7
  74. package/package.json +1 -1
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.roundValue = exports.resolveToNumericValue = exports.getNumberExponential = exports.getNumberExponentialText = exports.numeric = exports.NumberOperator = exports.NumericValue = void 0;
4
+ const utils_js_1 = require("../utils.js");
5
+ const big_js_1 = require("big.js");
6
+ const WrappedNumber_js_1 = require("./WrappedNumber.js");
7
+ class NumericValue {
8
+ constructor(value, prefix = 0) {
9
+ this.value = value;
10
+ if (typeof value === 'string') {
11
+ const matches = value.match(/^([\d]+(?:.[\d]+)?)([\w]*)$/);
12
+ if (matches) {
13
+ this.valuePart = new big_js_1.Big(matches[1]);
14
+ this.prefixPart = getNumberExponential(matches[2]);
15
+ }
16
+ else {
17
+ throw new Error("Invalid numeric value: " + value);
18
+ }
19
+ }
20
+ else {
21
+ this.valuePart = new big_js_1.Big(value);
22
+ this.prefixPart = prefix;
23
+ this.value = this.valuePart.toString()
24
+ + getNumberExponentialText(prefix);
25
+ }
26
+ }
27
+ toString() {
28
+ return 'numeric:' + this.value;
29
+ }
30
+ toDisplayString() {
31
+ if (typeof this.value === 'number') {
32
+ return this.value.toString();
33
+ }
34
+ else {
35
+ return this.valuePart.toString()
36
+ + getNumberExponentialText(this.prefixPart);
37
+ }
38
+ }
39
+ toNumber() {
40
+ return this.toBigNumber().toNumber();
41
+ }
42
+ toBigNumber() {
43
+ return this.valuePart.mul(new big_js_1.Big(Math.pow(10, this.prefixPart)));
44
+ }
45
+ div(value) {
46
+ if (typeof value === 'number') {
47
+ value = numeric(value);
48
+ }
49
+ return resolveToNumericValue(this.toBigNumber().div(value.toBigNumber()));
50
+ }
51
+ half() {
52
+ return this.div(2);
53
+ }
54
+ mul(value) {
55
+ if (typeof value === 'number') {
56
+ value = numeric(value);
57
+ }
58
+ return resolveToNumericValue(this.toBigNumber().mul(value.toBigNumber()));
59
+ }
60
+ add(value) {
61
+ if (typeof value === 'number') {
62
+ value = numeric(value);
63
+ }
64
+ return resolveToNumericValue(this.toBigNumber().add(value.toBigNumber()));
65
+ }
66
+ sub(value) {
67
+ if (typeof value === 'number') {
68
+ value = numeric(value);
69
+ }
70
+ return resolveToNumericValue(this.toBigNumber().sub(value.toBigNumber()));
71
+ }
72
+ mod(value) {
73
+ if (typeof value === 'number') {
74
+ value = numeric(value);
75
+ }
76
+ return resolveToNumericValue(this.toBigNumber().mod(value.toBigNumber()));
77
+ }
78
+ neg() {
79
+ return resolveToNumericValue(this.toBigNumber().neg());
80
+ }
81
+ eq(value) {
82
+ return this.toBigNumber().eq(value.toBigNumber());
83
+ }
84
+ }
85
+ exports.NumericValue = NumericValue;
86
+ class NumberOperator {
87
+ prepare(value) {
88
+ if (typeof value === 'number') {
89
+ return new WrappedNumber_js_1.WrappedNumber(value);
90
+ }
91
+ else if ((0, utils_js_1.isReference)(value)) {
92
+ return value.value;
93
+ }
94
+ else {
95
+ return value;
96
+ }
97
+ }
98
+ multiply(value1, value2) {
99
+ const big1 = new big_js_1.Big(value1.toNumber());
100
+ const big2 = new big_js_1.Big(value2.toNumber());
101
+ return resolveToNumericValue(big1.mul(big2));
102
+ }
103
+ divide(value1, value2) {
104
+ const big1 = new big_js_1.Big(value1.toNumber());
105
+ const big2 = new big_js_1.Big(value2.toNumber());
106
+ return resolveToNumericValue(big1.div(big2));
107
+ }
108
+ addition(value1, value2) {
109
+ const big1 = new big_js_1.Big(value1.toNumber());
110
+ const big2 = new big_js_1.Big(value2.toNumber());
111
+ return resolveToNumericValue(big1.add(big2));
112
+ }
113
+ subtraction(value1, value2) {
114
+ const big1 = new big_js_1.Big(value1.toNumber());
115
+ const big2 = new big_js_1.Big(value2.toNumber());
116
+ return resolveToNumericValue(big1.sub(big2));
117
+ }
118
+ modulus(value1, value2) {
119
+ const big1 = new big_js_1.Big(value1.toNumber());
120
+ const big2 = new big_js_1.Big(value2.toNumber());
121
+ return resolveToNumericValue(big1.mod(big2));
122
+ }
123
+ }
124
+ exports.NumberOperator = NumberOperator;
125
+ function numeric(value) {
126
+ return new NumericValue(value);
127
+ }
128
+ exports.numeric = numeric;
129
+ function getNumberExponentialText(value) {
130
+ switch (value) {
131
+ case -15:
132
+ return 'f';
133
+ case -12:
134
+ return 'p';
135
+ case -9:
136
+ return 'n';
137
+ case -6:
138
+ return 'u';
139
+ case -3:
140
+ return 'm';
141
+ case 3:
142
+ return 'k';
143
+ case 6:
144
+ return 'M';
145
+ case 9:
146
+ return 'G';
147
+ case 0:
148
+ default:
149
+ return '';
150
+ }
151
+ }
152
+ exports.getNumberExponentialText = getNumberExponentialText;
153
+ function getNumberExponential(value) {
154
+ value = value.trim();
155
+ switch (value) {
156
+ case 'G':
157
+ return 9;
158
+ case 'M':
159
+ return 6;
160
+ case 'k':
161
+ case 'K':
162
+ return 3;
163
+ case 'm':
164
+ return -3;
165
+ case 'u':
166
+ return -6;
167
+ case 'n':
168
+ return -9;
169
+ case 'p':
170
+ return -12;
171
+ case 'f':
172
+ return -15;
173
+ default:
174
+ return 0;
175
+ }
176
+ }
177
+ exports.getNumberExponential = getNumberExponential;
178
+ function resolveToNumericValue(value) {
179
+ if (value.toNumber() === 0) {
180
+ return new NumericValue(0);
181
+ }
182
+ const isNeg = value.lt(0);
183
+ const positiveValue = isNeg ? value.neg() : value;
184
+ const prefixPart = Math.floor(Math.log10(positiveValue.toNumber()) / 3);
185
+ let useValue = value;
186
+ if (prefixPart !== 0) {
187
+ const tmpValue1 = positiveValue.div(Math.pow(10, prefixPart * 3));
188
+ useValue = isNeg ? tmpValue1.neg() : tmpValue1;
189
+ }
190
+ return new NumericValue(useValue, prefixPart * 3);
191
+ }
192
+ exports.resolveToNumericValue = resolveToNumericValue;
193
+ function roundValue(value) {
194
+ return resolveToNumericValue(new big_js_1.Big(value.toBigNumber().toFixed(7)));
195
+ }
196
+ exports.roundValue = roundValue;
@@ -1,8 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NumberOperator = exports.WrappedNumber = exports.PercentageValue = exports.numeric = exports.NumericValue = exports.ParamDefinition = void 0;
4
- const utils_js_1 = require("../utils.js");
5
- const big_js_1 = require("big.js");
3
+ exports.ParamDefinition = void 0;
6
4
  class ParamDefinition {
7
5
  constructor(paramName, paramValue) {
8
6
  this.paramName = paramName;
@@ -10,149 +8,3 @@ class ParamDefinition {
10
8
  }
11
9
  }
12
10
  exports.ParamDefinition = ParamDefinition;
13
- class NumericValue {
14
- constructor(value, prefix = 0) {
15
- this.value = value;
16
- if (typeof value === 'string') {
17
- const matches = value.match(/^([\d]+(?:.[\d]+)?)([\w]*)$/);
18
- if (matches) {
19
- this.valuePart = new big_js_1.Big(matches[1]);
20
- this.prefixPart = (0, utils_js_1.getNumberExponential)(matches[2]);
21
- }
22
- else {
23
- throw new Error("Invalid numeric value: " + value);
24
- }
25
- }
26
- else {
27
- this.valuePart = new big_js_1.Big(value);
28
- this.prefixPart = prefix;
29
- this.value = this.valuePart.toString()
30
- + (0, utils_js_1.getNumberExponentialText)(prefix);
31
- }
32
- }
33
- toString() {
34
- return 'numeric:' + this.value;
35
- }
36
- toDisplayString() {
37
- if (typeof this.value === 'number') {
38
- return this.value.toString();
39
- }
40
- else {
41
- return this.valuePart.toString()
42
- + (0, utils_js_1.getNumberExponentialText)(this.prefixPart);
43
- }
44
- }
45
- toNumber() {
46
- return this.toBigNumber().toNumber();
47
- }
48
- toBigNumber() {
49
- return this.valuePart.mul(new big_js_1.Big(Math.pow(10, this.prefixPart)));
50
- }
51
- div(value) {
52
- if (typeof value === 'number') {
53
- value = numeric(value);
54
- }
55
- return (0, utils_js_1.resolveToNumericValue)(this.toBigNumber().div(value.toBigNumber()));
56
- }
57
- half() {
58
- return this.div(2);
59
- }
60
- mul(value) {
61
- if (typeof value === 'number') {
62
- value = numeric(value);
63
- }
64
- return (0, utils_js_1.resolveToNumericValue)(this.toBigNumber().mul(value.toBigNumber()));
65
- }
66
- add(value) {
67
- if (typeof value === 'number') {
68
- value = numeric(value);
69
- }
70
- return (0, utils_js_1.resolveToNumericValue)(this.toBigNumber().add(value.toBigNumber()));
71
- }
72
- sub(value) {
73
- if (typeof value === 'number') {
74
- value = numeric(value);
75
- }
76
- return (0, utils_js_1.resolveToNumericValue)(this.toBigNumber().sub(value.toBigNumber()));
77
- }
78
- mod(value) {
79
- if (typeof value === 'number') {
80
- value = numeric(value);
81
- }
82
- return (0, utils_js_1.resolveToNumericValue)(this.toBigNumber().mod(value.toBigNumber()));
83
- }
84
- neg() {
85
- return (0, utils_js_1.resolveToNumericValue)(this.toBigNumber().neg());
86
- }
87
- eq(value) {
88
- return this.toBigNumber().eq(value.toBigNumber());
89
- }
90
- }
91
- exports.NumericValue = NumericValue;
92
- function numeric(value) {
93
- return new NumericValue(value);
94
- }
95
- exports.numeric = numeric;
96
- class PercentageValue {
97
- constructor(value) {
98
- this.value = value;
99
- }
100
- toString() {
101
- return this.value.toString();
102
- }
103
- toNumber() {
104
- return 0;
105
- }
106
- }
107
- exports.PercentageValue = PercentageValue;
108
- class WrappedNumber {
109
- constructor(value) {
110
- this.value = value;
111
- }
112
- toString() {
113
- return this.value.toString();
114
- }
115
- toNumber() {
116
- return this.value;
117
- }
118
- }
119
- exports.WrappedNumber = WrappedNumber;
120
- class NumberOperator {
121
- prepare(value) {
122
- if (typeof value === 'number') {
123
- return new WrappedNumber(value);
124
- }
125
- else if ((0, utils_js_1.isReference)(value)) {
126
- return value.value;
127
- }
128
- else {
129
- return value;
130
- }
131
- }
132
- multiply(value1, value2) {
133
- const big1 = new big_js_1.Big(value1.toNumber());
134
- const big2 = new big_js_1.Big(value2.toNumber());
135
- return (0, utils_js_1.resolveToNumericValue)(big1.mul(big2));
136
- }
137
- divide(value1, value2) {
138
- const big1 = new big_js_1.Big(value1.toNumber());
139
- const big2 = new big_js_1.Big(value2.toNumber());
140
- return (0, utils_js_1.resolveToNumericValue)(big1.div(big2));
141
- }
142
- addition(value1, value2) {
143
- const big1 = new big_js_1.Big(value1.toNumber());
144
- const big2 = new big_js_1.Big(value2.toNumber());
145
- return (0, utils_js_1.resolveToNumericValue)(big1.add(big2));
146
- }
147
- subtraction(value1, value2) {
148
- const big1 = new big_js_1.Big(value1.toNumber());
149
- const big2 = new big_js_1.Big(value2.toNumber());
150
- return (0, utils_js_1.resolveToNumericValue)(big1.sub(big2));
151
- }
152
- modulus(value1, value2) {
153
- const big1 = new big_js_1.Big(value1.toNumber());
154
- const big2 = new big_js_1.Big(value2.toNumber());
155
- return (0, utils_js_1.resolveToNumericValue)(big1.mod(big2));
156
- }
157
- }
158
- exports.NumberOperator = NumberOperator;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PercentageValue = void 0;
4
+ class PercentageValue {
5
+ constructor(value) {
6
+ this.value = value;
7
+ }
8
+ toString() {
9
+ return this.value.toString();
10
+ }
11
+ toNumber() {
12
+ return 0;
13
+ }
14
+ }
15
+ exports.PercentageValue = PercentageValue;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getPinDefinition = exports.isPinId = exports.PortSide = exports.PinIdType = exports.PinDefinition = exports.PinId = void 0;
4
4
  const utils_js_1 = require("../utils.js");
5
- const ParamDefinition_js_1 = require("./ParamDefinition.js");
5
+ const NumericValue_js_1 = require("./NumericValue.js");
6
6
  const PinTypes_js_1 = require("./PinTypes.js");
7
7
  class PinId {
8
8
  constructor(value) {
@@ -44,7 +44,7 @@ class PinId {
44
44
  return '';
45
45
  }
46
46
  static from(value) {
47
- if (value instanceof ParamDefinition_js_1.NumericValue) {
47
+ if (value instanceof NumericValue_js_1.NumericValue) {
48
48
  return new PinId(value.toNumber());
49
49
  }
50
50
  return new PinId(value);
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WrappedNumber = void 0;
4
+ class WrappedNumber {
5
+ constructor(value) {
6
+ this.value = value;
7
+ }
8
+ toString() {
9
+ return this.value.toString();
10
+ }
11
+ toNumber() {
12
+ return this.value;
13
+ }
14
+ }
15
+ exports.WrappedNumber = WrappedNumber;
@@ -60,7 +60,7 @@ async function renderScriptCustom(scriptData, outputPath, options, parseHandlers
60
60
  visitor.log(`current file: ${inputPath}`);
61
61
  visitor.onImportFile = (visitor, filePath, fileData, errorHandler, fileLineOffset = 0) => {
62
62
  visitor.enterFile(filePath);
63
- errors.splice(0, errors.length);
63
+ const numErrors = errors.length;
64
64
  const result = (0, parser_js_1.parseFileWithVisitor)(visitor, fileData, {
65
65
  enableLexerDiagnostics: lexerDiagnostics,
66
66
  enableLexerVerbose: lexerVerbose,
@@ -68,7 +68,7 @@ async function renderScriptCustom(scriptData, outputPath, options, parseHandlers
68
68
  });
69
69
  const { throwError, tree, tokens } = result;
70
70
  let { hasError, hasParseError } = result;
71
- if (errors.length > 0) {
71
+ if (errors.length > numErrors) {
72
72
  hasError = true;
73
73
  hasParseError = true;
74
74
  }