edacation 0.3.12 → 0.5.0

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.
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getIVerilogWorkerOptions = exports.parseIVerilogArguments = exports.generateIVerilogWorkerOptions = exports.getIVerilogOptions = exports.getIVerilogDefaultOptions = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const string_args_parser_1 = require("string-args-parser");
9
+ const util_js_1 = require("../util.js");
10
+ const target_js_1 = require("./target.js");
11
+ const DEFAULT_OPTIONS = {
12
+ testbenchFile: undefined
13
+ };
14
+ const getIVerilogDefaultOptions = (configuration) => (0, target_js_1.getDefaultOptions)(configuration, 'iverilog', DEFAULT_OPTIONS);
15
+ exports.getIVerilogDefaultOptions = getIVerilogDefaultOptions;
16
+ const getIVerilogOptions = (configuration, targetId) => (0, target_js_1.getOptions)(configuration, targetId, 'iverilog', DEFAULT_OPTIONS);
17
+ exports.getIVerilogOptions = getIVerilogOptions;
18
+ const generateIVerilogWorkerOptions = (configuration, projectInputFiles, targetId) => {
19
+ const target = (0, target_js_1.getTarget)(configuration, targetId);
20
+ const options = (0, exports.getIVerilogOptions)(configuration, targetId);
21
+ const files = projectInputFiles.filter((inputFile) => inputFile.type === 'design' && util_js_1.FILE_EXTENSIONS_VERILOG.includes(path_1.default.extname(inputFile.path).substring(1)));
22
+ const designFiles = files.map((file) => file.path);
23
+ let testbenchFile = options.testbenchFile;
24
+ if (!testbenchFile) {
25
+ // Auto-select from testbench input files
26
+ const allTestbenches = projectInputFiles.filter((file) => file.type === 'testbench');
27
+ if (allTestbenches.length === 0)
28
+ throw new Error('Could not auto-select testbench file: no input files marked as such');
29
+ testbenchFile = allTestbenches[0].path;
30
+ }
31
+ const inputFiles = designFiles.concat([testbenchFile]);
32
+ const compiledFile = (0, target_js_1.getTargetFile)(target, 'simulator.vvp');
33
+ const outputFiles = [compiledFile, `${path_1.default.parse(testbenchFile).name}.vcd`];
34
+ const compileArgs = [];
35
+ compileArgs.push('-o', compiledFile);
36
+ compileArgs.push(...designFiles);
37
+ compileArgs.push(testbenchFile);
38
+ const steps = [
39
+ { tool: 'iverilog', arguments: compileArgs },
40
+ { tool: 'vvp', arguments: [compiledFile] }
41
+ ];
42
+ return {
43
+ inputFiles,
44
+ outputFiles,
45
+ target,
46
+ options,
47
+ steps
48
+ };
49
+ };
50
+ exports.generateIVerilogWorkerOptions = generateIVerilogWorkerOptions;
51
+ const parseIVerilogArguments = (args) => args.flatMap((arg) => (0, string_args_parser_1.parseArgs)(arg));
52
+ exports.parseIVerilogArguments = parseIVerilogArguments;
53
+ const getIVerilogWorkerOptions = (project, targetId) => {
54
+ const generated = (0, exports.generateIVerilogWorkerOptions)(project.getConfiguration(), project.getInputFiles(), targetId);
55
+ const inputFiles = (0, target_js_1.getCombined)(project.getConfiguration(), targetId, 'iverilog', 'inputFiles', generated.inputFiles).filter((f) => !!f);
56
+ const outputFiles = (0, target_js_1.getCombined)(project.getConfiguration(), targetId, 'iverilog', 'outputFiles', generated.outputFiles).filter((f) => !!f);
57
+ const target = generated.target;
58
+ const options = generated.options;
59
+ const steps = generated.steps.map((step) => {
60
+ const tool = step.tool;
61
+ const args = (0, target_js_1.getCombined)(project.getConfiguration(), targetId, 'iverilog', 'commands', step.arguments);
62
+ return { tool, arguments: args };
63
+ });
64
+ return {
65
+ inputFiles,
66
+ outputFiles,
67
+ target,
68
+ options,
69
+ steps
70
+ };
71
+ };
72
+ exports.getIVerilogWorkerOptions = getIVerilogWorkerOptions;
73
+ //# sourceMappingURL=iverilog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iverilog.js","sourceRoot":"","sources":["../../src/project/iverilog.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,7 @@
1
- import type { NextpnrOptions, ProjectConfiguration, WorkerOptions } from './configuration.js';
1
+ import type { NextpnrOptions, ProjectConfiguration, WorkerOptions, WorkerStep } from './configuration.js';
2
2
  import type { Project } from './project.js';
3
- export interface NextpnrWorkerOptions extends WorkerOptions {
4
- arguments: string[];
5
- options: NextpnrOptions;
6
- }
3
+ export type NextpnrStep = WorkerStep;
4
+ export type NextpnrWorkerOptions = WorkerOptions<NextpnrStep, NextpnrOptions>;
7
5
  export declare const getNextpnrDefaultOptions: (configuration: ProjectConfiguration) => NextpnrOptions;
8
6
  export declare const getNextpnrOptions: (configuration: ProjectConfiguration, targetId: string) => NextpnrOptions;
9
7
  export declare const generateNextpnrWorkerOptions: (configuration: ProjectConfiguration, targetId: string) => NextpnrWorkerOptions;
@@ -84,10 +84,14 @@ const generateNextpnrWorkerOptions = (configuration, targetId) => {
84
84
  return {
85
85
  inputFiles,
86
86
  outputFiles,
87
- tool,
88
87
  target,
89
- arguments: args,
90
- options
88
+ options,
89
+ steps: [
90
+ {
91
+ tool,
92
+ arguments: args
93
+ }
94
+ ]
91
95
  };
92
96
  };
93
97
  exports.generateNextpnrWorkerOptions = generateNextpnrWorkerOptions;
@@ -97,17 +101,19 @@ const getNextpnrWorkerOptions = (project, targetId) => {
97
101
  const generated = (0, exports.generateNextpnrWorkerOptions)(project.getConfiguration(), targetId);
98
102
  const inputFiles = (0, target_js_1.getCombined)(project.getConfiguration(), targetId, 'nextpnr', 'inputFiles', generated.inputFiles).filter((f) => !!f);
99
103
  const outputFiles = (0, target_js_1.getCombined)(project.getConfiguration(), targetId, 'nextpnr', 'outputFiles', generated.outputFiles).filter((f) => !!f);
100
- const tool = generated.tool;
101
104
  const target = generated.target;
102
- const args = (0, target_js_1.getCombined)(project.getConfiguration(), targetId, 'nextpnr', 'arguments', generated.arguments, exports.parseNextpnrArguments);
103
105
  const options = generated.options;
106
+ const steps = generated.steps.map((step) => {
107
+ const tool = step.tool;
108
+ const args = (0, target_js_1.getCombined)(project.getConfiguration(), targetId, 'nextpnr', 'arguments', step.arguments, exports.parseNextpnrArguments);
109
+ return { tool, arguments: args };
110
+ });
104
111
  return {
105
112
  inputFiles,
106
113
  outputFiles,
107
- tool,
108
114
  target,
109
- arguments: args,
110
- options
115
+ options,
116
+ steps
111
117
  };
112
118
  };
113
119
  exports.getNextpnrWorkerOptions = getNextpnrWorkerOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"nextpnr.js","sourceRoot":"","sources":["../../src/project/nextpnr.ts"],"names":[],"mappings":";;;AAAA,2DAA6C;AAG7C,6CAAqC;AAErC,2CAAiG;AAOjG,MAAM,eAAe,GAAmB;IACpC,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,UAAU,EAAE,IAAI;CACnB,CAAC;AAEK,MAAM,wBAAwB,GAAG,CAAC,aAAmC,EAAkB,EAAE,CAC5F,IAAA,6BAAiB,EAAC,aAAa,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AADpD,QAAA,wBAAwB,4BAC4B;AAE1D,MAAM,iBAAiB,GAAG,CAAC,aAAmC,EAAE,QAAgB,EAAkB,EAAE,CACvG,IAAA,sBAAU,EAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AADvD,QAAA,iBAAiB,qBACsC;AAE7D,MAAM,4BAA4B,GAAG,CACxC,aAAmC,EACnC,QAAgB,EACI,EAAE;IACtB,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAA,yBAAiB,EAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,oBAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE7C,MAAM,UAAU,GAAG,CAAC,IAAA,yBAAa,EAAC,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,OAAO,CAAC,CAAC,CAAC;IAE1E,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,MAAM,IAAI,GAAG,WAAW,MAAM,CAAC,YAAY,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,QAAQ,MAAM,CAAC,YAAY,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YACrD,MAAM;QACV,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACb,MAAM;QACV,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,OAAO,CAAC,CAAC;YACpF,MAAM;QACV,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAEvC,4BAA4B;YAC5B,MAAM,IAAI,GAAG,IAAA,yBAAa,EAAC,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,MAAM,CAAC,CAAC;YACjE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,YAAY,MAAM,CAAC,CAAC;YACjD,MAAM;QACV,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,MAAM,aAAa,GAA2B;gBAC1C,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE,MAAM;gBACb,SAAS,EAAE,OAAO;gBAClB,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,OAAO;gBAClB,QAAQ,EAAE,OAAO;aACpB,CAAC;YAEF,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACjD,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,YAAY,MAAM,CAAC,OAAO,8BAA8B,CAAC,CAAC;YAC9E,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM,KAAK,UAAU,GAAG,CAAC,CAAC;YAC1D,MAAM;QACV,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,iBAAiB,MAAM,CAAC,YAAY,+BAA+B,CAAC,CAAC;QACzF,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,IAAA,yBAAa,EAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACjD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,IAAA,yBAAa,EAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACjD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,IAAA,yBAAa,EAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAC1D,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO;QACH,UAAU;QACV,WAAW;QACX,IAAI;QACJ,MAAM;QACN,SAAS,EAAE,IAAI;QACf,OAAO;KACV,CAAC;AACN,CAAC,CAAC;AA1FW,QAAA,4BAA4B,gCA0FvC;AAEK,MAAM,qBAAqB,GAAG,CAAC,IAAc,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,8BAAS,EAAC,GAAG,CAAC,CAAC,CAAC;AAAlF,QAAA,qBAAqB,yBAA6D;AAExF,MAAM,uBAAuB,GAAG,CAAC,OAAgB,EAAE,QAAgB,EAAwB,EAAE;IAChG,MAAM,SAAS,GAAG,IAAA,oCAA4B,EAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,QAAQ,CAAC,CAAC;IAErF,MAAM,UAAU,GAAG,IAAA,uBAAW,EAC1B,OAAO,CAAC,gBAAgB,EAAE,EAC1B,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,SAAS,CAAC,UAAU,CACvB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,WAAW,GAAG,IAAA,uBAAW,EAC3B,OAAO,CAAC,gBAAgB,EAAE,EAC1B,QAAQ,EACR,SAAS,EACT,aAAa,EACb,SAAS,CAAC,WAAW,CACxB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAErB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAChC,MAAM,IAAI,GAAG,IAAA,uBAAW,EACpB,OAAO,CAAC,gBAAgB,EAAE,EAC1B,QAAQ,EACR,SAAS,EACT,WAAW,EACX,SAAS,CAAC,SAAS,EACnB,6BAAqB,CACxB,CAAC;IACF,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAElC,OAAO;QACH,UAAU;QACV,WAAW;QACX,IAAI;QACJ,MAAM;QACN,SAAS,EAAE,IAAI;QACf,OAAO;KACV,CAAC;AACN,CAAC,CAAC;AAtCW,QAAA,uBAAuB,2BAsClC"}
1
+ {"version":3,"file":"nextpnr.js","sourceRoot":"","sources":["../../src/project/nextpnr.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,22 @@
1
1
  import { type ProjectConfiguration } from './configuration.js';
2
2
  type ProjectTarget = ProjectConfiguration['targets'][number];
3
+ export type ProjectEvent = 'inputFiles' | 'outputFiles' | 'configuration';
4
+ type EventCallback = (project: Project, events: ProjectEvent[]) => void;
5
+ export interface ProjectInputFileState {
6
+ path: string;
7
+ type: 'design' | 'testbench';
8
+ }
9
+ export declare class ProjectInputFile {
10
+ private _path;
11
+ private _type;
12
+ constructor(_path: ProjectInputFileState['path'], _type: ProjectInputFileState['type']);
13
+ get path(): ProjectInputFileState['path'];
14
+ get type(): ProjectInputFileState['type'];
15
+ set type(type: ProjectInputFileState['type']);
16
+ serialize(): ProjectInputFileState;
17
+ static deserialize(data: ProjectInputFileState | string, ..._args: unknown[]): ProjectInputFile;
18
+ copy(): ProjectInputFile;
19
+ }
3
20
  export interface ProjectOutputFileState {
4
21
  path: string;
5
22
  targetId: string | null;
@@ -10,19 +27,20 @@ export declare class ProjectOutputFile {
10
27
  private _path;
11
28
  private _targetId;
12
29
  private _stale;
13
- constructor(_project: Project, _path: string, _targetId?: string | null, _stale?: boolean);
14
- get path(): string;
15
- get targetId(): string | null;
16
- set targetId(id: string | null);
30
+ constructor(_project: Project, _path: ProjectOutputFileState['path'], _targetId?: ProjectOutputFileState['targetId'], _stale?: ProjectOutputFileState['stale']);
31
+ get path(): ProjectOutputFileState['path'];
32
+ get targetId(): ProjectOutputFileState['targetId'];
33
+ set targetId(id: ProjectOutputFileState['targetId']);
17
34
  get target(): ProjectTarget | null;
18
- get stale(): boolean;
19
- set stale(isStale: boolean);
20
- static serialize(file: ProjectOutputFile): ProjectOutputFileState;
35
+ get stale(): ProjectOutputFileState['stale'];
36
+ set stale(isStale: ProjectOutputFileState['stale']);
37
+ serialize(): ProjectOutputFileState;
21
38
  static deserialize(project: Project, data: ProjectOutputFileState | string, ..._args: unknown[]): ProjectOutputFile;
39
+ copy(project: Project): ProjectOutputFile;
22
40
  }
23
41
  export interface ProjectState {
24
42
  name: string;
25
- inputFiles: string[];
43
+ inputFiles: ProjectInputFileState[] | string[];
26
44
  outputFiles: ProjectOutputFileState[] | string[];
27
45
  configuration: ProjectConfiguration;
28
46
  }
@@ -31,11 +49,18 @@ export declare class Project {
31
49
  private inputFiles;
32
50
  private outputFiles;
33
51
  private configuration;
34
- constructor(name: string, inputFiles?: string[], outputFiles?: ProjectOutputFileState[] | string[], configuration?: ProjectConfiguration);
52
+ private eventCallback?;
53
+ private batchedEvents;
54
+ private batchCounter;
55
+ constructor(name: string, inputFiles?: ProjectInputFileState[] | string[], outputFiles?: ProjectOutputFileState[] | string[], configuration?: ProjectConfiguration, eventCallback?: EventCallback);
35
56
  getName(): string;
36
- getInputFiles(): string[];
57
+ getInputFiles(): ProjectInputFile[];
37
58
  hasInputFile(filePath: string): boolean;
38
- addInputFiles(filePaths: string[]): void;
59
+ getInputFile(filePath: string): ProjectInputFile | null;
60
+ addInputFiles(files: {
61
+ path: string;
62
+ type?: ProjectInputFileState['type'];
63
+ }[]): void;
39
64
  removeInputFiles(filePaths: string[]): void;
40
65
  getOutputFiles(): ProjectOutputFile[];
41
66
  hasOutputFile(filePath: string): boolean;
@@ -46,6 +71,10 @@ export declare class Project {
46
71
  }[]): void;
47
72
  removeOutputFiles(filePaths: string[]): void;
48
73
  expireOutputFiles(): void;
74
+ setTopLevelModule(targetId: string, module: string): void;
75
+ setTestbenchPath(targetId: string, testbenchPath?: string): void;
76
+ setInputFileType(filePath: string, type: ProjectInputFile['type']): void;
77
+ getTarget(id: string): ProjectTarget | null;
49
78
  getConfiguration(): {
50
79
  targets: {
51
80
  id: string;
@@ -97,6 +126,26 @@ export declare class Project {
97
126
  useDefault: boolean;
98
127
  } | undefined;
99
128
  } | undefined;
129
+ iverilog?: {
130
+ options?: {
131
+ testbenchFile?: string | undefined;
132
+ } | undefined;
133
+ inputFiles?: {
134
+ useGenerated: boolean;
135
+ values: string[];
136
+ useDefault: boolean;
137
+ } | undefined;
138
+ outputFiles?: {
139
+ useGenerated: boolean;
140
+ values: string[];
141
+ useDefault: boolean;
142
+ } | undefined;
143
+ arguments?: {
144
+ useGenerated: boolean;
145
+ values: string[];
146
+ useDefault: boolean;
147
+ } | undefined;
148
+ } | undefined;
100
149
  directory?: string | undefined;
101
150
  }[];
102
151
  defaults?: {
@@ -137,10 +186,30 @@ export declare class Project {
137
186
  values: string[];
138
187
  } | undefined;
139
188
  } | undefined;
189
+ iverilog?: {
190
+ options?: {
191
+ testbenchFile?: string | undefined;
192
+ } | undefined;
193
+ inputFiles?: {
194
+ useGenerated: boolean;
195
+ values: string[];
196
+ } | undefined;
197
+ outputFiles?: {
198
+ useGenerated: boolean;
199
+ values: string[];
200
+ } | undefined;
201
+ arguments?: {
202
+ useGenerated: boolean;
203
+ values: string[];
204
+ } | undefined;
205
+ } | undefined;
140
206
  } | undefined;
141
207
  };
142
208
  updateConfiguration(configuration: Partial<ProjectConfiguration>): void;
143
- getTarget(id: string): ProjectTarget | null;
209
+ protected importFromProject(other: Project, doTriggerEvent?: boolean): void;
210
+ protected emitEvents(...events: ProjectEvent[]): void;
211
+ protected batchEvents<T>(func: () => T, ...events: ProjectEvent[]): T;
212
+ protected static emitsEvents<T extends Project>(...events: ProjectEvent[]): (_target: object, _propertyKey: string, descriptor: TypedPropertyDescriptor<(...args: any[]) => unknown>) => TypedPropertyDescriptor<(...args: any[]) => unknown>;
144
213
  static serialize(project: Project): ProjectState;
145
214
  static deserialize(data: ProjectState, ..._args: unknown[]): Project;
146
215
  static loadFromData(rawData: Uint8Array): Project;
@@ -1,8 +1,50 @@
1
1
  "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Project = exports.ProjectOutputFile = void 0;
12
+ exports.Project = exports.ProjectOutputFile = exports.ProjectInputFile = void 0;
4
13
  const util_js_1 = require("../util.js");
5
14
  const configuration_js_1 = require("./configuration.js");
15
+ class ProjectInputFile {
16
+ constructor(_path, _type) {
17
+ this._path = _path;
18
+ this._type = _type;
19
+ }
20
+ get path() {
21
+ return this._path;
22
+ }
23
+ get type() {
24
+ return this._type;
25
+ }
26
+ set type(type) {
27
+ this._type = type;
28
+ }
29
+ serialize() {
30
+ return {
31
+ path: this.path,
32
+ type: this.type
33
+ };
34
+ }
35
+ static deserialize(data, ..._args) {
36
+ // Older versions of this module (<= 0.3.9) stored input files as an array of paths instead,
37
+ // so we need to migrate if data is a string (single output file).
38
+ if (typeof data === 'string') {
39
+ data = { path: data, type: 'design' };
40
+ }
41
+ return new ProjectInputFile(data.path, data.type);
42
+ }
43
+ copy() {
44
+ return ProjectInputFile.deserialize(this.serialize());
45
+ }
46
+ }
47
+ exports.ProjectInputFile = ProjectInputFile;
6
48
  class ProjectOutputFile {
7
49
  constructor(_project, _path, _targetId = null, _stale = false) {
8
50
  this._project = _project;
@@ -33,27 +75,32 @@ class ProjectOutputFile {
33
75
  set stale(isStale) {
34
76
  this._stale = isStale;
35
77
  }
36
- static serialize(file) {
78
+ serialize() {
37
79
  return {
38
- path: file.path,
39
- targetId: file.targetId,
40
- stale: file.stale
80
+ path: this.path,
81
+ targetId: this.targetId,
82
+ stale: this.stale
41
83
  };
42
84
  }
43
85
  static deserialize(project, data, ..._args) {
44
- // Older versions of this module (<= 0.3.6) stored output files as an array of paths instead,
86
+ // Older versions of this module (<= 0.3.12) stored output files as an array of paths instead,
45
87
  // so we need to migrate if data is a string (single output file).
46
88
  if (typeof data === 'string') {
47
89
  data = { path: data, targetId: null, stale: false };
48
90
  }
49
91
  return new ProjectOutputFile(project, data.path, data.targetId, data.stale);
50
92
  }
93
+ copy(project) {
94
+ return ProjectOutputFile.deserialize(project, this.serialize());
95
+ }
51
96
  }
52
97
  exports.ProjectOutputFile = ProjectOutputFile;
53
98
  class Project {
54
- constructor(name, inputFiles = [], outputFiles = [], configuration = configuration_js_1.DEFAULT_CONFIGURATION) {
99
+ constructor(name, inputFiles = [], outputFiles = [], configuration = configuration_js_1.DEFAULT_CONFIGURATION, eventCallback) {
100
+ this.batchedEvents = new Set();
101
+ this.batchCounter = 0;
55
102
  this.name = name;
56
- this.inputFiles = inputFiles;
103
+ this.inputFiles = inputFiles.map((file) => ProjectInputFile.deserialize(file));
57
104
  this.outputFiles = outputFiles.map((file) => ProjectOutputFile.deserialize(this, file));
58
105
  const config = configuration_js_1.schemaProjectConfiguration.safeParse(configuration);
59
106
  if (config.success) {
@@ -64,6 +111,8 @@ class Project {
64
111
  }
65
112
  // Trigger a config 'update' to deploy any modifications it might want to make
66
113
  this.updateConfiguration({});
114
+ // Set event callback LAST to prevent firing events in constructor
115
+ this.eventCallback = eventCallback;
67
116
  }
68
117
  getName() {
69
118
  return this.name;
@@ -72,20 +121,26 @@ class Project {
72
121
  return this.inputFiles;
73
122
  }
74
123
  hasInputFile(filePath) {
75
- return this.inputFiles.some((file) => file === filePath);
124
+ return this.getInputFile(filePath) !== null;
76
125
  }
77
- addInputFiles(filePaths) {
78
- for (const filePath of filePaths) {
79
- if (!this.hasInputFile(filePath)) {
80
- this.inputFiles.push(filePath);
126
+ getInputFile(filePath) {
127
+ return this.inputFiles.find((file) => file.path === filePath) ?? null;
128
+ }
129
+ addInputFiles(files) {
130
+ for (const file of files) {
131
+ if (!this.hasInputFile(file.path)) {
132
+ const inputFile = new ProjectInputFile(file.path, file.type ?? 'design');
133
+ this.inputFiles.push(inputFile);
81
134
  }
82
135
  }
83
136
  this.inputFiles.sort((a, b) => {
84
137
  return a < b ? -1 : 1;
85
138
  });
139
+ this.expireOutputFiles();
86
140
  }
87
141
  removeInputFiles(filePaths) {
88
- this.inputFiles = this.inputFiles.filter((file) => !filePaths.includes(file));
142
+ this.inputFiles = this.inputFiles.filter((file) => !filePaths.includes(file.path));
143
+ this.expireOutputFiles();
89
144
  }
90
145
  getOutputFiles() {
91
146
  return this.outputFiles;
@@ -119,9 +174,60 @@ class Project {
119
174
  this.outputFiles = this.outputFiles.filter((file) => !filePaths.includes(file.path));
120
175
  }
121
176
  expireOutputFiles() {
177
+ if (!this.outputFiles.length)
178
+ return;
179
+ let didUpdate = false;
122
180
  for (const file of this.outputFiles) {
123
- file.stale = true;
181
+ if (!file.stale) {
182
+ file.stale = true;
183
+ didUpdate = true;
184
+ }
124
185
  }
186
+ if (didUpdate)
187
+ this.emitEvents('outputFiles');
188
+ }
189
+ setTopLevelModule(targetId, module) {
190
+ const target = this.getTarget(targetId);
191
+ if (!target)
192
+ throw new Error(`Target "${targetId}" does not exist!`);
193
+ // Ensure the config tree exists
194
+ // We don't care about setting missing defaults, as this is target-level configuration,
195
+ // so any missing properties will fallback to project-level config.
196
+ if (!target.yosys)
197
+ target.yosys = {};
198
+ if (!target.yosys.options)
199
+ target.yosys.options = {};
200
+ target.yosys.options.topLevelModule = module;
201
+ }
202
+ setTestbenchPath(targetId, testbenchPath) {
203
+ const testbenchFiles = this.getInputFiles()
204
+ .filter((file) => file.type === 'testbench')
205
+ .map((file) => file.path);
206
+ if (testbenchPath && !testbenchFiles.includes(testbenchPath))
207
+ throw new Error(`Testbench ${testbenchPath} is not marked as such!`);
208
+ const target = this.getTarget(targetId);
209
+ if (!target)
210
+ throw new Error(`Target "${targetId}" does not exist!`);
211
+ // Ensure the config tree exists
212
+ // We don't care about setting missing defaults, as this is target-level configuration,
213
+ // so any missing properties will fallback to project-level config.
214
+ if (!target.iverilog)
215
+ target.iverilog = {};
216
+ if (!target.iverilog.options)
217
+ target.iverilog.options = {};
218
+ target.iverilog.options.testbenchFile = testbenchPath;
219
+ }
220
+ setInputFileType(filePath, type) {
221
+ const file = this.getInputFile(filePath);
222
+ if (!file) {
223
+ console.warn(`Tried to set file type of missing input file: ${filePath}`);
224
+ return;
225
+ }
226
+ file.type = type;
227
+ }
228
+ getTarget(id) {
229
+ const targets = this.configuration.targets;
230
+ return targets.find((target) => target.id === id) ?? null;
125
231
  }
126
232
  getConfiguration() {
127
233
  return this.configuration;
@@ -137,15 +243,51 @@ class Project {
137
243
  outFile.targetId = null;
138
244
  }
139
245
  }
140
- getTarget(id) {
141
- const targets = this.configuration.targets;
142
- return targets.find((target) => target.id === id) ?? null;
246
+ importFromProject(other, doTriggerEvent = true) {
247
+ this.inputFiles = other.getInputFiles().map((file) => file.copy());
248
+ this.outputFiles = other.getOutputFiles().map((file) => file.copy(this));
249
+ this.configuration = structuredClone(other.getConfiguration());
250
+ if (doTriggerEvent)
251
+ this.emitEvents('inputFiles', 'outputFiles', 'configuration');
252
+ }
253
+ emitEvents(...events) {
254
+ for (const event of events)
255
+ this.batchedEvents.add(event);
256
+ // Do not emit when empty
257
+ if (!this.batchedEvents.size)
258
+ return;
259
+ // Do not emit events when batching
260
+ if (this.batchCounter > 0)
261
+ return;
262
+ // Emit new + batched events
263
+ if (this.eventCallback)
264
+ this.eventCallback(this, Array.from(this.batchedEvents));
265
+ this.batchedEvents.clear();
266
+ }
267
+ batchEvents(func, ...events) {
268
+ this.batchCounter += 1;
269
+ const res = func();
270
+ this.batchCounter -= 1;
271
+ this.emitEvents(...events);
272
+ return res;
273
+ }
274
+ static emitsEvents(...events) {
275
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
276
+ return function decorator(_target, _propertyKey, descriptor) {
277
+ const originalMethod = descriptor.value;
278
+ if (!originalMethod)
279
+ throw new Error('No original method!');
280
+ descriptor.value = function (...args) {
281
+ return this.batchEvents(() => originalMethod.apply(this, args), ...events);
282
+ };
283
+ return descriptor;
284
+ };
143
285
  }
144
286
  static serialize(project) {
145
287
  return {
146
288
  name: project.name,
147
- inputFiles: project.inputFiles,
148
- outputFiles: project.outputFiles.map((file) => ProjectOutputFile.serialize(file)),
289
+ inputFiles: project.inputFiles.map((file) => file.serialize()),
290
+ outputFiles: project.outputFiles.map((file) => file.serialize()),
149
291
  configuration: project.configuration
150
292
  };
151
293
  }
@@ -167,4 +309,64 @@ class Project {
167
309
  }
168
310
  }
169
311
  exports.Project = Project;
312
+ __decorate([
313
+ Project.emitsEvents('inputFiles'),
314
+ __metadata("design:type", Function),
315
+ __metadata("design:paramtypes", [Array]),
316
+ __metadata("design:returntype", void 0)
317
+ ], Project.prototype, "addInputFiles", null);
318
+ __decorate([
319
+ Project.emitsEvents('inputFiles'),
320
+ __metadata("design:type", Function),
321
+ __metadata("design:paramtypes", [Array]),
322
+ __metadata("design:returntype", void 0)
323
+ ], Project.prototype, "removeInputFiles", null);
324
+ __decorate([
325
+ Project.emitsEvents('outputFiles'),
326
+ __metadata("design:type", Function),
327
+ __metadata("design:paramtypes", [Array]),
328
+ __metadata("design:returntype", void 0)
329
+ ], Project.prototype, "addOutputFiles", null);
330
+ __decorate([
331
+ Project.emitsEvents('outputFiles'),
332
+ __metadata("design:type", Function),
333
+ __metadata("design:paramtypes", [Array]),
334
+ __metadata("design:returntype", void 0)
335
+ ], Project.prototype, "removeOutputFiles", null);
336
+ __decorate([
337
+ Project.emitsEvents(),
338
+ __metadata("design:type", Function),
339
+ __metadata("design:paramtypes", []),
340
+ __metadata("design:returntype", void 0)
341
+ ], Project.prototype, "expireOutputFiles", null);
342
+ __decorate([
343
+ Project.emitsEvents('configuration'),
344
+ __metadata("design:type", Function),
345
+ __metadata("design:paramtypes", [String, String]),
346
+ __metadata("design:returntype", void 0)
347
+ ], Project.prototype, "setTopLevelModule", null);
348
+ __decorate([
349
+ Project.emitsEvents('configuration'),
350
+ __metadata("design:type", Function),
351
+ __metadata("design:paramtypes", [String, String]),
352
+ __metadata("design:returntype", void 0)
353
+ ], Project.prototype, "setTestbenchPath", null);
354
+ __decorate([
355
+ Project.emitsEvents('inputFiles'),
356
+ __metadata("design:type", Function),
357
+ __metadata("design:paramtypes", [String, Object]),
358
+ __metadata("design:returntype", void 0)
359
+ ], Project.prototype, "setInputFileType", null);
360
+ __decorate([
361
+ Project.emitsEvents('configuration'),
362
+ __metadata("design:type", Function),
363
+ __metadata("design:paramtypes", [Object]),
364
+ __metadata("design:returntype", void 0)
365
+ ], Project.prototype, "updateConfiguration", null);
366
+ __decorate([
367
+ Project.emitsEvents(),
368
+ __metadata("design:type", Function),
369
+ __metadata("design:paramtypes", [Project, Object]),
370
+ __metadata("design:returntype", void 0)
371
+ ], Project.prototype, "importFromProject", null);
170
372
  //# sourceMappingURL=project.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/project/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/project/project.ts"],"names":[],"mappings":"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"}