@teacss/engine 0.8.5-alpha.4 → 0.9.0-alpha.4
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 +4 -4
- package/binding-header.d.ts +23 -0
- package/binding.d.ts +26 -1
- package/binding.js +54 -54
- package/contract.d.ts +290 -0
- package/dist/config-view.d.ts +27 -0
- package/dist/config-view.js +98 -0
- package/dist/constants.d.ts +22 -0
- package/{src/facade/constants.mjs → dist/constants.js} +11 -12
- package/dist/countable-set.d.ts +57 -0
- package/dist/countable-set.js +205 -0
- package/dist/errors.d.ts +11 -0
- package/dist/errors.js +18 -0
- package/dist/generator.d.ts +155 -0
- package/dist/generator.js +818 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +10 -0
- package/dist/result.d.ts +83 -0
- package/dist/result.js +142 -0
- package/dist/select.d.ts +175 -0
- package/dist/select.js +680 -0
- package/dist/transformer.d.ts +44 -0
- package/dist/transformer.js +59 -0
- package/dist/ts-fallback.d.ts +32 -0
- package/dist/ts-fallback.js +78 -0
- package/package.json +46 -29
- package/index.d.ts +0 -387
- package/index.js +0 -2
- package/src/facade/config-view.mjs +0 -82
- package/src/facade/countable-set.mjs +0 -179
- package/src/facade/errors.mjs +0 -22
- package/src/facade/generator.mjs +0 -812
- package/src/facade/index.mjs +0 -19
- package/src/facade/result.mjs +0 -157
- package/src/facade/select.mjs +0 -635
- package/src/facade/transformer.mjs +0 -56
- package/src/facade/ts-fallback.mjs +0 -88
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
// Token collections the facade shares with `@teacss/core`: CountableSet (core/utils/countable-set.ts),
|
|
2
|
+
// expandInputGroups (core/generator.ts:517-535) and the FIFO caches of core/bounded-cache.ts.
|
|
3
|
+
import { expandClassGroups, splitClassTokens } from "../binding.js";
|
|
4
|
+
export const MAX_RUNTIME_CACHE_ENTRIES = 10_000;
|
|
5
|
+
export class CountableSet extends Set {
|
|
6
|
+
_map = new Map();
|
|
7
|
+
constructor(values) {
|
|
8
|
+
super();
|
|
9
|
+
if (values)
|
|
10
|
+
for (const key of values)
|
|
11
|
+
this.add(key);
|
|
12
|
+
}
|
|
13
|
+
add(key) {
|
|
14
|
+
this._map.set(key, (this._map.get(key) ?? 0) + 1);
|
|
15
|
+
return super.add(key);
|
|
16
|
+
}
|
|
17
|
+
delete(key) {
|
|
18
|
+
if (!this._map.has(key))
|
|
19
|
+
return false;
|
|
20
|
+
this._map.delete(key);
|
|
21
|
+
return super.delete(key);
|
|
22
|
+
}
|
|
23
|
+
clear() {
|
|
24
|
+
this._map.clear();
|
|
25
|
+
super.clear();
|
|
26
|
+
}
|
|
27
|
+
getCount(key) {
|
|
28
|
+
return this._map.get(key) ?? 0;
|
|
29
|
+
}
|
|
30
|
+
setCount(key, count) {
|
|
31
|
+
this._map.set(key, count);
|
|
32
|
+
return super.add(key);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function isCountableSet(value) {
|
|
36
|
+
return value instanceof CountableSet;
|
|
37
|
+
}
|
|
38
|
+
export function copyCountableSet(input) {
|
|
39
|
+
const copied = new CountableSet();
|
|
40
|
+
for (const key of input)
|
|
41
|
+
copied.setCount(key, input.getCount(key));
|
|
42
|
+
return copied;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Expands the tokens holding a `{…}` group in place; the parts go to the end, and a counted
|
|
46
|
+
* group's count carries over to each part.
|
|
47
|
+
*/
|
|
48
|
+
export function expandInputGroups(tokens) {
|
|
49
|
+
const expanded = [...tokens].filter((token) => token.includes("{"));
|
|
50
|
+
if (expanded.length === 0)
|
|
51
|
+
return tokens;
|
|
52
|
+
for (const token of expanded) {
|
|
53
|
+
const parts = splitClassTokens(expandClassGroups(token));
|
|
54
|
+
if (parts.length === 1 && parts[0] === token)
|
|
55
|
+
continue;
|
|
56
|
+
const count = isCountableSet(tokens) ? tokens.getCount(token) : 1;
|
|
57
|
+
tokens.delete(token);
|
|
58
|
+
for (const part of parts) {
|
|
59
|
+
if (isCountableSet(tokens))
|
|
60
|
+
tokens.setCount(part, tokens.getCount(part) + count);
|
|
61
|
+
else
|
|
62
|
+
tokens.add(part);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return tokens;
|
|
66
|
+
}
|
|
67
|
+
/** The value of an entry whose token has not been resolved yet; never a valid `V`. */
|
|
68
|
+
const PENDING = Symbol("@teacss/engine/pending");
|
|
69
|
+
function noResolver(token) {
|
|
70
|
+
throw new TypeError(`[@teacss/engine] pending cache entry "${token}" has no resolver`);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The part of the oracle `BoundedMap` the facade uses: ordinary keys are evicted oldest first,
|
|
74
|
+
* retained keys never count toward the limit. An entry can be pending (`setPending`,
|
|
75
|
+
* `replaceRetainedPending`): its value is `resolve(token)`, computed on the first read through
|
|
76
|
+
* `get`, `forEach` or iteration and kept in place; `has`, `size`, `delete` and eviction never
|
|
77
|
+
* resolve.
|
|
78
|
+
*/
|
|
79
|
+
export class BoundedTokenCache extends Map {
|
|
80
|
+
constructor(maxEntries = MAX_RUNTIME_CACHE_ENTRIES, resolve = noResolver) {
|
|
81
|
+
super();
|
|
82
|
+
this.maxEntries = maxEntries;
|
|
83
|
+
this.retained = new Set();
|
|
84
|
+
this.order = new Set();
|
|
85
|
+
this.resolve = resolve;
|
|
86
|
+
}
|
|
87
|
+
get retainedSize() {
|
|
88
|
+
return this.retained.size;
|
|
89
|
+
}
|
|
90
|
+
isRetained(key) {
|
|
91
|
+
return this.retained.has(key);
|
|
92
|
+
}
|
|
93
|
+
get(key) {
|
|
94
|
+
const stored = super.get(key);
|
|
95
|
+
return stored === PENDING ? this.#materialize(key) : stored;
|
|
96
|
+
}
|
|
97
|
+
*entries() {
|
|
98
|
+
for (const [key, stored] of super.entries())
|
|
99
|
+
yield [key, this.#value(key, stored)];
|
|
100
|
+
}
|
|
101
|
+
*values() {
|
|
102
|
+
for (const [key, stored] of super.entries())
|
|
103
|
+
yield this.#value(key, stored);
|
|
104
|
+
}
|
|
105
|
+
[Symbol.iterator]() {
|
|
106
|
+
return this.entries();
|
|
107
|
+
}
|
|
108
|
+
forEach(callback, thisArg) {
|
|
109
|
+
for (const [key, value] of this.entries())
|
|
110
|
+
callback.call(thisArg, value, key, this);
|
|
111
|
+
}
|
|
112
|
+
set(key, value) {
|
|
113
|
+
return this.#insert(key, value);
|
|
114
|
+
}
|
|
115
|
+
/** Caches `key` with the value `resolve` supplies on its first read. */
|
|
116
|
+
setPending(key) {
|
|
117
|
+
return this.#insert(key, PENDING);
|
|
118
|
+
}
|
|
119
|
+
delete(key) {
|
|
120
|
+
const deleted = super.delete(key);
|
|
121
|
+
this.order.delete(key);
|
|
122
|
+
this.retained.delete(key);
|
|
123
|
+
return deleted;
|
|
124
|
+
}
|
|
125
|
+
clear() {
|
|
126
|
+
super.clear();
|
|
127
|
+
this.order.clear();
|
|
128
|
+
this.retained.clear();
|
|
129
|
+
}
|
|
130
|
+
/** Replaces the retained entries (bounded-cache.ts:188-205 without the revision check). */
|
|
131
|
+
replaceRetained(entries) {
|
|
132
|
+
this.#replaceRetained(new Map(entries));
|
|
133
|
+
}
|
|
134
|
+
/** `replaceRetained` with every value pending. */
|
|
135
|
+
replaceRetainedPending(keys) {
|
|
136
|
+
const next = new Map();
|
|
137
|
+
for (const key of keys)
|
|
138
|
+
next.set(key, PENDING);
|
|
139
|
+
this.#replaceRetained(next);
|
|
140
|
+
}
|
|
141
|
+
#value(key, stored) {
|
|
142
|
+
return stored === PENDING ? this.#materialize(key) : stored;
|
|
143
|
+
}
|
|
144
|
+
#materialize(key) {
|
|
145
|
+
const value = this.resolve(key);
|
|
146
|
+
super.set(key, value);
|
|
147
|
+
return value;
|
|
148
|
+
}
|
|
149
|
+
#insert(key, value) {
|
|
150
|
+
const exists = super.has(key);
|
|
151
|
+
this.#store(key, value);
|
|
152
|
+
if (!exists && !this.retained.has(key))
|
|
153
|
+
this.order.add(key);
|
|
154
|
+
this.#enforceLimit();
|
|
155
|
+
return this;
|
|
156
|
+
}
|
|
157
|
+
#replaceRetained(next) {
|
|
158
|
+
for (const key of this.retained) {
|
|
159
|
+
if (next.has(key))
|
|
160
|
+
continue;
|
|
161
|
+
super.delete(key);
|
|
162
|
+
this.retained.delete(key);
|
|
163
|
+
}
|
|
164
|
+
for (const [key, value] of next) {
|
|
165
|
+
this.order.delete(key);
|
|
166
|
+
this.#store(key, value);
|
|
167
|
+
this.retained.add(key);
|
|
168
|
+
}
|
|
169
|
+
this.#enforceLimit();
|
|
170
|
+
}
|
|
171
|
+
/** The marker is stored as a `V`; every read path above resolves it before a caller sees it. */
|
|
172
|
+
#store(key, value) {
|
|
173
|
+
super.set(key, value);
|
|
174
|
+
}
|
|
175
|
+
#enforceLimit() {
|
|
176
|
+
while (this.size - this.retained.size > this.maxEntries) {
|
|
177
|
+
const oldest = this.order.values().next();
|
|
178
|
+
if (oldest.done)
|
|
179
|
+
break;
|
|
180
|
+
this.order.delete(oldest.value);
|
|
181
|
+
super.delete(oldest.value);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/** FIFO bounded Set (the oracle `BoundedSet` without its `assumeNoPrototypeBypass` fast path). */
|
|
186
|
+
export class BoundedSet extends Set {
|
|
187
|
+
constructor(maxEntries = MAX_RUNTIME_CACHE_ENTRIES, values) {
|
|
188
|
+
super();
|
|
189
|
+
this.maxEntries = maxEntries;
|
|
190
|
+
if (values)
|
|
191
|
+
for (const value of values)
|
|
192
|
+
this.add(value);
|
|
193
|
+
}
|
|
194
|
+
add(value) {
|
|
195
|
+
super.add(value);
|
|
196
|
+
while (this.size > this.maxEntries) {
|
|
197
|
+
const oldest = this.values().next();
|
|
198
|
+
if (oldest.done)
|
|
199
|
+
break;
|
|
200
|
+
super.delete(oldest.value);
|
|
201
|
+
}
|
|
202
|
+
return this;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=countable-set.js.map
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Errors the facade raises itself; an `Error` from napi (code `E_*`) passes through unwrapped. */
|
|
2
|
+
export declare class TeacssEngineError extends Error {
|
|
3
|
+
code: string;
|
|
4
|
+
details: Record<string, unknown>;
|
|
5
|
+
constructor(code: string, message: string, details?: Record<string, unknown>);
|
|
6
|
+
}
|
|
7
|
+
/** v02.9 §2.1: the member needs `@teacss/core`, which is not installed. */
|
|
8
|
+
export declare function tsRequiredError(member: string): TeacssEngineError;
|
|
9
|
+
/** v02.9 §3.3: the member needs the TypeScript engine, which has not been materialized. */
|
|
10
|
+
export declare function tsNotReadyError(member: string): TeacssEngineError;
|
|
11
|
+
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Errors the facade raises itself; an `Error` from napi (code `E_*`) passes through unwrapped. */
|
|
2
|
+
export class TeacssEngineError extends Error {
|
|
3
|
+
constructor(code, message, details = {}) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = "TeacssEngineError";
|
|
6
|
+
this.code = code;
|
|
7
|
+
this.details = details;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/** v02.9 §2.1: the member needs `@teacss/core`, which is not installed. */
|
|
11
|
+
export function tsRequiredError(member) {
|
|
12
|
+
return new TeacssEngineError("E_TS_REQUIRED", `[@teacss/engine] ${member} requires @teacss/core (optional peer) to be installed`, { member });
|
|
13
|
+
}
|
|
14
|
+
/** v02.9 §3.3: the member needs the TypeScript engine, which has not been materialized. */
|
|
15
|
+
export function tsNotReadyError(member) {
|
|
16
|
+
return new TeacssEngineError("E_TS_REQUIRED", `[@teacss/engine] ${member} needs the TypeScript engine; await generator[Symbol.for('@teacss/engine/materialize')]() first or set engine: 'ts'`, { member });
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { ENGINE_INSTANCE, ENGINE_MATERIALIZE } from "./constants.js";
|
|
2
|
+
/** Port of core/utils/events.ts:84-112. */
|
|
3
|
+
export declare function createNanoEvents(): {
|
|
4
|
+
events: any;
|
|
5
|
+
emit(event: string, ...args: unknown[]): void;
|
|
6
|
+
on(event: string, cb: Function): () => void;
|
|
7
|
+
};
|
|
8
|
+
/** Port of core/utils/escape.ts:10-72 (CSSOM "serialize an identifier"). */
|
|
9
|
+
export declare function escapeSelector(str: string): string;
|
|
10
|
+
/** generator.ts:3722. */
|
|
11
|
+
export declare function toEscapedSelector(raw: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* v02.9 §8.1: the process-wide counters, the same object the teacss-ts hook updates.
|
|
14
|
+
*/
|
|
15
|
+
export declare function engineStats(): {
|
|
16
|
+
rust: number;
|
|
17
|
+
ts: number;
|
|
18
|
+
fallbacks: Record<string, number>;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* v02.9 §9: each reason and path prints once per process; the counter grows on every call. A
|
|
22
|
+
* host `report(reason, path, level)` (the hook's consola) replaces the stderr line.
|
|
23
|
+
*/
|
|
24
|
+
export declare function reportFallback(reason: string, path: string, host?: FacadeHost, level?: "info" | "warn"): void;
|
|
25
|
+
export declare class FacadeGenerator {
|
|
26
|
+
#private;
|
|
27
|
+
/** The facade's own emitter; a TS backend's `events` are not forwarded. */
|
|
28
|
+
events: {
|
|
29
|
+
events: any;
|
|
30
|
+
emit(event: string, ...args: unknown[]): void;
|
|
31
|
+
on(event: string, cb: Function): () => void;
|
|
32
|
+
};
|
|
33
|
+
userConfig: Record<string, unknown>;
|
|
34
|
+
defaults: Record<string, unknown>;
|
|
35
|
+
/**
|
|
36
|
+
* An `engine` gives a Rust backend and `ts` a TypeScript one.
|
|
37
|
+
*/
|
|
38
|
+
constructor({ engine, request, presets, transformers, ts, userConfig, defaults, host, transformer, }: {
|
|
39
|
+
engine?: any;
|
|
40
|
+
request?: object;
|
|
41
|
+
presets?: object[];
|
|
42
|
+
transformers?: object[];
|
|
43
|
+
ts?: any;
|
|
44
|
+
userConfig?: Record<string, unknown>;
|
|
45
|
+
defaults?: Record<string, unknown>;
|
|
46
|
+
host?: {
|
|
47
|
+
core?: any;
|
|
48
|
+
};
|
|
49
|
+
transformer?: object | null;
|
|
50
|
+
});
|
|
51
|
+
get version(): any;
|
|
52
|
+
get config(): any;
|
|
53
|
+
get cache(): any;
|
|
54
|
+
get blocked(): any;
|
|
55
|
+
get parentOrders(): any;
|
|
56
|
+
get activatedRules(): any;
|
|
57
|
+
set cache(value: any);
|
|
58
|
+
set blocked(value: any);
|
|
59
|
+
set parentOrders(value: any);
|
|
60
|
+
set activatedRules(value: any);
|
|
61
|
+
get [ENGINE_INSTANCE](): any;
|
|
62
|
+
/**
|
|
63
|
+
* The two overloads of generator.ts:2037-2040. With an `id` the Engine records the module's
|
|
64
|
+
* tokens; a counted set adds each token's occurrences.
|
|
65
|
+
*/
|
|
66
|
+
applyExtractors(code: string, id?: string, extracted?: Set<string>): Promise<any>;
|
|
67
|
+
/**
|
|
68
|
+
* The overloads of generator.ts:2316-2318. String input is extracted here, as Rust's
|
|
69
|
+
* `{ kind: "code" }` would, so its tokens reach the cache and the unmatched check (the oracle
|
|
70
|
+
* runs `applyExtractors` on it, generator.ts:2378).
|
|
71
|
+
*/
|
|
72
|
+
generate(input: string | string[] | Set<string>, options?: Record<string, any>): Promise<any>;
|
|
73
|
+
/**
|
|
74
|
+
* generator.ts:2113-2286. A tuple array, or `undefined` for a miss or a blocked token; a miss
|
|
75
|
+
* already cached reads back as `null`. With an `alias` nothing is cached.
|
|
76
|
+
*/
|
|
77
|
+
parseToken(raw: string, alias?: string): Promise<any>;
|
|
78
|
+
/** generator.ts:3611. */
|
|
79
|
+
isBlocked(raw: string): any;
|
|
80
|
+
/** generator.ts:3623; the blocklist holds strings only (anything else falls back). */
|
|
81
|
+
getBlocked(raw: string): [string, undefined] | undefined;
|
|
82
|
+
/** generator.ts:2304-2314: cached tokens that emit the same output as `raw`. */
|
|
83
|
+
getCachedEquivalentTokens(raw: string): string[];
|
|
84
|
+
/** The TypeScript generator behind the tooling members, created on first call; a TS backend returns itself. */
|
|
85
|
+
[ENGINE_MATERIALIZE](): Promise<any>;
|
|
86
|
+
/** generator.ts:2105. */
|
|
87
|
+
makeContext(raw: string, applied: unknown): any;
|
|
88
|
+
/** generator.ts:2809. */
|
|
89
|
+
constructCustomCSS(context: unknown, body: unknown, overrideSelector?: string): any;
|
|
90
|
+
/** generator.ts:3160. */
|
|
91
|
+
stringifyUtil(parsed?: unknown, context?: unknown): any;
|
|
92
|
+
/** generator.ts:2635. */
|
|
93
|
+
matchVariants(raw: string, current?: string): Promise<any>;
|
|
94
|
+
/** generator.ts:2866. */
|
|
95
|
+
parseUtil(input: unknown, context: unknown, internal?: boolean, shortcutPrefix?: string | string[]): Promise<any>;
|
|
96
|
+
/** generator.ts:3208. */
|
|
97
|
+
expandShortcut(input: string, context: unknown, depth?: number): Promise<any>;
|
|
98
|
+
/** generator.ts:3409. */
|
|
99
|
+
stringifyShortcuts(parent: unknown, context: unknown, expanded: unknown[], meta?: unknown, matchedPrefixes?: unknown): Promise<any>;
|
|
100
|
+
/** generator.ts:1976-1980: a falsy config keeps the current one. */
|
|
101
|
+
setConfig(userConfig?: Record<string, unknown>, defaults?: Record<string, unknown>): Promise<void>;
|
|
102
|
+
/**
|
|
103
|
+
* generator.ts:1983-2008: a candidate generator for the configuration, without touching this
|
|
104
|
+
* one. A configuration Rust cannot serve gets a TypeScript candidate.
|
|
105
|
+
*/
|
|
106
|
+
prepareConfig(userConfig: Record<string, unknown>, defaults?: Record<string, unknown>): Promise<Readonly<{
|
|
107
|
+
config: any;
|
|
108
|
+
defaults: Record<string, unknown>;
|
|
109
|
+
generator: FacadeGenerator;
|
|
110
|
+
userConfig: Record<string, unknown>;
|
|
111
|
+
version: number;
|
|
112
|
+
}>>;
|
|
113
|
+
/**
|
|
114
|
+
* generator.ts:2010-2035: switch to the prepared backend if no newer request superseded it. A
|
|
115
|
+
* superseded Rust candidate is disposed; so is the previous Engine once it is replaced.
|
|
116
|
+
*/
|
|
117
|
+
commitConfig(prepared: {
|
|
118
|
+
config: unknown;
|
|
119
|
+
defaults: Record<string, unknown>;
|
|
120
|
+
generator: FacadeGenerator;
|
|
121
|
+
userConfig: Record<string, unknown>;
|
|
122
|
+
version: number;
|
|
123
|
+
}): boolean;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* v02.9 §3.1: a Rust facade, or the reason the configuration needs TypeScript. Errors from
|
|
127
|
+
* `loadProject` (`E_*`) are thrown as they are, not turned into a fallback. The hook counts the
|
|
128
|
+
* initial creation, so this does not.
|
|
129
|
+
*/
|
|
130
|
+
export interface FacadeHost {
|
|
131
|
+
/** 挂钩注入的 @teacss/core 绑定;缺省时 facade 按需动态 import。 */
|
|
132
|
+
core?: {
|
|
133
|
+
version: string;
|
|
134
|
+
createGenerator: (config?: object, defaults?: object) => Promise<object>;
|
|
135
|
+
createTsGenerator?: (config?: object, defaults?: object) => Promise<object>;
|
|
136
|
+
extractorSplit: object;
|
|
137
|
+
isCountableSet?: (value: unknown) => boolean;
|
|
138
|
+
isTokenShaped?: (token: string) => boolean;
|
|
139
|
+
toEscapedSelector?: (raw: string) => string;
|
|
140
|
+
/** core/utils/warn.ts 的 warnOnce;传入时 shortcut 警告与 TS 引擎共用一个去重集合。 */
|
|
141
|
+
warnOnce?: (message: string) => void;
|
|
142
|
+
} | undefined;
|
|
143
|
+
/** 挂钩注入的日志出口;缺省时写 process.stderr。 */
|
|
144
|
+
report?: (reason: string, path: string, level: "info" | "warn") => void;
|
|
145
|
+
}
|
|
146
|
+
export type FacadeCreateResult = {
|
|
147
|
+
ok: true;
|
|
148
|
+
generator: FacadeGenerator;
|
|
149
|
+
} | {
|
|
150
|
+
ok: false;
|
|
151
|
+
reason: string;
|
|
152
|
+
path: string;
|
|
153
|
+
};
|
|
154
|
+
export declare function createGenerator(config?: Record<string, unknown>, defaults?: Record<string, unknown>, host?: FacadeHost): Promise<FacadeCreateResult>;
|
|
155
|
+
//# sourceMappingURL=generator.d.ts.map
|