edacation 0.4.0 → 0.5.1
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/cli/util.d.ts +2 -1
- package/dist/project/configuration.d.ts +114 -1320
- package/dist/project/configuration.js +10 -9
- package/dist/project/configuration.js.map +1 -1
- package/dist/project/project.d.ts +93 -33
- package/dist/project/project.js +441 -27
- package/dist/project/project.js.map +1 -1
- package/dist/project/target.d.ts +1 -0
- package/dist/project/target.js +3 -2
- package/dist/project/target.js.map +1 -1
- package/dist/util.d.ts +2 -2
- package/package.json +12 -10
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.schemaProjectConfiguration = exports.DEFAULT_CONFIGURATION = void 0;
|
|
3
|
+
exports.schemaProjectConfiguration = exports.DEFAULT_CONFIGURATION = exports.DEFAULT_TARGET = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
|
+
exports.DEFAULT_TARGET = {
|
|
6
|
+
id: 'default',
|
|
7
|
+
name: 'ECP5 - LFE5U-25 - caBGA381',
|
|
8
|
+
vendor: 'lattice',
|
|
9
|
+
family: 'ecp5',
|
|
10
|
+
device: 'lfe5u-25',
|
|
11
|
+
package: 'caBGA381'
|
|
12
|
+
};
|
|
5
13
|
exports.DEFAULT_CONFIGURATION = {
|
|
6
14
|
targets: [
|
|
7
|
-
|
|
8
|
-
id: 'default',
|
|
9
|
-
name: 'ECP5 - LFE5U-12 - caBGA381',
|
|
10
|
-
vendor: 'lattice',
|
|
11
|
-
family: 'ecp5',
|
|
12
|
-
device: 'lfe5u-25',
|
|
13
|
-
package: 'caBGA381'
|
|
14
|
-
}
|
|
15
|
+
exports.DEFAULT_TARGET
|
|
15
16
|
]
|
|
16
17
|
};
|
|
17
18
|
const schemaValueList = zod_1.z.object({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/project/configuration.ts"],"names":[],"mappings":";;;AAAA,6BAAsB;AAIT,QAAA,
|
|
1
|
+
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/project/configuration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,27 @@
|
|
|
1
|
-
import { type ProjectConfiguration } from './configuration.js';
|
|
2
|
-
|
|
1
|
+
import { type ProjectConfiguration, TargetConfiguration, TargetOptionTypes, WorkerId } from './configuration.js';
|
|
2
|
+
import { Device, Family, Vendor } from './devices.js';
|
|
3
|
+
type Primitive = string | number | boolean | bigint | symbol | null | undefined | Date | RegExp | ((...args: unknown[]) => unknown);
|
|
4
|
+
type PathArray<T> = T extends Primitive ? never : {
|
|
5
|
+
[K in Extract<keyof T, string>]: T[K] extends Primitive | unknown[] ? [K] : [K] | [K, ...PathArray<T[K]>];
|
|
6
|
+
}[Extract<keyof T, string>];
|
|
7
|
+
type PathArrayValue<T, P extends readonly string[]> = P extends [] ? T : P extends [infer K extends string, ...infer R extends string[]] ? K extends keyof T ? PathArrayValue<T[K], R> : unknown : unknown;
|
|
8
|
+
export type ProjectEvent = 'meta' | 'inputFiles' | 'outputFiles' | 'configuration';
|
|
9
|
+
type EventCallback = (project: Project, events: ProjectEvent[]) => void;
|
|
3
10
|
export interface ProjectInputFileState {
|
|
4
11
|
path: string;
|
|
5
12
|
type: 'design' | 'testbench';
|
|
6
13
|
}
|
|
7
14
|
export declare class ProjectInputFile {
|
|
15
|
+
private _project;
|
|
8
16
|
private _path;
|
|
9
17
|
private _type;
|
|
10
|
-
constructor(_path: ProjectInputFileState['path'], _type: ProjectInputFileState['type']);
|
|
18
|
+
constructor(_project: Project, _path: ProjectInputFileState['path'], _type: ProjectInputFileState['type']);
|
|
11
19
|
get path(): ProjectInputFileState['path'];
|
|
12
20
|
get type(): ProjectInputFileState['type'];
|
|
13
21
|
set type(type: ProjectInputFileState['type']);
|
|
14
|
-
|
|
15
|
-
static deserialize(data: ProjectInputFileState | string, ..._args: unknown[]): ProjectInputFile;
|
|
22
|
+
serialize(): ProjectInputFileState;
|
|
23
|
+
static deserialize(project: Project, data: ProjectInputFileState | string, ..._args: unknown[]): ProjectInputFile;
|
|
24
|
+
copy(project: Project): ProjectInputFile;
|
|
16
25
|
}
|
|
17
26
|
export interface ProjectOutputFileState {
|
|
18
27
|
path: string;
|
|
@@ -31,8 +40,40 @@ export declare class ProjectOutputFile {
|
|
|
31
40
|
get target(): ProjectTarget | null;
|
|
32
41
|
get stale(): ProjectOutputFileState['stale'];
|
|
33
42
|
set stale(isStale: ProjectOutputFileState['stale']);
|
|
34
|
-
|
|
43
|
+
serialize(): ProjectOutputFileState;
|
|
35
44
|
static deserialize(project: Project, data: ProjectOutputFileState | string, ..._args: unknown[]): ProjectOutputFile;
|
|
45
|
+
copy(project: Project): ProjectOutputFile;
|
|
46
|
+
}
|
|
47
|
+
export declare class ProjectTarget {
|
|
48
|
+
private _project;
|
|
49
|
+
private _data;
|
|
50
|
+
constructor(_project: Project, _data: TargetConfiguration);
|
|
51
|
+
get id(): string;
|
|
52
|
+
set id(newId: string);
|
|
53
|
+
get name(): string;
|
|
54
|
+
set name(newName: string);
|
|
55
|
+
get vendorId(): string;
|
|
56
|
+
get availableVendors(): Record<string, Vendor>;
|
|
57
|
+
get vendor(): Vendor | undefined;
|
|
58
|
+
setVendor(vendorId: string): void;
|
|
59
|
+
get familyId(): string;
|
|
60
|
+
get availableFamilies(): Record<string, Family>;
|
|
61
|
+
get family(): Family | undefined;
|
|
62
|
+
setFamily(familyId: string): void;
|
|
63
|
+
get deviceId(): string;
|
|
64
|
+
get availableDevices(): Record<string, Device>;
|
|
65
|
+
get device(): Device | undefined;
|
|
66
|
+
setDevice(deviceId: string): void;
|
|
67
|
+
get packageId(): string;
|
|
68
|
+
get availablePackages(): Record<string, string>;
|
|
69
|
+
get package(): string | undefined;
|
|
70
|
+
setPackage(packageId: string): void;
|
|
71
|
+
get config(): TargetConfiguration;
|
|
72
|
+
setConfig<P extends PathArray<TargetConfiguration>>(path: P, value: PathArrayValue<TargetConfiguration, P>): void;
|
|
73
|
+
getEffectiveOptions<W extends WorkerId>(workerId: WorkerId): TargetOptionTypes[W];
|
|
74
|
+
getEffectiveTextConfig(workerId: WorkerId, configId: string, generated: string[], parse?: (values: string[]) => string[]): string[];
|
|
75
|
+
update(updates: Partial<TargetConfiguration>): void;
|
|
76
|
+
serialize(): TargetConfiguration;
|
|
36
77
|
}
|
|
37
78
|
export interface ProjectState {
|
|
38
79
|
name: string;
|
|
@@ -45,8 +86,12 @@ export declare class Project {
|
|
|
45
86
|
private inputFiles;
|
|
46
87
|
private outputFiles;
|
|
47
88
|
private configuration;
|
|
48
|
-
|
|
89
|
+
private eventCallback?;
|
|
90
|
+
private batchedEvents;
|
|
91
|
+
private batchCounter;
|
|
92
|
+
constructor(name: string, inputFiles?: ProjectInputFileState[] | string[], outputFiles?: ProjectOutputFileState[] | string[], configuration?: ProjectConfiguration, eventCallback?: EventCallback);
|
|
49
93
|
getName(): string;
|
|
94
|
+
setName(name: string): void;
|
|
50
95
|
getInputFiles(): ProjectInputFile[];
|
|
51
96
|
hasInputFile(filePath: string): boolean;
|
|
52
97
|
getInputFile(filePath: string): ProjectInputFile | null;
|
|
@@ -64,6 +109,15 @@ export declare class Project {
|
|
|
64
109
|
}[]): void;
|
|
65
110
|
removeOutputFiles(filePaths: string[]): void;
|
|
66
111
|
expireOutputFiles(): void;
|
|
112
|
+
setTopLevelModule(targetId: string, module: string): void;
|
|
113
|
+
setTestbenchPath(targetId: string, testbenchPath?: string): void;
|
|
114
|
+
setInputFileType(filePath: string, type: ProjectInputFile['type']): void;
|
|
115
|
+
getTargets(): ProjectTarget[];
|
|
116
|
+
hasTarget(id: string): boolean;
|
|
117
|
+
getTarget(id: string): ProjectTarget | null;
|
|
118
|
+
addTarget(id?: string, config?: Omit<TargetConfiguration, 'id'>): ProjectTarget;
|
|
119
|
+
removeTarget(id: string): void;
|
|
120
|
+
updateTarget(id: string, updates: Partial<TargetConfiguration>): void;
|
|
67
121
|
getConfiguration(): {
|
|
68
122
|
targets: {
|
|
69
123
|
id: string;
|
|
@@ -72,11 +126,8 @@ export declare class Project {
|
|
|
72
126
|
family: string;
|
|
73
127
|
device: string;
|
|
74
128
|
package: string;
|
|
129
|
+
directory?: string | undefined;
|
|
75
130
|
yosys?: {
|
|
76
|
-
options?: {
|
|
77
|
-
optimize?: boolean | undefined;
|
|
78
|
-
topLevelModule?: string | undefined;
|
|
79
|
-
} | undefined;
|
|
80
131
|
inputFiles?: {
|
|
81
132
|
useGenerated: boolean;
|
|
82
133
|
values: string[];
|
|
@@ -92,13 +143,12 @@ export declare class Project {
|
|
|
92
143
|
values: string[];
|
|
93
144
|
useDefault: boolean;
|
|
94
145
|
} | undefined;
|
|
95
|
-
} | undefined;
|
|
96
|
-
nextpnr?: {
|
|
97
146
|
options?: {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
routedJson?: boolean | undefined;
|
|
147
|
+
optimize?: boolean | undefined;
|
|
148
|
+
topLevelModule?: string | undefined;
|
|
101
149
|
} | undefined;
|
|
150
|
+
} | undefined;
|
|
151
|
+
nextpnr?: {
|
|
102
152
|
inputFiles?: {
|
|
103
153
|
useGenerated: boolean;
|
|
104
154
|
values: string[];
|
|
@@ -114,11 +164,13 @@ export declare class Project {
|
|
|
114
164
|
values: string[];
|
|
115
165
|
useDefault: boolean;
|
|
116
166
|
} | undefined;
|
|
117
|
-
} | undefined;
|
|
118
|
-
iverilog?: {
|
|
119
167
|
options?: {
|
|
120
|
-
|
|
168
|
+
placedSvg?: boolean | undefined;
|
|
169
|
+
routedSvg?: boolean | undefined;
|
|
170
|
+
routedJson?: boolean | undefined;
|
|
121
171
|
} | undefined;
|
|
172
|
+
} | undefined;
|
|
173
|
+
iverilog?: {
|
|
122
174
|
inputFiles?: {
|
|
123
175
|
useGenerated: boolean;
|
|
124
176
|
values: string[];
|
|
@@ -134,15 +186,13 @@ export declare class Project {
|
|
|
134
186
|
values: string[];
|
|
135
187
|
useDefault: boolean;
|
|
136
188
|
} | undefined;
|
|
189
|
+
options?: {
|
|
190
|
+
testbenchFile?: string | undefined;
|
|
191
|
+
} | undefined;
|
|
137
192
|
} | undefined;
|
|
138
|
-
directory?: string | undefined;
|
|
139
193
|
}[];
|
|
140
194
|
defaults?: {
|
|
141
195
|
yosys?: {
|
|
142
|
-
options?: {
|
|
143
|
-
optimize?: boolean | undefined;
|
|
144
|
-
topLevelModule?: string | undefined;
|
|
145
|
-
} | undefined;
|
|
146
196
|
inputFiles?: {
|
|
147
197
|
useGenerated: boolean;
|
|
148
198
|
values: string[];
|
|
@@ -155,13 +205,12 @@ export declare class Project {
|
|
|
155
205
|
useGenerated: boolean;
|
|
156
206
|
values: string[];
|
|
157
207
|
} | undefined;
|
|
158
|
-
} | undefined;
|
|
159
|
-
nextpnr?: {
|
|
160
208
|
options?: {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
routedJson?: boolean | undefined;
|
|
209
|
+
optimize?: boolean | undefined;
|
|
210
|
+
topLevelModule?: string | undefined;
|
|
164
211
|
} | undefined;
|
|
212
|
+
} | undefined;
|
|
213
|
+
nextpnr?: {
|
|
165
214
|
inputFiles?: {
|
|
166
215
|
useGenerated: boolean;
|
|
167
216
|
values: string[];
|
|
@@ -174,11 +223,13 @@ export declare class Project {
|
|
|
174
223
|
useGenerated: boolean;
|
|
175
224
|
values: string[];
|
|
176
225
|
} | undefined;
|
|
177
|
-
} | undefined;
|
|
178
|
-
iverilog?: {
|
|
179
226
|
options?: {
|
|
180
|
-
|
|
227
|
+
placedSvg?: boolean | undefined;
|
|
228
|
+
routedSvg?: boolean | undefined;
|
|
229
|
+
routedJson?: boolean | undefined;
|
|
181
230
|
} | undefined;
|
|
231
|
+
} | undefined;
|
|
232
|
+
iverilog?: {
|
|
182
233
|
inputFiles?: {
|
|
183
234
|
useGenerated: boolean;
|
|
184
235
|
values: string[];
|
|
@@ -191,11 +242,20 @@ export declare class Project {
|
|
|
191
242
|
useGenerated: boolean;
|
|
192
243
|
values: string[];
|
|
193
244
|
} | undefined;
|
|
245
|
+
options?: {
|
|
246
|
+
testbenchFile?: string | undefined;
|
|
247
|
+
} | undefined;
|
|
194
248
|
} | undefined;
|
|
195
249
|
} | undefined;
|
|
196
250
|
};
|
|
197
251
|
updateConfiguration(configuration: Partial<ProjectConfiguration>): void;
|
|
198
|
-
|
|
252
|
+
protected importFromProject(other: Project, doTriggerEvent?: boolean): void;
|
|
253
|
+
triggerInputFilesChanged(): void;
|
|
254
|
+
triggerOutputFilesChanged(): void;
|
|
255
|
+
triggerConfigurationChanged(): void;
|
|
256
|
+
protected emitEvents(...events: ProjectEvent[]): void;
|
|
257
|
+
protected batchEvents<T>(func: () => T, ...events: ProjectEvent[]): T;
|
|
258
|
+
protected static emitsEvents(...events: ProjectEvent[]): <T>(_target: object, _propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T> | void;
|
|
199
259
|
static serialize(project: Project): ProjectState;
|
|
200
260
|
static deserialize(data: ProjectState, ..._args: unknown[]): Project;
|
|
201
261
|
static loadFromData(rawData: Uint8Array): Project;
|