@aster-cloud/aster-lang-ts 0.0.5 → 0.0.6
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/scripts/aster.js +0 -0
- package/dist/scripts/emit-core.js +0 -0
- package/dist/src/browser.d.ts +116 -0
- package/dist/src/browser.d.ts.map +1 -0
- package/dist/src/browser.js +149 -0
- package/dist/src/browser.js.map +1 -0
- package/dist/src/cli/policy-converter.js +0 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/lsp/server.js +0 -0
- package/dist/src/parser/constraint-parser.d.ts.map +1 -1
- package/dist/src/parser/constraint-parser.js +63 -9
- package/dist/src/parser/constraint-parser.js.map +1 -1
- package/dist/src/parser/input-generator.d.ts +68 -0
- package/dist/src/parser/input-generator.d.ts.map +1 -0
- package/dist/src/parser/input-generator.js +577 -0
- package/dist/src/parser/input-generator.js.map +1 -0
- package/dist/test/unit/parser/input-generator.test.d.ts +5 -0
- package/dist/test/unit/parser/input-generator.test.d.ts.map +1 -0
- package/dist/test/unit/parser/input-generator.test.js +239 -0
- package/dist/test/unit/parser/input-generator.test.js.map +1 -0
- package/dist/test/unit/parser/parser.test.js +55 -0
- package/dist/test/unit/parser/parser.test.js.map +1 -1
- package/package.json +44 -36
package/dist/scripts/aster.js
CHANGED
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @aster-cloud/aster-lang-ts/browser
|
|
3
|
+
*
|
|
4
|
+
* Lightweight browser/edge-compatible entry point for Aster CNL compiler.
|
|
5
|
+
* This module excludes Node.js dependencies and is suitable for:
|
|
6
|
+
* - Browser-based editors
|
|
7
|
+
* - Cloudflare Workers/Pages
|
|
8
|
+
* - Edge runtimes (Vercel Edge, Deno Deploy, etc.)
|
|
9
|
+
*
|
|
10
|
+
* **Compilation Pipeline**:
|
|
11
|
+
* ```
|
|
12
|
+
* CNL Source → canonicalize → lex → parse → AST → lowerModule → Core IR → typecheck
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @example Basic compilation
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { compile, compileWithDiagnostics } from '@aster-cloud/aster-lang-ts/browser';
|
|
18
|
+
*
|
|
19
|
+
* const source = `This module is app. To greet name String, produce String: Return "Hello, " + name.`;
|
|
20
|
+
* const result = compile(source);
|
|
21
|
+
*
|
|
22
|
+
* if (result.success) {
|
|
23
|
+
* console.log('Compiled Core IR:', result.core);
|
|
24
|
+
* } else {
|
|
25
|
+
* console.error('Compilation errors:', result.errors);
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export { canonicalize } from './frontend/canonicalizer.js';
|
|
30
|
+
export { lex } from './frontend/lexer.js';
|
|
31
|
+
export { parse } from './parser.js';
|
|
32
|
+
export { lowerModule } from './lower_to_core.js';
|
|
33
|
+
export { createKeywordTranslator, buildKeywordTranslationIndex, buildFullTranslationIndex, translateTokens, translateTokensWithMarkers, translateToken, needsKeywordTranslation, } from './frontend/keyword-translator.js';
|
|
34
|
+
export type { KeywordTranslationIndex, MarkerKeywordIndex, TranslationIndexResult, } from './frontend/keyword-translator.js';
|
|
35
|
+
export { Core, Effect } from './core/core_ir.js';
|
|
36
|
+
export { TokenKind, KW } from './frontend/tokens.js';
|
|
37
|
+
export { Node } from './ast/ast.js';
|
|
38
|
+
export { generateFieldValue, generateInputValues, getFieldValueHint, } from './parser/input-generator.js';
|
|
39
|
+
export type { TypeKind, FieldInfo, ParameterInfo, } from './parser/input-generator.js';
|
|
40
|
+
export type * from './types.js';
|
|
41
|
+
export { EN_US, ZH_CN, DE_DE, LexiconRegistry, initializeDefaultLexicons } from './config/lexicons/index.js';
|
|
42
|
+
export type { Lexicon } from './config/lexicons/types.js';
|
|
43
|
+
import type { Core as CoreTypes, Token, Module as AstModule } from './types.js';
|
|
44
|
+
import type { Lexicon } from './config/lexicons/types.js';
|
|
45
|
+
/**
|
|
46
|
+
* Compilation result with success/failure status
|
|
47
|
+
*/
|
|
48
|
+
export interface CompileResult {
|
|
49
|
+
/** Whether compilation succeeded */
|
|
50
|
+
success: boolean;
|
|
51
|
+
/** Compiled Core IR module (if successful) */
|
|
52
|
+
core?: CoreTypes.Module;
|
|
53
|
+
/** Parse errors (if any) */
|
|
54
|
+
parseErrors?: string[];
|
|
55
|
+
/** Lowering errors (if any) */
|
|
56
|
+
loweringErrors?: string[];
|
|
57
|
+
/** Raw tokens from lexer (only when includeIntermediates is true) */
|
|
58
|
+
tokens?: Token[];
|
|
59
|
+
/** AST from parser (only when includeIntermediates is true) */
|
|
60
|
+
ast?: AstModule;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Compilation options
|
|
64
|
+
*/
|
|
65
|
+
export interface CompileOptions {
|
|
66
|
+
/** CNL lexicon (default: EN_US). Pass a Lexicon object from the exports. */
|
|
67
|
+
lexicon?: Lexicon;
|
|
68
|
+
/** Include intermediate representations in result */
|
|
69
|
+
includeIntermediates?: boolean;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Compile CNL source code to Core IR
|
|
73
|
+
*
|
|
74
|
+
* This is the main compilation function for browser/edge use.
|
|
75
|
+
* It runs the full compilation pipeline without type checking
|
|
76
|
+
* (type checking requires module resolution which needs file system access).
|
|
77
|
+
*
|
|
78
|
+
* @param source - CNL source code
|
|
79
|
+
* @param options - Compilation options
|
|
80
|
+
* @returns Compilation result with Core IR or errors
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* const result = compile(`
|
|
85
|
+
* This module is pricing.
|
|
86
|
+
* To calculate_discount amount Number, produce Number:
|
|
87
|
+
* If amount > 100 then Return amount * 0.1
|
|
88
|
+
* Otherwise Return 0.
|
|
89
|
+
* `);
|
|
90
|
+
*
|
|
91
|
+
* if (result.success) {
|
|
92
|
+
* console.log(result.core);
|
|
93
|
+
* }
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export declare function compile(source: string, options?: CompileOptions): CompileResult;
|
|
97
|
+
/**
|
|
98
|
+
* Validate CNL source code syntax without full compilation
|
|
99
|
+
*
|
|
100
|
+
* This is a lightweight validation that only runs lexer and parser,
|
|
101
|
+
* useful for real-time editor validation.
|
|
102
|
+
*
|
|
103
|
+
* @param source - CNL source code
|
|
104
|
+
* @param lexicon - CNL lexicon (optional, defaults to EN_US)
|
|
105
|
+
* @returns Array of error messages (empty if valid)
|
|
106
|
+
*/
|
|
107
|
+
export declare function validateSyntax(source: string, lexicon?: Lexicon): string[];
|
|
108
|
+
/**
|
|
109
|
+
* Get tokens from CNL source (for syntax highlighting)
|
|
110
|
+
*
|
|
111
|
+
* @param source - CNL source code
|
|
112
|
+
* @param lexicon - CNL lexicon (optional, defaults to EN_US)
|
|
113
|
+
* @returns Array of tokens
|
|
114
|
+
*/
|
|
115
|
+
export declare function tokenize(source: string, lexicon?: Lexicon): Token[];
|
|
116
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGpC,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,QAAQ,EACR,SAAS,EACT,aAAa,GACd,MAAM,6BAA6B,CAAC;AAGrC,mBAAmB,YAAY,CAAC;AAGhC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC7G,YAAY,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAU1D,OAAO,KAAK,EAAE,IAAI,IAAI,SAAS,EAAE,KAAK,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC;IACxB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,qEAAqE;IACrE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,+DAA+D;IAC/D,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qDAAqD;IACrD,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,CAyC/E;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAc1E;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,KAAK,EAAE,CAGnE"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @aster-cloud/aster-lang-ts/browser
|
|
3
|
+
*
|
|
4
|
+
* Lightweight browser/edge-compatible entry point for Aster CNL compiler.
|
|
5
|
+
* This module excludes Node.js dependencies and is suitable for:
|
|
6
|
+
* - Browser-based editors
|
|
7
|
+
* - Cloudflare Workers/Pages
|
|
8
|
+
* - Edge runtimes (Vercel Edge, Deno Deploy, etc.)
|
|
9
|
+
*
|
|
10
|
+
* **Compilation Pipeline**:
|
|
11
|
+
* ```
|
|
12
|
+
* CNL Source → canonicalize → lex → parse → AST → lowerModule → Core IR → typecheck
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @example Basic compilation
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { compile, compileWithDiagnostics } from '@aster-cloud/aster-lang-ts/browser';
|
|
18
|
+
*
|
|
19
|
+
* const source = `This module is app. To greet name String, produce String: Return "Hello, " + name.`;
|
|
20
|
+
* const result = compile(source);
|
|
21
|
+
*
|
|
22
|
+
* if (result.success) {
|
|
23
|
+
* console.log('Compiled Core IR:', result.core);
|
|
24
|
+
* } else {
|
|
25
|
+
* console.error('Compilation errors:', result.errors);
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
// Core compilation pipeline functions
|
|
30
|
+
export { canonicalize } from './frontend/canonicalizer.js';
|
|
31
|
+
export { lex } from './frontend/lexer.js';
|
|
32
|
+
export { parse } from './parser.js';
|
|
33
|
+
export { lowerModule } from './lower_to_core.js';
|
|
34
|
+
// Keyword translation (multi-language CNL support)
|
|
35
|
+
export { createKeywordTranslator, buildKeywordTranslationIndex, buildFullTranslationIndex, translateTokens, translateTokensWithMarkers, translateToken, needsKeywordTranslation, } from './frontend/keyword-translator.js';
|
|
36
|
+
// Core types and enums
|
|
37
|
+
export { Core, Effect } from './core/core_ir.js';
|
|
38
|
+
export { TokenKind, KW } from './frontend/tokens.js';
|
|
39
|
+
export { Node } from './ast/ast.js';
|
|
40
|
+
// Input value generation (for policy execution)
|
|
41
|
+
export { generateFieldValue, generateInputValues, getFieldValueHint, } from './parser/input-generator.js';
|
|
42
|
+
// Lexicons for multi-language support
|
|
43
|
+
export { EN_US, ZH_CN, DE_DE, LexiconRegistry, initializeDefaultLexicons } from './config/lexicons/index.js';
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// High-level compilation API (browser-friendly)
|
|
46
|
+
// ============================================================================
|
|
47
|
+
import { canonicalize } from './frontend/canonicalizer.js';
|
|
48
|
+
import { lex } from './frontend/lexer.js';
|
|
49
|
+
import { parse } from './parser.js';
|
|
50
|
+
import { lowerModule } from './lower_to_core.js';
|
|
51
|
+
/**
|
|
52
|
+
* Compile CNL source code to Core IR
|
|
53
|
+
*
|
|
54
|
+
* This is the main compilation function for browser/edge use.
|
|
55
|
+
* It runs the full compilation pipeline without type checking
|
|
56
|
+
* (type checking requires module resolution which needs file system access).
|
|
57
|
+
*
|
|
58
|
+
* @param source - CNL source code
|
|
59
|
+
* @param options - Compilation options
|
|
60
|
+
* @returns Compilation result with Core IR or errors
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* const result = compile(`
|
|
65
|
+
* This module is pricing.
|
|
66
|
+
* To calculate_discount amount Number, produce Number:
|
|
67
|
+
* If amount > 100 then Return amount * 0.1
|
|
68
|
+
* Otherwise Return 0.
|
|
69
|
+
* `);
|
|
70
|
+
*
|
|
71
|
+
* if (result.success) {
|
|
72
|
+
* console.log(result.core);
|
|
73
|
+
* }
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export function compile(source, options) {
|
|
77
|
+
try {
|
|
78
|
+
// Step 1: Canonicalize source
|
|
79
|
+
const canonical = canonicalize(source);
|
|
80
|
+
// Step 2: Lexical analysis
|
|
81
|
+
const tokens = lex(canonical, options?.lexicon);
|
|
82
|
+
// Step 3: Parse to AST
|
|
83
|
+
const ast = parse(tokens);
|
|
84
|
+
// Check for parse errors
|
|
85
|
+
if ('error' in ast || !ast) {
|
|
86
|
+
const result = {
|
|
87
|
+
success: false,
|
|
88
|
+
parseErrors: ['error' in ast ? ast.error : 'Parse failed'],
|
|
89
|
+
};
|
|
90
|
+
if (options?.includeIntermediates) {
|
|
91
|
+
result.tokens = tokens;
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
// Step 4: Lower to Core IR
|
|
96
|
+
const core = lowerModule(ast);
|
|
97
|
+
const result = {
|
|
98
|
+
success: true,
|
|
99
|
+
core,
|
|
100
|
+
};
|
|
101
|
+
if (options?.includeIntermediates) {
|
|
102
|
+
result.tokens = tokens;
|
|
103
|
+
result.ast = ast;
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
return {
|
|
109
|
+
success: false,
|
|
110
|
+
loweringErrors: [error instanceof Error ? error.message : String(error)],
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Validate CNL source code syntax without full compilation
|
|
116
|
+
*
|
|
117
|
+
* This is a lightweight validation that only runs lexer and parser,
|
|
118
|
+
* useful for real-time editor validation.
|
|
119
|
+
*
|
|
120
|
+
* @param source - CNL source code
|
|
121
|
+
* @param lexicon - CNL lexicon (optional, defaults to EN_US)
|
|
122
|
+
* @returns Array of error messages (empty if valid)
|
|
123
|
+
*/
|
|
124
|
+
export function validateSyntax(source, lexicon) {
|
|
125
|
+
try {
|
|
126
|
+
const canonical = canonicalize(source);
|
|
127
|
+
const tokens = lex(canonical, lexicon);
|
|
128
|
+
const ast = parse(tokens);
|
|
129
|
+
if ('error' in ast) {
|
|
130
|
+
return [ast.error];
|
|
131
|
+
}
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
return [error instanceof Error ? error.message : String(error)];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get tokens from CNL source (for syntax highlighting)
|
|
140
|
+
*
|
|
141
|
+
* @param source - CNL source code
|
|
142
|
+
* @param lexicon - CNL lexicon (optional, defaults to EN_US)
|
|
143
|
+
* @returns Array of tokens
|
|
144
|
+
*/
|
|
145
|
+
export function tokenize(source, lexicon) {
|
|
146
|
+
const canonical = canonicalize(source);
|
|
147
|
+
return lex(canonical, lexicon);
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
package/dist/src/index.d.ts
CHANGED
|
@@ -34,5 +34,7 @@ export { TokenKind, KW } from './frontend/tokens.js';
|
|
|
34
34
|
export { Node } from './ast/ast.js';
|
|
35
35
|
export { typecheckModule, typecheckModuleWithCapabilities, loadImportedEffects, } from './typecheck.js';
|
|
36
36
|
export type { TypecheckDiagnostic, TypecheckOptions } from './typecheck.js';
|
|
37
|
+
export { generateFieldValue, generateInputValues, getFieldValueHint, } from './parser/input-generator.js';
|
|
38
|
+
export type { TypeKind, FieldInfo, ParameterInfo, } from './parser/input-generator.js';
|
|
37
39
|
export type * from './types.js';
|
|
38
40
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGpC,OAAO,EACL,eAAe,EACf,+BAA+B,EAC/B,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAG5E,mBAAmB,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGpC,OAAO,EACL,eAAe,EACf,+BAA+B,EAC/B,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAG5E,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,QAAQ,EACR,SAAS,EACT,aAAa,GACd,MAAM,6BAA6B,CAAC;AAGrC,mBAAmB,YAAY,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -36,4 +36,6 @@ export { TokenKind, KW } from './frontend/tokens.js';
|
|
|
36
36
|
export { Node } from './ast/ast.js';
|
|
37
37
|
// 类型检查
|
|
38
38
|
export { typecheckModule, typecheckModuleWithCapabilities, loadImportedEffects, } from './typecheck.js';
|
|
39
|
+
// 输入值生成器(用于策略执行时自动生成示例输入)
|
|
40
|
+
export { generateFieldValue, generateInputValues, getFieldValueHint, } from './parser/input-generator.js';
|
|
39
41
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,oBAAoB;AACpB,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAO1C,UAAU;AACV,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO;AACP,OAAO,EACL,eAAe,EACf,+BAA+B,EAC/B,mBAAmB,GACpB,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,oBAAoB;AACpB,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAO1C,UAAU;AACV,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO;AACP,OAAO,EACL,eAAe,EACf,+BAA+B,EAC/B,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAGxB,0BAA0B;AAC1B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC"}
|
package/dist/src/lsp/server.js
CHANGED
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraint-parser.d.ts","sourceRoot":"","sources":["../../../src/parser/constraint-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,UAAU,EAA0D,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,KAAK,KAAK,GACzC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"constraint-parser.d.ts","sourceRoot":"","sources":["../../../src/parser/constraint-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,UAAU,EAA0D,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;CAC5B;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,KAAK,KAAK,GACzC,iBAAiB,CA4BnB;AAqOD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EAClE,IAAI,EAAE,IAAI,GACT,UAAU,GAAG,IAAI,CAuBnB"}
|
|
@@ -25,10 +25,11 @@ export function parseConstraints(ctx, error) {
|
|
|
25
25
|
}
|
|
26
26
|
constraints.push(constraint.constraint);
|
|
27
27
|
lastToken = constraint.endToken;
|
|
28
|
-
//
|
|
29
|
-
// 注意:不要消费字段之间的 'and'
|
|
28
|
+
// 检查是否还有后续约束
|
|
30
29
|
if (isConstraintKeyword(ctx)) {
|
|
31
|
-
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (skipConstraintConnector(ctx)) {
|
|
32
33
|
continue;
|
|
33
34
|
}
|
|
34
35
|
break;
|
|
@@ -42,15 +43,67 @@ export function parseConstraints(ctx, error) {
|
|
|
42
43
|
* 检查当前位置是否是约束关键词
|
|
43
44
|
*/
|
|
44
45
|
function isConstraintKeyword(ctx) {
|
|
45
|
-
|
|
46
|
+
return isConstraintToken(ctx.peek());
|
|
47
|
+
}
|
|
48
|
+
function isConstraintToken(token) {
|
|
49
|
+
if (!token)
|
|
50
|
+
return false;
|
|
51
|
+
if (token.kind !== TokenKind.IDENT &&
|
|
52
|
+
token.kind !== TokenKind.TYPE_IDENT &&
|
|
53
|
+
token.kind !== TokenKind.KEYWORD) {
|
|
46
54
|
return false;
|
|
47
55
|
}
|
|
48
|
-
const value = (
|
|
56
|
+
const value = (token.value || '').toLowerCase();
|
|
49
57
|
return (value === KW.REQUIRED ||
|
|
50
58
|
value === KW.BETWEEN ||
|
|
51
59
|
value === KW.MATCHING ||
|
|
52
|
-
value === 'at'
|
|
53
|
-
|
|
60
|
+
value === 'at');
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 获取下一个非布局 token(跳过换行/缩进),便于判断连接词后的 token 类型
|
|
64
|
+
*/
|
|
65
|
+
function nextSignificantToken(ctx, startIndex) {
|
|
66
|
+
let idx = startIndex;
|
|
67
|
+
while (idx < ctx.tokens.length) {
|
|
68
|
+
const token = ctx.tokens[idx];
|
|
69
|
+
if (token.kind === TokenKind.NEWLINE ||
|
|
70
|
+
token.kind === TokenKind.INDENT ||
|
|
71
|
+
token.kind === TokenKind.DEDENT) {
|
|
72
|
+
idx++;
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
return token;
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 跳过约束之间的连接符(',' 或 'and')
|
|
81
|
+
*/
|
|
82
|
+
function skipConstraintConnector(ctx) {
|
|
83
|
+
const current = ctx.peek();
|
|
84
|
+
if (current.kind === TokenKind.COMMA) {
|
|
85
|
+
const nextToken = nextSignificantToken(ctx, ctx.index + 1);
|
|
86
|
+
if (isConstraintToken(nextToken ?? undefined)) {
|
|
87
|
+
ctx.next(); // consume comma
|
|
88
|
+
ctx.consumeNewlines();
|
|
89
|
+
ctx.consumeIndent();
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
if ((current.kind === TokenKind.IDENT ||
|
|
95
|
+
current.kind === TokenKind.TYPE_IDENT ||
|
|
96
|
+
current.kind === TokenKind.KEYWORD) &&
|
|
97
|
+
(current.value || '').toLowerCase() === KW.AND) {
|
|
98
|
+
const nextToken = nextSignificantToken(ctx, ctx.index + 1);
|
|
99
|
+
if (isConstraintToken(nextToken ?? undefined)) {
|
|
100
|
+
ctx.nextWord(); // consume 'and'
|
|
101
|
+
ctx.consumeNewlines();
|
|
102
|
+
ctx.consumeIndent();
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return false;
|
|
54
107
|
}
|
|
55
108
|
/**
|
|
56
109
|
* 尝试解析单个约束
|
|
@@ -58,10 +111,11 @@ function isConstraintKeyword(ctx) {
|
|
|
58
111
|
* @returns 解析的约束,如果当前位置不是约束则返回 null
|
|
59
112
|
*/
|
|
60
113
|
function tryParseConstraint(ctx, error) {
|
|
61
|
-
|
|
114
|
+
const startToken = ctx.peek();
|
|
115
|
+
if (!isConstraintToken(startToken)) {
|
|
62
116
|
return null;
|
|
63
117
|
}
|
|
64
|
-
const value = (
|
|
118
|
+
const value = (startToken.value || '').toLowerCase();
|
|
65
119
|
// 'required' - 必填约束
|
|
66
120
|
if (value === KW.REQUIRED) {
|
|
67
121
|
const startTok = ctx.next();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraint-parser.js","sourceRoot":"","sources":["../../../src/parser/constraint-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAkBtD,MAAM,UAAU,gBAAgB,CAC9B,GAAkB,EAClB,KAA0C;IAE1C,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,IAAI,SAA4B,CAAC;IAEjC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM;QACR,CAAC;QAED,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACxC,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC;QAEhC,
|
|
1
|
+
{"version":3,"file":"constraint-parser.js","sourceRoot":"","sources":["../../../src/parser/constraint-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CNL 策略输入值生成器
|
|
3
|
+
*
|
|
4
|
+
* 根据字段名称和类型自动生成有意义的示例输入值,
|
|
5
|
+
* 用于策略执行时的输入自动填充。
|
|
6
|
+
*
|
|
7
|
+
* 生成策略:
|
|
8
|
+
* 1. 根据字段名匹配业务领域规则,生成符合业务语义的值
|
|
9
|
+
* 2. 根据字段类型生成合适的默认值
|
|
10
|
+
* 3. 支持嵌套结构(struct)和数组类型
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // 金融领域
|
|
15
|
+
* generateFieldValue('creditScore', 'Int') // → 720
|
|
16
|
+
* generateFieldValue('loanAmount', 'Float') // → 50000.0
|
|
17
|
+
* generateFieldValue('interestRate', 'Float') // → 5.5
|
|
18
|
+
* generateFieldValue('isApproved', 'Bool') // → true
|
|
19
|
+
*
|
|
20
|
+
* // 用户信息
|
|
21
|
+
* generateFieldValue('applicantId', 'Text') // → "APP-2024-001"
|
|
22
|
+
* generateFieldValue('applicantName', 'Text') // → "John Smith"
|
|
23
|
+
* generateFieldValue('birthDate', 'DateTime') // → "1990-01-15"
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
/** 类型种类 */
|
|
27
|
+
export type TypeKind = 'primitive' | 'struct' | 'enum' | 'list' | 'map' | 'option' | 'result' | 'function' | 'unknown';
|
|
28
|
+
/** 字段信息 */
|
|
29
|
+
export interface FieldInfo {
|
|
30
|
+
name: string;
|
|
31
|
+
type: string;
|
|
32
|
+
typeKind: TypeKind;
|
|
33
|
+
fields?: FieldInfo[];
|
|
34
|
+
}
|
|
35
|
+
/** 参数信息 */
|
|
36
|
+
export interface ParameterInfo {
|
|
37
|
+
name: string;
|
|
38
|
+
type: string;
|
|
39
|
+
typeKind: TypeKind;
|
|
40
|
+
optional: boolean;
|
|
41
|
+
position: number;
|
|
42
|
+
fields?: FieldInfo[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 根据字段名和类型生成示例值
|
|
46
|
+
*
|
|
47
|
+
* @param fieldName 字段名称
|
|
48
|
+
* @param typeName 类型名称(如 'Int', 'Float', 'Text', 'Bool', 'DateTime')
|
|
49
|
+
* @param typeKind 类型种类(如 'primitive', 'struct', 'list')
|
|
50
|
+
* @returns 生成的示例值
|
|
51
|
+
*/
|
|
52
|
+
export declare function generateFieldValue(fieldName: string, typeName: string, typeKind?: TypeKind): unknown;
|
|
53
|
+
/**
|
|
54
|
+
* 为完整的参数列表生成输入值
|
|
55
|
+
*
|
|
56
|
+
* @param parameters 参数列表
|
|
57
|
+
* @returns 生成的输入值对象
|
|
58
|
+
*/
|
|
59
|
+
export declare function generateInputValues(parameters: ParameterInfo[]): Record<string, unknown>;
|
|
60
|
+
/**
|
|
61
|
+
* 获取字段的示例值描述(用于 UI 提示)
|
|
62
|
+
*
|
|
63
|
+
* @param fieldName 字段名称
|
|
64
|
+
* @param typeName 类型名称
|
|
65
|
+
* @returns 示例值描述
|
|
66
|
+
*/
|
|
67
|
+
export declare function getFieldValueHint(fieldName: string, typeName: string): string;
|
|
68
|
+
//# sourceMappingURL=input-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-generator.d.ts","sourceRoot":"","sources":["../../../src/parser/input-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,WAAW;AACX,MAAM,MAAM,QAAQ,GAChB,WAAW,GACX,QAAQ,GACR,MAAM,GACN,MAAM,GACN,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,SAAS,CAAC;AAEd,WAAW;AACX,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,WAAW;AACX,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAoZD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,QAAsB,GAC/B,OAAO,CAUT;AA0ID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,aAAa,EAAE,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA4BzB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQ7E"}
|