edacation 0.5.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 +78 -32
- package/dist/project/project.js +284 -38
- 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,21 +1,27 @@
|
|
|
1
|
-
import { type ProjectConfiguration } from './configuration.js';
|
|
2
|
-
|
|
3
|
-
|
|
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';
|
|
4
9
|
type EventCallback = (project: Project, events: ProjectEvent[]) => void;
|
|
5
10
|
export interface ProjectInputFileState {
|
|
6
11
|
path: string;
|
|
7
12
|
type: 'design' | 'testbench';
|
|
8
13
|
}
|
|
9
14
|
export declare class ProjectInputFile {
|
|
15
|
+
private _project;
|
|
10
16
|
private _path;
|
|
11
17
|
private _type;
|
|
12
|
-
constructor(_path: ProjectInputFileState['path'], _type: ProjectInputFileState['type']);
|
|
18
|
+
constructor(_project: Project, _path: ProjectInputFileState['path'], _type: ProjectInputFileState['type']);
|
|
13
19
|
get path(): ProjectInputFileState['path'];
|
|
14
20
|
get type(): ProjectInputFileState['type'];
|
|
15
21
|
set type(type: ProjectInputFileState['type']);
|
|
16
22
|
serialize(): ProjectInputFileState;
|
|
17
|
-
static deserialize(data: ProjectInputFileState | string, ..._args: unknown[]): ProjectInputFile;
|
|
18
|
-
copy(): ProjectInputFile;
|
|
23
|
+
static deserialize(project: Project, data: ProjectInputFileState | string, ..._args: unknown[]): ProjectInputFile;
|
|
24
|
+
copy(project: Project): ProjectInputFile;
|
|
19
25
|
}
|
|
20
26
|
export interface ProjectOutputFileState {
|
|
21
27
|
path: string;
|
|
@@ -38,6 +44,37 @@ export declare class ProjectOutputFile {
|
|
|
38
44
|
static deserialize(project: Project, data: ProjectOutputFileState | string, ..._args: unknown[]): ProjectOutputFile;
|
|
39
45
|
copy(project: Project): ProjectOutputFile;
|
|
40
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;
|
|
77
|
+
}
|
|
41
78
|
export interface ProjectState {
|
|
42
79
|
name: string;
|
|
43
80
|
inputFiles: ProjectInputFileState[] | string[];
|
|
@@ -54,6 +91,7 @@ export declare class Project {
|
|
|
54
91
|
private batchCounter;
|
|
55
92
|
constructor(name: string, inputFiles?: ProjectInputFileState[] | string[], outputFiles?: ProjectOutputFileState[] | string[], configuration?: ProjectConfiguration, eventCallback?: EventCallback);
|
|
56
93
|
getName(): string;
|
|
94
|
+
setName(name: string): void;
|
|
57
95
|
getInputFiles(): ProjectInputFile[];
|
|
58
96
|
hasInputFile(filePath: string): boolean;
|
|
59
97
|
getInputFile(filePath: string): ProjectInputFile | null;
|
|
@@ -74,7 +112,12 @@ export declare class Project {
|
|
|
74
112
|
setTopLevelModule(targetId: string, module: string): void;
|
|
75
113
|
setTestbenchPath(targetId: string, testbenchPath?: string): void;
|
|
76
114
|
setInputFileType(filePath: string, type: ProjectInputFile['type']): void;
|
|
115
|
+
getTargets(): ProjectTarget[];
|
|
116
|
+
hasTarget(id: string): boolean;
|
|
77
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;
|
|
78
121
|
getConfiguration(): {
|
|
79
122
|
targets: {
|
|
80
123
|
id: string;
|
|
@@ -83,11 +126,8 @@ export declare class Project {
|
|
|
83
126
|
family: string;
|
|
84
127
|
device: string;
|
|
85
128
|
package: string;
|
|
129
|
+
directory?: string | undefined;
|
|
86
130
|
yosys?: {
|
|
87
|
-
options?: {
|
|
88
|
-
optimize?: boolean | undefined;
|
|
89
|
-
topLevelModule?: string | undefined;
|
|
90
|
-
} | undefined;
|
|
91
131
|
inputFiles?: {
|
|
92
132
|
useGenerated: boolean;
|
|
93
133
|
values: string[];
|
|
@@ -103,13 +143,12 @@ export declare class Project {
|
|
|
103
143
|
values: string[];
|
|
104
144
|
useDefault: boolean;
|
|
105
145
|
} | undefined;
|
|
106
|
-
} | undefined;
|
|
107
|
-
nextpnr?: {
|
|
108
146
|
options?: {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
routedJson?: boolean | undefined;
|
|
147
|
+
optimize?: boolean | undefined;
|
|
148
|
+
topLevelModule?: string | undefined;
|
|
112
149
|
} | undefined;
|
|
150
|
+
} | undefined;
|
|
151
|
+
nextpnr?: {
|
|
113
152
|
inputFiles?: {
|
|
114
153
|
useGenerated: boolean;
|
|
115
154
|
values: string[];
|
|
@@ -125,11 +164,13 @@ export declare class Project {
|
|
|
125
164
|
values: string[];
|
|
126
165
|
useDefault: boolean;
|
|
127
166
|
} | undefined;
|
|
128
|
-
} | undefined;
|
|
129
|
-
iverilog?: {
|
|
130
167
|
options?: {
|
|
131
|
-
|
|
168
|
+
placedSvg?: boolean | undefined;
|
|
169
|
+
routedSvg?: boolean | undefined;
|
|
170
|
+
routedJson?: boolean | undefined;
|
|
132
171
|
} | undefined;
|
|
172
|
+
} | undefined;
|
|
173
|
+
iverilog?: {
|
|
133
174
|
inputFiles?: {
|
|
134
175
|
useGenerated: boolean;
|
|
135
176
|
values: string[];
|
|
@@ -145,15 +186,13 @@ export declare class Project {
|
|
|
145
186
|
values: string[];
|
|
146
187
|
useDefault: boolean;
|
|
147
188
|
} | undefined;
|
|
189
|
+
options?: {
|
|
190
|
+
testbenchFile?: string | undefined;
|
|
191
|
+
} | undefined;
|
|
148
192
|
} | undefined;
|
|
149
|
-
directory?: string | undefined;
|
|
150
193
|
}[];
|
|
151
194
|
defaults?: {
|
|
152
195
|
yosys?: {
|
|
153
|
-
options?: {
|
|
154
|
-
optimize?: boolean | undefined;
|
|
155
|
-
topLevelModule?: string | undefined;
|
|
156
|
-
} | undefined;
|
|
157
196
|
inputFiles?: {
|
|
158
197
|
useGenerated: boolean;
|
|
159
198
|
values: string[];
|
|
@@ -166,13 +205,12 @@ export declare class Project {
|
|
|
166
205
|
useGenerated: boolean;
|
|
167
206
|
values: string[];
|
|
168
207
|
} | undefined;
|
|
169
|
-
} | undefined;
|
|
170
|
-
nextpnr?: {
|
|
171
208
|
options?: {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
routedJson?: boolean | undefined;
|
|
209
|
+
optimize?: boolean | undefined;
|
|
210
|
+
topLevelModule?: string | undefined;
|
|
175
211
|
} | undefined;
|
|
212
|
+
} | undefined;
|
|
213
|
+
nextpnr?: {
|
|
176
214
|
inputFiles?: {
|
|
177
215
|
useGenerated: boolean;
|
|
178
216
|
values: string[];
|
|
@@ -185,11 +223,13 @@ export declare class Project {
|
|
|
185
223
|
useGenerated: boolean;
|
|
186
224
|
values: string[];
|
|
187
225
|
} | undefined;
|
|
188
|
-
} | undefined;
|
|
189
|
-
iverilog?: {
|
|
190
226
|
options?: {
|
|
191
|
-
|
|
227
|
+
placedSvg?: boolean | undefined;
|
|
228
|
+
routedSvg?: boolean | undefined;
|
|
229
|
+
routedJson?: boolean | undefined;
|
|
192
230
|
} | undefined;
|
|
231
|
+
} | undefined;
|
|
232
|
+
iverilog?: {
|
|
193
233
|
inputFiles?: {
|
|
194
234
|
useGenerated: boolean;
|
|
195
235
|
values: string[];
|
|
@@ -202,14 +242,20 @@ export declare class Project {
|
|
|
202
242
|
useGenerated: boolean;
|
|
203
243
|
values: string[];
|
|
204
244
|
} | undefined;
|
|
245
|
+
options?: {
|
|
246
|
+
testbenchFile?: string | undefined;
|
|
247
|
+
} | undefined;
|
|
205
248
|
} | undefined;
|
|
206
249
|
} | undefined;
|
|
207
250
|
};
|
|
208
251
|
updateConfiguration(configuration: Partial<ProjectConfiguration>): void;
|
|
209
252
|
protected importFromProject(other: Project, doTriggerEvent?: boolean): void;
|
|
253
|
+
triggerInputFilesChanged(): void;
|
|
254
|
+
triggerOutputFilesChanged(): void;
|
|
255
|
+
triggerConfigurationChanged(): void;
|
|
210
256
|
protected emitEvents(...events: ProjectEvent[]): void;
|
|
211
257
|
protected batchEvents<T>(func: () => T, ...events: ProjectEvent[]): T;
|
|
212
|
-
protected static emitsEvents
|
|
258
|
+
protected static emitsEvents(...events: ProjectEvent[]): <T>(_target: object, _propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T> | void;
|
|
213
259
|
static serialize(project: Project): ProjectState;
|
|
214
260
|
static deserialize(data: ProjectState, ..._args: unknown[]): Project;
|
|
215
261
|
static loadFromData(rawData: Uint8Array): Project;
|