@mojir/lits 2.1.0 → 2.1.2

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 (93) hide show
  1. package/README.md +392 -109
  2. package/dist/cli/cli.js +879 -946
  3. package/dist/cli/reference/api.d.ts +0 -1
  4. package/dist/cli/reference/index.d.ts +208 -208
  5. package/dist/cli/src/builtin/bindingNode.d.ts +3 -2
  6. package/dist/cli/src/builtin/index.d.ts +10 -50
  7. package/dist/cli/src/builtin/interface.d.ts +10 -17
  8. package/dist/cli/src/builtin/normalExpressions/index.d.ts +4 -1
  9. package/dist/cli/src/builtin/specialExpressionTypes.d.ts +25 -0
  10. package/dist/cli/src/builtin/specialExpressions/and.d.ts +3 -3
  11. package/dist/cli/src/builtin/specialExpressions/array.d.ts +3 -3
  12. package/dist/cli/src/builtin/specialExpressions/cond.d.ts +3 -3
  13. package/dist/cli/src/builtin/specialExpressions/def.d.ts +3 -6
  14. package/dist/cli/src/builtin/specialExpressions/defined.d.ts +5 -0
  15. package/dist/cli/src/builtin/specialExpressions/do.d.ts +3 -3
  16. package/dist/cli/src/builtin/specialExpressions/functions.d.ts +5 -13
  17. package/dist/cli/src/builtin/specialExpressions/if.d.ts +3 -3
  18. package/dist/cli/src/builtin/specialExpressions/let.d.ts +3 -6
  19. package/dist/cli/src/builtin/specialExpressions/loop.d.ts +3 -4
  20. package/dist/cli/src/builtin/specialExpressions/loops.d.ts +5 -14
  21. package/dist/cli/src/builtin/specialExpressions/object.d.ts +3 -3
  22. package/dist/cli/src/builtin/specialExpressions/or.d.ts +3 -3
  23. package/dist/cli/src/builtin/specialExpressions/qq.d.ts +3 -3
  24. package/dist/cli/src/builtin/specialExpressions/recur.d.ts +3 -3
  25. package/dist/cli/src/builtin/specialExpressions/switch.d.ts +3 -3
  26. package/dist/cli/src/builtin/specialExpressions/throw.d.ts +3 -3
  27. package/dist/cli/src/builtin/specialExpressions/try.d.ts +3 -5
  28. package/dist/cli/src/builtin/specialExpressions/unless.d.ts +3 -3
  29. package/dist/cli/src/builtin/utils.d.ts +2 -5
  30. package/dist/cli/src/constants/constants.d.ts +15 -3
  31. package/dist/cli/src/evaluator/ContextStack.d.ts +3 -3
  32. package/dist/cli/src/evaluator/functionExecutors.d.ts +3 -3
  33. package/dist/cli/src/evaluator/index.d.ts +2 -2
  34. package/dist/cli/src/evaluator/interface.d.ts +3 -3
  35. package/dist/cli/src/getUndefinedSymbols/index.d.ts +3 -3
  36. package/dist/cli/src/parser/Parser.d.ts +7 -5
  37. package/dist/cli/src/parser/types.d.ts +33 -96
  38. package/dist/cli/src/typeGuards/astNode.d.ts +19 -16
  39. package/dist/cli/src/typeGuards/index.d.ts +2 -5
  40. package/dist/cli/src/typeGuards/litsFunction.d.ts +2 -2
  41. package/dist/cli/src/utils/index.d.ts +0 -1
  42. package/dist/index.esm.js +849 -913
  43. package/dist/index.esm.js.map +1 -1
  44. package/dist/index.js +849 -913
  45. package/dist/index.js.map +1 -1
  46. package/dist/lits.iife.js +849 -913
  47. package/dist/lits.iife.js.map +1 -1
  48. package/dist/reference/api.d.ts +0 -1
  49. package/dist/reference/index.d.ts +208 -208
  50. package/dist/src/builtin/bindingNode.d.ts +3 -2
  51. package/dist/src/builtin/index.d.ts +10 -50
  52. package/dist/src/builtin/interface.d.ts +10 -17
  53. package/dist/src/builtin/normalExpressions/index.d.ts +4 -1
  54. package/dist/src/builtin/specialExpressionTypes.d.ts +25 -0
  55. package/dist/src/builtin/specialExpressions/and.d.ts +3 -3
  56. package/dist/src/builtin/specialExpressions/array.d.ts +3 -3
  57. package/dist/src/builtin/specialExpressions/cond.d.ts +3 -3
  58. package/dist/src/builtin/specialExpressions/def.d.ts +3 -6
  59. package/dist/src/builtin/specialExpressions/defined.d.ts +5 -0
  60. package/dist/src/builtin/specialExpressions/do.d.ts +3 -3
  61. package/dist/src/builtin/specialExpressions/functions.d.ts +5 -13
  62. package/dist/src/builtin/specialExpressions/if.d.ts +3 -3
  63. package/dist/src/builtin/specialExpressions/let.d.ts +3 -6
  64. package/dist/src/builtin/specialExpressions/loop.d.ts +3 -4
  65. package/dist/src/builtin/specialExpressions/loops.d.ts +5 -14
  66. package/dist/src/builtin/specialExpressions/object.d.ts +3 -3
  67. package/dist/src/builtin/specialExpressions/or.d.ts +3 -3
  68. package/dist/src/builtin/specialExpressions/qq.d.ts +3 -3
  69. package/dist/src/builtin/specialExpressions/recur.d.ts +3 -3
  70. package/dist/src/builtin/specialExpressions/switch.d.ts +3 -3
  71. package/dist/src/builtin/specialExpressions/throw.d.ts +3 -3
  72. package/dist/src/builtin/specialExpressions/try.d.ts +3 -5
  73. package/dist/src/builtin/specialExpressions/unless.d.ts +3 -3
  74. package/dist/src/builtin/utils.d.ts +2 -5
  75. package/dist/src/constants/constants.d.ts +15 -3
  76. package/dist/src/evaluator/ContextStack.d.ts +3 -3
  77. package/dist/src/evaluator/functionExecutors.d.ts +3 -3
  78. package/dist/src/evaluator/index.d.ts +2 -2
  79. package/dist/src/evaluator/interface.d.ts +3 -3
  80. package/dist/src/getUndefinedSymbols/index.d.ts +3 -3
  81. package/dist/src/parser/Parser.d.ts +7 -5
  82. package/dist/src/parser/types.d.ts +33 -96
  83. package/dist/src/typeGuards/astNode.d.ts +19 -16
  84. package/dist/src/typeGuards/index.d.ts +2 -5
  85. package/dist/src/typeGuards/litsFunction.d.ts +2 -2
  86. package/dist/src/utils/index.d.ts +0 -1
  87. package/dist/testFramework.esm.js +865 -909
  88. package/dist/testFramework.esm.js.map +1 -1
  89. package/dist/testFramework.js +865 -909
  90. package/dist/testFramework.js.map +1 -1
  91. package/package.json +1 -1
  92. package/dist/cli/src/builtin/specialExpressions/declared.d.ts +0 -5
  93. package/dist/src/builtin/specialExpressions/declared.d.ts +0 -5
@@ -1,19 +1,15 @@
1
1
  import type { JsFunction } from '../Lits/Lits';
2
- import type { SpecialExpressionName, SpecialExpressionNode } from '../builtin';
3
- import type { AstNodeType, FunctionType } from '../constants/constants';
2
+ import type { SpecialExpressionType } from '../builtin';
3
+ import type { FunctionType, NodeType, NodeTypes } from '../constants/constants';
4
4
  import type { Context } from '../evaluator/interface';
5
5
  import type { Any, Arr } from '../interface';
6
- import type { TokenStream } from '../tokenizer/tokenize';
7
- import type { ModifierName, SourceCodeInfo, Token } from '../tokenizer/token';
6
+ import type { ReservedSymbol } from '../tokenizer/reservedNames';
7
+ import type { SourceCodeInfo, Token } from '../tokenizer/token';
8
8
  import type { FUNCTION_SYMBOL, REGEXP_SYMBOL } from '../utils/symbols';
9
9
  export interface ParseState {
10
10
  position: number;
11
11
  }
12
- export interface EvaluatedFunction {
13
- arguments: BindingTarget[];
14
- body: AstNode[];
15
- context: Context;
16
- }
12
+ export type EvaluatedFunction = [BindingTarget[], Node[], Context];
17
13
  interface GenericLitsFunction {
18
14
  [FUNCTION_SYMBOL]: true;
19
15
  sourceCodeInfo?: SourceCodeInfo;
@@ -69,104 +65,45 @@ export interface FNullFunction extends GenericLitsFunction {
69
65
  function: Any;
70
66
  params: Arr;
71
67
  }
72
- export interface BuiltinFunction extends GenericLitsFunction {
68
+ export interface NormalBuiltinFunction extends GenericLitsFunction {
73
69
  functionType: 'Builtin';
74
- n: string;
70
+ normalBuitinSymbolType: number;
75
71
  }
76
- export type LitsFunction = NativeJsFunction | UserDefinedFunction | BuiltinFunction | PartialFunction | CompFunction | ConstantlyFunction | JuxtFunction | ComplementFunction | EveryPredFunction | SomePredFunction | FNullFunction;
72
+ export type LitsFunction = NativeJsFunction | UserDefinedFunction | NormalBuiltinFunction | PartialFunction | CompFunction | ConstantlyFunction | JuxtFunction | ComplementFunction | EveryPredFunction | SomePredFunction | FNullFunction;
77
73
  export type LitsFunctionType = LitsFunction['functionType'];
78
74
  export type DebugData = {
79
75
  token: Token;
80
76
  nameToken?: Token;
81
77
  };
82
- export interface GenericNode {
83
- type: AstNodeType;
84
- sourceCodeInfo?: SourceCodeInfo | undefined;
85
- }
78
+ export type Node<T extends NodeType = NodeType, Payload = unknown> = [T, Payload] | [T, Payload, SourceCodeInfo];
86
79
  export type ExpressionNode = NormalExpressionNode | SpecialExpressionNode | NumberNode | StringNode;
87
- export type ParseBinding = (tokens: TokenStream, parseState: ParseState) => BindingNode;
88
- export type ParseBindings = (tokens: TokenStream, parseState: ParseState) => BindingNode[];
89
- export type ParseArgument = (tokens: TokenStream, parseState: ParseState) => ArgumentNode | ModifierNode;
90
- export type ParseExpression = (tokens: TokenStream, parseState: ParseState) => ExpressionNode;
91
- export type ParseTokensUntilClosingBracket = (tokens: TokenStream, parseState: ParseState) => AstNode[];
92
- export type ParseToken = (tokens: TokenStream, parseState: ParseState) => AstNode;
93
- export interface SpreadNode extends GenericNode {
94
- type: 'Spread';
95
- value: AstNode;
96
- }
97
- export interface NumberNode extends GenericNode {
98
- type: 'Number';
99
- value: number;
100
- }
101
- export interface StringNode extends GenericNode {
102
- type: 'String';
103
- value: string;
104
- }
105
- export interface SymbolNode extends GenericNode {
106
- type: 'Symbol';
107
- value: string;
108
- }
109
- export interface ModifierNode extends GenericNode {
110
- type: 'Modifier';
111
- value: ModifierName;
112
- }
113
- export interface ReservedSymbolNode extends GenericNode {
114
- type: 'ReservedSymbol';
115
- value: string;
116
- }
117
- interface CommonNormalExpressionNode extends GenericNode {
118
- type: 'NormalExpression';
119
- params: AstNode[];
120
- }
121
- export interface CommonSpecialExpressionNode<T extends SpecialExpressionName> extends GenericNode {
122
- type: 'SpecialExpression';
123
- name: T;
124
- params: AstNode[];
125
- }
126
- export interface NormalExpressionNodeWithName extends CommonNormalExpressionNode {
127
- name: string;
128
- }
129
- interface NormalExpressionNodeExpression extends CommonNormalExpressionNode {
130
- name: undefined;
131
- }
80
+ export type SpreadNode = Node<typeof NodeTypes.Spread, Node>;
81
+ export type NumberNode = Node<typeof NodeTypes.Number, number>;
82
+ export type StringNode = Node<typeof NodeTypes.String, string>;
83
+ export type UserDefinedSymbolNode = Node<typeof NodeTypes.UserDefinedSymbol, string>;
84
+ export type NormalBuiltinSymbolNode = Node<typeof NodeTypes.NormalBuiltinSymbol, number>;
85
+ export type SpecialBuiltinSymbolNode = Node<typeof NodeTypes.SpecialBuiltinSymbol, SpecialExpressionType>;
86
+ export type SymbolNode = UserDefinedSymbolNode | NormalBuiltinSymbolNode | SpecialBuiltinSymbolNode;
87
+ export type ReservedSymbolNode = Node<typeof NodeTypes.ReservedSymbol, ReservedSymbol>;
88
+ export type SpecialExpressionNode<T extends [SpecialExpressionType, ...unknown[]] = [SpecialExpressionType, ...unknown[]]> = Node<typeof NodeTypes.SpecialExpression, T>;
89
+ export type NormalExpressionNodeWithName = Node<typeof NodeTypes.NormalExpression, [NormalBuiltinSymbolNode | UserDefinedSymbolNode, Node[]]>;
90
+ export type NormalExpressionNodeExpression = Node<typeof NodeTypes.NormalExpression, [Node, Node[]]>;
132
91
  export type NormalExpressionNode = NormalExpressionNodeWithName | NormalExpressionNodeExpression;
133
- interface CommonBindingTarget {
134
- sourceCodeInfo: SourceCodeInfo | undefined;
135
- default?: AstNode;
136
- }
137
- export type SymbolBindingTarget = CommonBindingTarget & {
138
- type: 'symbol';
139
- name: string;
140
- };
141
- export type RestBindingTarget = CommonBindingTarget & {
142
- type: 'rest';
143
- name: string;
144
- };
145
- export type ObjectBindingTarget = CommonBindingTarget & {
146
- type: 'object';
147
- elements: Record<string, BindingTarget>;
148
- };
149
- export type ArrayBindingTarget = CommonBindingTarget & {
150
- type: 'array';
151
- elements: (BindingTarget | null)[];
92
+ export declare const bindingTargetTypes: {
93
+ readonly symbol: 11;
94
+ readonly rest: 12;
95
+ readonly object: 13;
96
+ readonly array: 14;
152
97
  };
98
+ export type BindingTargetType = typeof bindingTargetTypes[keyof typeof bindingTargetTypes];
99
+ type GenericTarget<T extends BindingTargetType, Payload extends unknown[]> = [T, Payload] | [T, Payload, SourceCodeInfo];
100
+ export type SymbolBindingTarget = GenericTarget<typeof bindingTargetTypes.symbol, [SymbolNode, Node | undefined]>;
101
+ export type RestBindingTarget = GenericTarget<typeof bindingTargetTypes.rest, [string, Node | undefined]>;
102
+ export type ObjectBindingTarget = GenericTarget<typeof bindingTargetTypes.object, [Record<string, BindingTarget>, Node | undefined]>;
103
+ export type ArrayBindingTarget = GenericTarget<typeof bindingTargetTypes.array, [(BindingTarget | null)[], Node | undefined]>;
153
104
  export type BindingTarget = SymbolBindingTarget | RestBindingTarget | ObjectBindingTarget | ArrayBindingTarget;
154
- export interface BindingNode extends GenericNode {
155
- type: 'Binding';
156
- target: BindingTarget;
157
- value: AstNode;
158
- }
159
- export interface ArgumentNode extends GenericNode {
160
- type: 'Argument';
161
- name: string;
162
- default?: AstNode;
163
- }
164
- export interface CommentNode extends GenericNode {
165
- type: 'Comment';
166
- value: string;
167
- }
168
- export type AstNode = NumberNode | StringNode | ReservedSymbolNode | SymbolNode | CommentNode | NormalExpressionNode | ModifierNode | SpecialExpressionNode | SpreadNode;
169
- type AstBody = AstNode[];
105
+ export type BindingNode = Node<typeof NodeTypes.Binding, [BindingTarget, Node]>;
106
+ type AstBody = Node[];
170
107
  export interface Ast {
171
108
  body: AstBody;
172
109
  hasDebugData: boolean;
@@ -1,17 +1,20 @@
1
- import type { AstNode, ExpressionNode, NormalExpressionNode, NormalExpressionNodeWithName, SymbolNode } from '../parser/types';
1
+ import type { ExpressionNode, Node, NormalBuiltinSymbolNode, NormalExpressionNode, NormalExpressionNodeWithName, SpecialBuiltinSymbolNode, SpreadNode, SymbolNode, UserDefinedSymbolNode } from '../parser/types';
2
2
  import type { SourceCodeInfo } from '../tokenizer/token';
3
- export declare function isAstNode(value: unknown): value is AstNode;
4
- export declare function asAstNode(value: unknown, sourceCodeInfo?: SourceCodeInfo): AstNode;
5
- export declare function assertAstNode(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is AstNode;
6
- export declare function isSymbolNode(value: unknown): value is SymbolNode;
7
- export declare function asSymbolNode(value: unknown, sourceCodeInfo?: SourceCodeInfo): SymbolNode;
8
- export declare function assertSymbolNode(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is SymbolNode;
9
- export declare function isNormalExpressionNode(value: unknown): value is NormalExpressionNode;
10
- export declare function asNormalExpressionNode(value: unknown, sourceCodeInfo?: SourceCodeInfo): NormalExpressionNode;
11
- export declare function assertNormalExpressionNode(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is NormalExpressionNode;
12
- export declare function isNormalExpressionNodeWithName(value: unknown): value is NormalExpressionNodeWithName;
13
- export declare function asNormalExpressionNodeWithName(value: unknown, sourceCodeInfo?: SourceCodeInfo): NormalExpressionNodeWithName;
14
- export declare function assertNormalExpressionNodeWithName(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is NormalExpressionNodeWithName;
15
- export declare function isExpressionNode(value: unknown): value is ExpressionNode;
16
- export declare function asExpressionNode(value: unknown, sourceCodeInfo?: SourceCodeInfo): ExpressionNode;
17
- export declare function assertExpressionNode(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is ExpressionNode;
3
+ export declare function isSymbolNode(node: Node): node is SymbolNode;
4
+ export declare function asSymbolNode(node: Node, sourceCodeInfo?: SourceCodeInfo): SymbolNode;
5
+ export declare function assertSymbolNode(node: Node, sourceCodeInfo?: SourceCodeInfo): asserts node is SymbolNode;
6
+ export declare function isUserDefinedSymbolNode(node: Node): node is UserDefinedSymbolNode;
7
+ export declare function asUserDefinedSymbolNode(node: Node, sourceCodeInfo?: SourceCodeInfo): UserDefinedSymbolNode;
8
+ export declare function assertUserDefinedSymbolNode(node: Node, sourceCodeInfo?: SourceCodeInfo): asserts node is UserDefinedSymbolNode;
9
+ export declare function isNormalBuiltinSymbolNode(node: Node): node is NormalBuiltinSymbolNode;
10
+ export declare function isSpecialBuiltinSymbolNode(node: Node): node is SpecialBuiltinSymbolNode;
11
+ export declare function isNormalExpressionNode(node: Node): node is NormalExpressionNode;
12
+ export declare function asNormalExpressionNode(node: Node, sourceCodeInfo?: SourceCodeInfo): NormalExpressionNode;
13
+ export declare function assertNormalExpressionNode(node: Node, sourceCodeInfo?: SourceCodeInfo): asserts node is NormalExpressionNode;
14
+ export declare function isNormalExpressionNodeWithName(node: Node): node is NormalExpressionNodeWithName;
15
+ export declare function asNormalExpressionNodeWithName(node: Node, sourceCodeInfo?: SourceCodeInfo): NormalExpressionNodeWithName;
16
+ export declare function assertNormalExpressionNodeWithName(node: Node, sourceCodeInfo?: SourceCodeInfo): asserts node is NormalExpressionNodeWithName;
17
+ export declare function isExpressionNode(node: Node): node is ExpressionNode;
18
+ export declare function asExpressionNode(node: Node, sourceCodeInfo?: SourceCodeInfo): ExpressionNode;
19
+ export declare function assertExpressionNode(node: Node, sourceCodeInfo?: SourceCodeInfo): asserts node is ExpressionNode;
20
+ export declare function isSpreadNode(node: Node): node is SpreadNode;
@@ -1,11 +1,8 @@
1
1
  import type { Count } from '../builtin/interface';
2
2
  import type { UnknownRecord } from '../interface';
3
- import type { AstNode, GenericNode } from '../parser/types';
3
+ import type { NormalExpressionNodeWithName } from '../parser/types';
4
4
  import type { SourceCodeInfo } from '../tokenizer/token';
5
- export declare function assertNumberOfParams(count: Count, node: GenericNode & {
6
- params: AstNode[];
7
- name: string;
8
- }): void;
5
+ export declare function assertNumberOfParams(count: Count, node: NormalExpressionNodeWithName): void;
9
6
  export declare function isNonUndefined<T>(value: T | undefined): value is T;
10
7
  export declare function asNonUndefined<T>(value: T | undefined, sourceCodeInfo?: SourceCodeInfo): T;
11
8
  export declare function assertNonUndefined<T>(value: T | undefined, sourceCodeInfo?: SourceCodeInfo): asserts value is T;
@@ -1,4 +1,4 @@
1
- import type { BuiltinFunction, LitsFunction, NativeJsFunction, UserDefinedFunction } from '../parser/types';
1
+ import type { LitsFunction, NativeJsFunction, NormalBuiltinFunction, UserDefinedFunction } from '../parser/types';
2
2
  import type { SourceCodeInfo } from '../tokenizer/token';
3
3
  export declare function isLitsFunction(value: unknown): value is LitsFunction;
4
4
  export declare function asLitsFunction(value: unknown, sourceCodeInfo?: SourceCodeInfo): LitsFunction;
@@ -9,4 +9,4 @@ export declare function assertUserDefinedFunction(value: unknown, sourceCodeInfo
9
9
  export declare function isNativeJsFunction(value: unknown): value is NativeJsFunction;
10
10
  export declare function asNativeJsFunction(value: unknown, sourceCodeInfo?: SourceCodeInfo): NativeJsFunction;
11
11
  export declare function assertNativeJsFunction(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is NativeJsFunction;
12
- export declare function isBuiltinFunction(value: unknown): value is BuiltinFunction;
12
+ export declare function isBuiltinFunction(value: unknown): value is NormalBuiltinFunction;
@@ -8,6 +8,5 @@ export declare function toNonNegativeInteger(num: number): number;
8
8
  export declare function toAny(value: unknown): Any;
9
9
  export declare function cloneColl<T extends Coll>(value: T): T;
10
10
  export declare function createNativeJsFunction(fn: (...args: any[]) => unknown, name?: string): NativeJsFunction;
11
- export declare function arrayToPairs<T>(arr: T[]): T[][];
12
11
  export declare function joinSets<T>(...results: Set<T>[]): Set<T>;
13
12
  export declare function addToSet<T>(target: Set<T>, source: Set<T>): void;