@ryanatkn/gro 0.166.0 → 0.167.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.
- package/dist/gen.d.ts +6 -0
- package/dist/gen.d.ts.map +1 -1
- package/dist/gen_helpers.d.ts +2 -3
- package/dist/gen_helpers.d.ts.map +1 -1
- package/dist/gen_helpers.js +48 -66
- package/dist/gro_plugin_gen.d.ts.map +1 -1
- package/dist/gro_plugin_gen.js +1 -6
- package/dist/modules.d.ts +1 -1
- package/dist/modules.d.ts.map +1 -1
- package/dist/modules.js +9 -2
- package/dist/package.js +3 -3
- package/dist/run_gen.d.ts.map +1 -1
- package/dist/run_gen.js +1 -0
- package/package.json +2 -2
- package/src/lib/gen.ts +6 -0
- package/src/lib/gen_helpers.ts +69 -69
- package/src/lib/gro_plugin_gen.ts +1 -9
- package/src/lib/modules.ts +9 -1
- package/src/lib/package.ts +3 -3
- package/src/lib/run_gen.ts +1 -0
package/dist/gen.d.ts
CHANGED
|
@@ -48,6 +48,12 @@ export interface Gen_Context {
|
|
|
48
48
|
* The `origin_id` relative to the root dir.
|
|
49
49
|
*/
|
|
50
50
|
origin_path: string;
|
|
51
|
+
/**
|
|
52
|
+
* The file that triggered dependency checking.
|
|
53
|
+
* Only available when resolving dependencies dynamically.
|
|
54
|
+
* `undefined` during actual generation.
|
|
55
|
+
*/
|
|
56
|
+
changed_file_id: Path_Id | undefined;
|
|
51
57
|
}
|
|
52
58
|
export type Raw_Gen_Result = string | Raw_Gen_File | null | Array<Raw_Gen_Result>;
|
|
53
59
|
export interface Raw_Gen_File {
|
package/dist/gen.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gen.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,uBAAuB,CAAC;AAGlD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AAKvD,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAe,KAAK,oBAAoB,EAAE,KAAK,WAAW,EAAC,MAAM,cAAc,CAAC;AACvF,OAAO,EACN,UAAU,EAGV,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAE3C,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,gBAAgB,QAAoC,CAAC;AAElE,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,OAA0C,CAAC;AAEtF,MAAM,WAAW,UAAU;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;CACvB;AACD,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,uBAAuB,GAAG,yBAAyB,CAAC;AAE3F,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACvB;AAED,MAAM,MAAM,yBAAyB,GAAG,CACvC,GAAG,EAAE,WAAW,KACZ,uBAAuB,GAAG,KAAK,GAAG,OAAO,CAAC,uBAAuB,GAAG,KAAK,CAAC,CAAC;AAEhF,MAAM,MAAM,GAAG,GAAG,YAAY,GAAG,UAAU,CAAC;AAE5C,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAE1F,MAAM,WAAW,UAAU;IAC1B,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,CAAC,EAAE,gBAAgB,CAAC;CAGhC;AAED,MAAM,WAAW,WAAW;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,aAAa,EAAE,oBAAoB,CAAC;IACpC,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"gen.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,uBAAuB,CAAC;AAGlD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AAKvD,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAe,KAAK,oBAAoB,EAAE,KAAK,WAAW,EAAC,MAAM,cAAc,CAAC;AACvF,OAAO,EACN,UAAU,EAGV,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAE3C,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,gBAAgB,QAAoC,CAAC;AAElE,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,OAA0C,CAAC;AAEtF,MAAM,WAAW,UAAU;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;CACvB;AACD,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,uBAAuB,GAAG,yBAAyB,CAAC;AAE3F,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACvB;AAED,MAAM,MAAM,yBAAyB,GAAG,CACvC,GAAG,EAAE,WAAW,KACZ,uBAAuB,GAAG,KAAK,GAAG,OAAO,CAAC,uBAAuB,GAAG,KAAK,CAAC,CAAC;AAEhF,MAAM,MAAM,GAAG,GAAG,YAAY,GAAG,UAAU,CAAC;AAE5C,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAE1F,MAAM,WAAW,UAAU;IAC1B,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,CAAC,EAAE,gBAAgB,CAAC;CAGhC;AAED,MAAM,WAAW,WAAW;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,aAAa,EAAE,oBAAoB,CAAC;IACpC,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,eAAe,EAAE,OAAO,GAAG,SAAS,CAAC;CACrC;AAGD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,YAAY,GAAG,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;AAClF,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,MAAM,CAAC;IAGhB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACtC,SAAS,EAAE,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAChD,QAAQ,EAAE,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,MAAM,qBAAqB,GAAG,6BAA6B,GAAG,6BAA6B,CAAC;AAClG,MAAM,WAAW,6BAA6B;IAC7C,EAAE,EAAE,IAAI,CAAC;IACT,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,6BAA6B;IAC7C,EAAE,EAAE,KAAK,CAAC;IACV,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,aAAa,GAAI,WAAW,OAAO,EAAE,YAAY,cAAc,KAAG,UAK9E,CAAC;AAmCF,eAAO,MAAM,mBAAmB,GAAI,UAAU,MAAM,KAAG,MA2BtD,CAAC;AAYF,MAAM,MAAM,mBAAmB,GAC5B;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,KAAK,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;CACpB,GACD;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,gBAAgB,EAAE,IAAI,CAAC;IACvB,MAAM,EAAE,IAAI,CAAC;IACb,WAAW,EAAE,IAAI,CAAC;CACjB,CAAC;AAEL,eAAO,MAAM,mBAAmB,GAC/B,aAAa,WAAW,KACtB,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAKnC,CAAC;AAEH,eAAO,MAAM,kBAAkB,GAAU,MAAM,QAAQ,KAAG,OAAO,CAAC,mBAAmB,CAgBpF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC7B,aAAa,WAAW,EACxB,sBAAsB,KAAK,CAAC,mBAAmB,CAAC,EAChD,KAAK,MAAM,KACT,OAAO,CAAC,IAAI,CAsBd,CAAC;AAEF,MAAM,WAAW,cAAc;IAC9B,oBAAoB,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACjD,gCAAgC,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC3E,oBAAoB,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;CACjD;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAC,EAAE,qBAAqB,CAAC,CAAC;AAC1F,MAAM,MAAM,qBAAqB,GAC9B;IACA,IAAI,EAAE,sBAAsB,CAAC;IAC7B,oBAAoB,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACxC,oBAAoB,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACjD,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACtB,GACD;IACA,IAAI,EAAE,iCAAiC,CAAC;IACxC,+BAA+B,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACnD,oBAAoB,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACjD,gCAAgC,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC3E,oBAAoB,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACjD,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACtB,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,aAAa,GACzB,aAAa,KAAK,CAAC,UAAU,CAAC,EAC9B,WAAW,KAAK,CAAC,OAAO,CAAC,EACzB,QAAQ,UAAU,EAClB,UAAU,OAAO,KACf,oBA2DF,CAAC;AAEF,MAAM,WAAW,cAAc;IAC9B,GAAG,EAAE,GAAG,CAAC;CACT;AAED,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACpC,cAAc,EAAE,cAAc,CAAC;CAC/B;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAC,EAAE,qBAAqB,CAAC,CAAC;AAC3F,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;AAE9E,eAAO,MAAM,aAAa,GACzB,gBAAgB,cAAc,EAC9B,UAAU,OAAO,KACf,OAAO,CAAC,oBAAoB,CAc9B,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,GAAG,IAAI,cAMrE,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,KAAK,GAAG,KAAG,UACE,CAAC"}
|
package/dist/gen_helpers.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import type { Logger } from '@ryanatkn/belt/log.js';
|
|
2
2
|
import type { Timings } from '@ryanatkn/belt/timings.js';
|
|
3
3
|
import type { Gro_Config } from './gro_config.ts';
|
|
4
|
-
import type
|
|
4
|
+
import { type Filer } from './filer.ts';
|
|
5
5
|
import type { Invoke_Task } from './task.ts';
|
|
6
|
-
import { type Gen_Dependencies } from './gen.ts';
|
|
7
6
|
import type { Path_Id } from './path.ts';
|
|
8
7
|
/**
|
|
9
8
|
* Check if a file change should trigger a gen file.
|
|
10
9
|
*/
|
|
11
|
-
export declare const should_trigger_gen: (gen_file_id: Path_Id, changed_file_id: Path_Id, config: Gro_Config, filer: Filer, log: Logger, timings: Timings, invoke_task: Invoke_Task
|
|
10
|
+
export declare const should_trigger_gen: (gen_file_id: Path_Id, changed_file_id: Path_Id, config: Gro_Config, filer: Filer, log: Logger, timings: Timings, invoke_task: Invoke_Task) => Promise<boolean>;
|
|
12
11
|
//# sourceMappingURL=gen_helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gen_helpers.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gen_helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AAEvD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"gen_helpers.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gen_helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AAEvD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAoB,KAAK,KAAK,EAAC,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAS3C,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAGvC;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC9B,aAAa,OAAO,EACpB,iBAAiB,OAAO,EACxB,QAAQ,UAAU,EAClB,OAAO,KAAK,EACZ,KAAK,MAAM,EACX,SAAS,OAAO,EAChB,aAAa,WAAW,KACtB,OAAO,CAAC,OAAO,CAqCjB,CAAC"}
|
package/dist/gen_helpers.js
CHANGED
|
@@ -1,86 +1,68 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
-
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
-
});
|
|
6
|
-
}
|
|
7
|
-
return path;
|
|
8
|
-
};
|
|
9
|
-
import { pathToFileURL } from 'node:url';
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { filter_dependents } from "./filer.js";
|
|
10
3
|
import { normalize_gen_config, validate_gen_module, } from "./gen.js";
|
|
11
4
|
import { default_svelte_config } from "./svelte_config.js";
|
|
12
5
|
import { to_root_path } from "./paths.js";
|
|
6
|
+
import { load_module } from "./modules.js";
|
|
13
7
|
/**
|
|
14
8
|
* Check if a file change should trigger a gen file.
|
|
15
9
|
*/
|
|
16
|
-
export const should_trigger_gen = async (gen_file_id, changed_file_id, config, filer, log, timings, invoke_task
|
|
10
|
+
export const should_trigger_gen = async (gen_file_id, changed_file_id, config, filer, log, timings, invoke_task) => {
|
|
17
11
|
// Always trigger if the gen file itself changed
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
dependencies_cache.delete(gen_file_id);
|
|
12
|
+
const is_self_change = gen_file_id === changed_file_id;
|
|
13
|
+
if (is_self_change)
|
|
21
14
|
return true;
|
|
15
|
+
// Check if gen file depends on the changed file (directly or transitively)
|
|
16
|
+
const changed_disknode = filer.get_by_id(changed_file_id);
|
|
17
|
+
let should_bust_cache = false;
|
|
18
|
+
if (changed_disknode) {
|
|
19
|
+
const dependents = filter_dependents(changed_disknode, filer.get_by_id, (id) => id === gen_file_id);
|
|
20
|
+
should_bust_cache = dependents.has(gen_file_id);
|
|
22
21
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
dependencies = await resolve_gen_dependencies(gen_file_id, config, filer, log, timings, invoke_task);
|
|
26
|
-
dependencies_cache.set(gen_file_id, dependencies);
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
dependencies = dependencies_cache.get(gen_file_id);
|
|
30
|
-
}
|
|
22
|
+
// Resolve dependencies (with cache busting if the changed file is a dependency of the gen file)
|
|
23
|
+
const dependencies = await resolve_gen_dependencies(gen_file_id, changed_file_id, should_bust_cache, config, filer, log, timings, invoke_task);
|
|
31
24
|
if (!dependencies)
|
|
32
25
|
return false;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (dependencies.patterns.some((p) => p.test(changed_file_id))) {
|
|
38
|
-
return true;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
if (dependencies.files) {
|
|
42
|
-
if (dependencies.files.includes(changed_file_id)) {
|
|
43
|
-
return true;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return false;
|
|
26
|
+
return (dependencies === 'all' ||
|
|
27
|
+
dependencies.patterns?.some((p) => p.test(changed_file_id)) ||
|
|
28
|
+
dependencies.files?.includes(changed_file_id) ||
|
|
29
|
+
false);
|
|
48
30
|
};
|
|
49
31
|
/**
|
|
50
32
|
* Resolve dependencies for a gen file.
|
|
51
|
-
* Uses cache-busting
|
|
52
|
-
*
|
|
33
|
+
* Uses cache-busting only when the gen file itself changes,
|
|
34
|
+
* otherwise relies on Node's module caching.
|
|
53
35
|
*/
|
|
54
|
-
const resolve_gen_dependencies = async (gen_file_id, config, filer, log, timings, invoke_task) => {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
if (!validate_gen_module(module)) {
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
const gen_config = normalize_gen_config(module.gen);
|
|
63
|
-
if (!gen_config.dependencies) {
|
|
64
|
-
return null;
|
|
65
|
-
}
|
|
66
|
-
let dependencies = gen_config.dependencies;
|
|
67
|
-
if (typeof dependencies === 'function') {
|
|
68
|
-
const gen_ctx = {
|
|
69
|
-
config,
|
|
70
|
-
svelte_config: default_svelte_config,
|
|
71
|
-
filer,
|
|
72
|
-
log,
|
|
73
|
-
timings,
|
|
74
|
-
invoke_task,
|
|
75
|
-
origin_id: gen_file_id,
|
|
76
|
-
origin_path: to_root_path(gen_file_id),
|
|
77
|
-
};
|
|
78
|
-
dependencies = await dependencies(gen_ctx);
|
|
36
|
+
const resolve_gen_dependencies = async (gen_file_id, changed_file_id, bust_cache, config, filer, log, timings, invoke_task) => {
|
|
37
|
+
const result = await load_module(gen_file_id, validate_gen_module, bust_cache);
|
|
38
|
+
if (!result.ok) {
|
|
39
|
+
if (result.type === 'failed_import') {
|
|
40
|
+
log.error(`Failed to import ${gen_file_id}:`, result.error);
|
|
79
41
|
}
|
|
80
|
-
return
|
|
42
|
+
return null;
|
|
81
43
|
}
|
|
82
|
-
|
|
83
|
-
|
|
44
|
+
const gen_config = normalize_gen_config(result.mod.gen);
|
|
45
|
+
if (!gen_config.dependencies) {
|
|
84
46
|
return null;
|
|
85
47
|
}
|
|
48
|
+
let { dependencies } = gen_config;
|
|
49
|
+
if (typeof dependencies === 'function') {
|
|
50
|
+
const gen_ctx = {
|
|
51
|
+
config,
|
|
52
|
+
svelte_config: default_svelte_config,
|
|
53
|
+
filer,
|
|
54
|
+
log,
|
|
55
|
+
timings,
|
|
56
|
+
invoke_task,
|
|
57
|
+
origin_id: gen_file_id,
|
|
58
|
+
origin_path: to_root_path(gen_file_id),
|
|
59
|
+
changed_file_id,
|
|
60
|
+
};
|
|
61
|
+
dependencies = await dependencies(gen_ctx);
|
|
62
|
+
}
|
|
63
|
+
// Normalize file paths to absolute paths
|
|
64
|
+
if (dependencies !== 'all' && dependencies.files) {
|
|
65
|
+
dependencies.files = dependencies.files.map((f) => resolve(f));
|
|
66
|
+
}
|
|
67
|
+
return dependencies;
|
|
86
68
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gro_plugin_gen.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gro_plugin_gen.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"gro_plugin_gen.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gro_plugin_gen.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAapC,MAAM,WAAW,SAAU,SAAQ,IAAI;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACtC,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,cAAc,GAAI,oDAI5B,sBAAqC,KAAG,MAoH1C,CAAC"}
|
package/dist/gro_plugin_gen.js
CHANGED
|
@@ -12,8 +12,6 @@ const FLUSH_DEBOUNCE_DELAY = 500;
|
|
|
12
12
|
const gen = (files = []) => spawn_cli('gro', ['gen', ...files]);
|
|
13
13
|
export const gro_plugin_gen = ({ input_paths = [paths.source], root_dirs = [paths.source], flush_debounce_delay = FLUSH_DEBOUNCE_DELAY, } = EMPTY_OBJECT) => {
|
|
14
14
|
const queued_files = new Set();
|
|
15
|
-
// Cache for gen file declared dependencies to avoid repeated imports
|
|
16
|
-
const gen_dependencies_cache = new Map();
|
|
17
15
|
let cleanup_watch;
|
|
18
16
|
return {
|
|
19
17
|
name: 'gro_plugin_gen',
|
|
@@ -71,7 +69,7 @@ export const gro_plugin_gen = ({ input_paths = [paths.source], root_dirs = [path
|
|
|
71
69
|
if (gen_files) {
|
|
72
70
|
for (const gen_file of gen_files) {
|
|
73
71
|
// eslint-disable-next-line no-await-in-loop
|
|
74
|
-
const should_trigger = await should_trigger_gen(gen_file.id, source_file.id, config, filer, log, timings, invoke_task
|
|
72
|
+
const should_trigger = await should_trigger_gen(gen_file.id, source_file.id, config, filer, log, timings, invoke_task);
|
|
75
73
|
if (should_trigger) {
|
|
76
74
|
queue_gen(gen_file.id);
|
|
77
75
|
}
|
|
@@ -85,9 +83,6 @@ export const gro_plugin_gen = ({ input_paths = [paths.source], root_dirs = [path
|
|
|
85
83
|
break;
|
|
86
84
|
}
|
|
87
85
|
case 'delete': {
|
|
88
|
-
if (is_gen_path(source_file.id)) {
|
|
89
|
-
gen_dependencies_cache.delete(source_file.id);
|
|
90
|
-
}
|
|
91
86
|
// I think for the gen plugin this is best as a no-op? avoids broken attempts
|
|
92
87
|
break;
|
|
93
88
|
}
|
package/dist/modules.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ export type Load_Module_Failure = {
|
|
|
22
22
|
mod: Record<string, any>;
|
|
23
23
|
validation: string;
|
|
24
24
|
};
|
|
25
|
-
export declare const load_module: <T_Module extends Record<string, any>>(id: Path_Id, validate?: (mod: Record<string, any>) => mod is T_Module) => Promise<Load_Module_Result<T_Module>>;
|
|
25
|
+
export declare const load_module: <T_Module extends Record<string, any>>(id: Path_Id, validate?: (mod: Record<string, any>) => mod is T_Module, bust_cache?: boolean) => Promise<Load_Module_Result<T_Module>>;
|
|
26
26
|
export interface Load_Modules_Failure<T_Module_Meta extends Module_Meta> {
|
|
27
27
|
type: 'load_module_failures';
|
|
28
28
|
load_module_failures: Array<Load_Module_Failure>;
|
package/dist/modules.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/modules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AAEvD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"modules.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/modules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AAEvD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAC;AAIrD,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAEzD,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAEvC,MAAM,WAAW,WAAW,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACtF,EAAE,EAAE,OAAO,CAAC;IACZ,GAAG,EAAE,QAAQ,CAAC;CACd;AAED,MAAM,MAAM,kBAAkB,CAAC,QAAQ,IAAI,MAAM,CAChD;IAAC,EAAE,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,QAAQ,CAAA;CAAC,EAC5B,mBAAmB,CACnB,CAAC;AACF,MAAM,MAAM,mBAAmB,GAC5B;IAAC,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAC,GAC7D;IACA,EAAE,EAAE,KAAK,CAAC;IACV,IAAI,EAAE,mBAAmB,CAAC;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CAClB,CAAC;AAEL,eAAO,MAAM,WAAW,GAAU,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACrE,IAAI,OAAO,EACX,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,IAAI,QAAQ,EACxD,aAAa,OAAO,KAClB,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAiBtC,CAAC;AAEF,MAAM,WAAW,oBAAoB,CAAC,aAAa,SAAS,WAAW;IACtE,IAAI,EAAE,sBAAsB,CAAC;IAC7B,oBAAoB,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACjD,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEvB,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;CAC9B;AAED,MAAM,MAAM,mBAAmB,CAAC,aAAa,SAAS,WAAW,IAAI,MAAM,CAC1E;IACC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;CAC9B,EACD,oBAAoB,CAAC,aAAa,CAAC,CACnC,CAAC;AAGF,eAAO,MAAM,YAAY,GACxB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACpC,aAAa,SAAS,WAAW,CAAC,QAAQ,CAAC,EAE3C,sBAAsB,KAAK,CAAC,mBAAmB,CAAC,EAChD,UAAU,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,QAAQ,EACvC,iBAAiB,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,EAAE,QAAQ,KAAK,aAAa,EAC3F,UAAU,OAAO,KACf,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,CA2C5C,CAAC"}
|
package/dist/modules.js
CHANGED
|
@@ -8,11 +8,18 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
8
8
|
};
|
|
9
9
|
import { Unreachable_Error } from '@ryanatkn/belt/error.js';
|
|
10
10
|
import { print_error } from '@ryanatkn/belt/print.js';
|
|
11
|
+
import { pathToFileURL } from 'node:url';
|
|
11
12
|
import { print_path } from "./paths.js";
|
|
12
|
-
export const load_module = async (id, validate) => {
|
|
13
|
+
export const load_module = async (id, validate, bust_cache) => {
|
|
13
14
|
let mod;
|
|
14
15
|
try {
|
|
15
|
-
|
|
16
|
+
let import_path = id;
|
|
17
|
+
if (bust_cache) {
|
|
18
|
+
const url = pathToFileURL(id);
|
|
19
|
+
url.searchParams.set('t', Date.now().toString());
|
|
20
|
+
import_path = url.href;
|
|
21
|
+
}
|
|
22
|
+
mod = await import(__rewriteRelativeImportExtension(import_path, true));
|
|
16
23
|
}
|
|
17
24
|
catch (err) {
|
|
18
25
|
return { ok: false, type: 'failed_import', id, error: err };
|
package/dist/package.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// generated by src/lib/package.gen.ts
|
|
2
2
|
export const package_json = {
|
|
3
3
|
name: '@ryanatkn/gro',
|
|
4
|
-
version: '0.
|
|
4
|
+
version: '0.167.0',
|
|
5
5
|
description: 'task runner and toolkit extending SvelteKit',
|
|
6
6
|
motto: 'generate, run, optimize',
|
|
7
7
|
glyph: '🌰',
|
|
@@ -65,7 +65,7 @@ export const package_json = {
|
|
|
65
65
|
'@changesets/types': '^6.1.0',
|
|
66
66
|
'@ryanatkn/eslint-config': '^0.8.0',
|
|
67
67
|
'@ryanatkn/fuz': '^0.146.0',
|
|
68
|
-
'@ryanatkn/moss': '^0.
|
|
68
|
+
'@ryanatkn/moss': '^0.35.0',
|
|
69
69
|
'@sveltejs/adapter-static': '^3.0.9',
|
|
70
70
|
'@sveltejs/kit': '^2.37.1',
|
|
71
71
|
'@sveltejs/package': '^2.5.0',
|
|
@@ -98,7 +98,7 @@ export const package_json = {
|
|
|
98
98
|
};
|
|
99
99
|
export const src_json = {
|
|
100
100
|
name: '@ryanatkn/gro',
|
|
101
|
-
version: '0.
|
|
101
|
+
version: '0.167.0',
|
|
102
102
|
modules: {
|
|
103
103
|
'.': {
|
|
104
104
|
path: 'index.ts',
|
package/dist/run_gen.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run_gen.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/run_gen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,uBAAuB,CAAC;AAElD,OAAO,EACN,KAAK,WAAW,EAGhB,KAAK,mBAAmB,EAIxB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAC,WAAW,IAAI,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AACtE,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAEhD,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAE3C,eAAO,MAAM,mBAAmB,qCAAqC,CAAC;AAEtE,eAAO,MAAM,OAAO,GACnB,aAAa,KAAK,CAAC,mBAAmB,CAAC,EACvC,QAAQ,UAAU,EAClB,OAAO,KAAK,EACZ,KAAK,MAAM,EACX,SAAS,OAAO,EAChB,aAAa,WAAW,EACxB,cAAc,OAAO,gBAAgB,KACnC,OAAO,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"run_gen.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/run_gen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,uBAAuB,CAAC;AAElD,OAAO,EACN,KAAK,WAAW,EAGhB,KAAK,mBAAmB,EAIxB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAC,WAAW,IAAI,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AACtE,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAEhD,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAE3C,eAAO,MAAM,mBAAmB,qCAAqC,CAAC;AAEtE,eAAO,MAAM,OAAO,GACnB,aAAa,KAAK,CAAC,mBAAmB,CAAC,EACvC,QAAQ,UAAU,EAClB,OAAO,KAAK,EACZ,KAAK,MAAM,EACX,SAAS,OAAO,EAChB,aAAa,WAAW,EACxB,cAAc,OAAO,gBAAgB,KACnC,OAAO,CAAC,WAAW,CAyErB,CAAC"}
|
package/dist/run_gen.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ryanatkn/gro",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.167.0",
|
|
4
4
|
"description": "task runner and toolkit extending SvelteKit",
|
|
5
5
|
"motto": "generate, run, optimize",
|
|
6
6
|
"glyph": "🌰",
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"@changesets/types": "^6.1.0",
|
|
85
85
|
"@ryanatkn/eslint-config": "^0.8.0",
|
|
86
86
|
"@ryanatkn/fuz": "^0.146.0",
|
|
87
|
-
"@ryanatkn/moss": "^0.
|
|
87
|
+
"@ryanatkn/moss": "^0.35.0",
|
|
88
88
|
"@sveltejs/adapter-static": "^3.0.9",
|
|
89
89
|
"@sveltejs/kit": "^2.37.1",
|
|
90
90
|
"@sveltejs/package": "^2.5.0",
|
package/src/lib/gen.ts
CHANGED
|
@@ -75,6 +75,12 @@ export interface Gen_Context {
|
|
|
75
75
|
* The `origin_id` relative to the root dir.
|
|
76
76
|
*/
|
|
77
77
|
origin_path: string;
|
|
78
|
+
/**
|
|
79
|
+
* The file that triggered dependency checking.
|
|
80
|
+
* Only available when resolving dependencies dynamically.
|
|
81
|
+
* `undefined` during actual generation.
|
|
82
|
+
*/
|
|
83
|
+
changed_file_id: Path_Id | undefined;
|
|
78
84
|
}
|
|
79
85
|
|
|
80
86
|
// TODO consider other return data - metadata? effects? non-file build artifacts?
|
package/src/lib/gen_helpers.ts
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {resolve} from 'node:path';
|
|
2
2
|
import type {Logger} from '@ryanatkn/belt/log.js';
|
|
3
3
|
import type {Timings} from '@ryanatkn/belt/timings.js';
|
|
4
4
|
|
|
5
5
|
import type {Gro_Config} from './gro_config.ts';
|
|
6
|
-
import type
|
|
6
|
+
import {filter_dependents, type Filer} from './filer.ts';
|
|
7
7
|
import type {Invoke_Task} from './task.ts';
|
|
8
8
|
import {
|
|
9
9
|
normalize_gen_config,
|
|
10
10
|
validate_gen_module,
|
|
11
11
|
type Gen_Context,
|
|
12
|
-
type
|
|
12
|
+
type Gen_Dependencies_Config,
|
|
13
13
|
} from './gen.ts';
|
|
14
14
|
import {default_svelte_config} from './svelte_config.ts';
|
|
15
15
|
import {to_root_path} from './paths.ts';
|
|
16
16
|
import type {Path_Id} from './path.ts';
|
|
17
|
+
import {load_module} from './modules.ts';
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* Check if a file change should trigger a gen file.
|
|
@@ -26,95 +27,94 @@ export const should_trigger_gen = async (
|
|
|
26
27
|
log: Logger,
|
|
27
28
|
timings: Timings,
|
|
28
29
|
invoke_task: Invoke_Task,
|
|
29
|
-
dependencies_cache: Map<Path_Id, Gen_Dependencies | null>,
|
|
30
30
|
): Promise<boolean> => {
|
|
31
31
|
// Always trigger if the gen file itself changed
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
dependencies_cache.delete(gen_file_id);
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
32
|
+
const is_self_change = gen_file_id === changed_file_id;
|
|
33
|
+
if (is_self_change) return true;
|
|
37
34
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
invoke_task,
|
|
35
|
+
// Check if gen file depends on the changed file (directly or transitively)
|
|
36
|
+
const changed_disknode = filer.get_by_id(changed_file_id);
|
|
37
|
+
let should_bust_cache = false;
|
|
38
|
+
if (changed_disknode) {
|
|
39
|
+
const dependents = filter_dependents(
|
|
40
|
+
changed_disknode,
|
|
41
|
+
filer.get_by_id,
|
|
42
|
+
(id) => id === gen_file_id, // filter for just our gen file
|
|
47
43
|
);
|
|
48
|
-
|
|
49
|
-
} else {
|
|
50
|
-
dependencies = dependencies_cache.get(gen_file_id);
|
|
44
|
+
should_bust_cache = dependents.has(gen_file_id);
|
|
51
45
|
}
|
|
52
46
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
47
|
+
// Resolve dependencies (with cache busting if the changed file is a dependency of the gen file)
|
|
48
|
+
const dependencies = await resolve_gen_dependencies(
|
|
49
|
+
gen_file_id,
|
|
50
|
+
changed_file_id,
|
|
51
|
+
should_bust_cache,
|
|
52
|
+
config,
|
|
53
|
+
filer,
|
|
54
|
+
log,
|
|
55
|
+
timings,
|
|
56
|
+
invoke_task,
|
|
57
|
+
);
|
|
63
58
|
|
|
64
|
-
|
|
65
|
-
if (dependencies.files.includes(changed_file_id)) {
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
59
|
+
if (!dependencies) return false;
|
|
70
60
|
|
|
71
|
-
return
|
|
61
|
+
return (
|
|
62
|
+
dependencies === 'all' ||
|
|
63
|
+
dependencies.patterns?.some((p) => p.test(changed_file_id)) ||
|
|
64
|
+
dependencies.files?.includes(changed_file_id) ||
|
|
65
|
+
false
|
|
66
|
+
);
|
|
72
67
|
};
|
|
73
68
|
|
|
74
69
|
/**
|
|
75
70
|
* Resolve dependencies for a gen file.
|
|
76
|
-
* Uses cache-busting
|
|
77
|
-
*
|
|
71
|
+
* Uses cache-busting only when the gen file itself changes,
|
|
72
|
+
* otherwise relies on Node's module caching.
|
|
78
73
|
*/
|
|
79
74
|
const resolve_gen_dependencies = async (
|
|
80
75
|
gen_file_id: string,
|
|
76
|
+
changed_file_id: Path_Id | undefined,
|
|
77
|
+
bust_cache: boolean,
|
|
81
78
|
config: Gro_Config,
|
|
82
79
|
filer: Filer,
|
|
83
80
|
log: Logger,
|
|
84
81
|
timings: Timings,
|
|
85
82
|
invoke_task: Invoke_Task,
|
|
86
|
-
): Promise<
|
|
87
|
-
|
|
88
|
-
const url = pathToFileURL(gen_file_id);
|
|
89
|
-
url.searchParams.set('t', Date.now().toString());
|
|
90
|
-
const module = await import(url.href);
|
|
91
|
-
if (!validate_gen_module(module)) {
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
83
|
+
): Promise<Gen_Dependencies_Config | 'all' | null> => {
|
|
84
|
+
const result = await load_module(gen_file_id, validate_gen_module, bust_cache);
|
|
94
85
|
|
|
95
|
-
|
|
96
|
-
if (
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
let dependencies = gen_config.dependencies;
|
|
101
|
-
if (typeof dependencies === 'function') {
|
|
102
|
-
const gen_ctx: Gen_Context = {
|
|
103
|
-
config,
|
|
104
|
-
svelte_config: default_svelte_config,
|
|
105
|
-
filer,
|
|
106
|
-
log,
|
|
107
|
-
timings,
|
|
108
|
-
invoke_task,
|
|
109
|
-
origin_id: gen_file_id,
|
|
110
|
-
origin_path: to_root_path(gen_file_id),
|
|
111
|
-
};
|
|
112
|
-
dependencies = await dependencies(gen_ctx);
|
|
86
|
+
if (!result.ok) {
|
|
87
|
+
if (result.type === 'failed_import') {
|
|
88
|
+
log.error(`Failed to import ${gen_file_id}:`, result.error);
|
|
113
89
|
}
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
114
92
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
log.error(`Failed to resolve dependencies for ${gen_file_id}:`, err);
|
|
93
|
+
const gen_config = normalize_gen_config(result.mod.gen);
|
|
94
|
+
if (!gen_config.dependencies) {
|
|
118
95
|
return null;
|
|
119
96
|
}
|
|
97
|
+
|
|
98
|
+
let {dependencies} = gen_config;
|
|
99
|
+
if (typeof dependencies === 'function') {
|
|
100
|
+
const gen_ctx: Gen_Context = {
|
|
101
|
+
config,
|
|
102
|
+
svelte_config: default_svelte_config,
|
|
103
|
+
filer,
|
|
104
|
+
log,
|
|
105
|
+
timings,
|
|
106
|
+
invoke_task,
|
|
107
|
+
origin_id: gen_file_id,
|
|
108
|
+
origin_path: to_root_path(gen_file_id),
|
|
109
|
+
changed_file_id,
|
|
110
|
+
};
|
|
111
|
+
dependencies = await dependencies(gen_ctx);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Normalize file paths to absolute paths
|
|
115
|
+
if (dependencies !== 'all' && dependencies.files) {
|
|
116
|
+
dependencies.files = dependencies.files.map((f) => resolve(f));
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return dependencies;
|
|
120
120
|
};
|
|
@@ -5,11 +5,10 @@ import {Unreachable_Error} from '@ryanatkn/belt/error.js';
|
|
|
5
5
|
import type {Plugin} from './plugin.ts';
|
|
6
6
|
import type {Args} from './args.ts';
|
|
7
7
|
import {paths} from './paths.ts';
|
|
8
|
-
import {find_genfiles, is_gen_path
|
|
8
|
+
import {find_genfiles, is_gen_path} from './gen.ts';
|
|
9
9
|
import {filter_dependents} from './filer.ts';
|
|
10
10
|
import {should_trigger_gen} from './gen_helpers.ts';
|
|
11
11
|
import {spawn_cli} from './cli.ts';
|
|
12
|
-
import type {Path_Id} from './path.ts';
|
|
13
12
|
|
|
14
13
|
const FLUSH_DEBOUNCE_DELAY = 500;
|
|
15
14
|
|
|
@@ -34,9 +33,6 @@ export const gro_plugin_gen = ({
|
|
|
34
33
|
}: Gro_Plugin_Gen_Options = EMPTY_OBJECT): Plugin => {
|
|
35
34
|
const queued_files: Set<string> = new Set();
|
|
36
35
|
|
|
37
|
-
// Cache for gen file declared dependencies to avoid repeated imports
|
|
38
|
-
const gen_dependencies_cache: Map<Path_Id, Gen_Dependencies | null> = new Map();
|
|
39
|
-
|
|
40
36
|
let cleanup_watch: (() => void) | undefined;
|
|
41
37
|
|
|
42
38
|
return {
|
|
@@ -113,7 +109,6 @@ export const gro_plugin_gen = ({
|
|
|
113
109
|
log,
|
|
114
110
|
timings,
|
|
115
111
|
invoke_task,
|
|
116
|
-
gen_dependencies_cache,
|
|
117
112
|
);
|
|
118
113
|
if (should_trigger) {
|
|
119
114
|
queue_gen(gen_file.id);
|
|
@@ -136,9 +131,6 @@ export const gro_plugin_gen = ({
|
|
|
136
131
|
break;
|
|
137
132
|
}
|
|
138
133
|
case 'delete': {
|
|
139
|
-
if (is_gen_path(source_file.id)) {
|
|
140
|
-
gen_dependencies_cache.delete(source_file.id);
|
|
141
|
-
}
|
|
142
134
|
// I think for the gen plugin this is best as a no-op? avoids broken attempts
|
|
143
135
|
break;
|
|
144
136
|
}
|
package/src/lib/modules.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type {Timings} from '@ryanatkn/belt/timings.js';
|
|
|
2
2
|
import {Unreachable_Error} from '@ryanatkn/belt/error.js';
|
|
3
3
|
import type {Result} from '@ryanatkn/belt/result.js';
|
|
4
4
|
import {print_error} from '@ryanatkn/belt/print.js';
|
|
5
|
+
import {pathToFileURL} from 'node:url';
|
|
5
6
|
|
|
6
7
|
import type {Resolved_Input_File} from './input_path.ts';
|
|
7
8
|
import {print_path} from './paths.ts';
|
|
@@ -29,10 +30,17 @@ export type Load_Module_Failure =
|
|
|
29
30
|
export const load_module = async <T_Module extends Record<string, any>>(
|
|
30
31
|
id: Path_Id,
|
|
31
32
|
validate?: (mod: Record<string, any>) => mod is T_Module,
|
|
33
|
+
bust_cache?: boolean,
|
|
32
34
|
): Promise<Load_Module_Result<T_Module>> => {
|
|
33
35
|
let mod;
|
|
34
36
|
try {
|
|
35
|
-
|
|
37
|
+
let import_path = id;
|
|
38
|
+
if (bust_cache) {
|
|
39
|
+
const url = pathToFileURL(id);
|
|
40
|
+
url.searchParams.set('t', Date.now().toString());
|
|
41
|
+
import_path = url.href;
|
|
42
|
+
}
|
|
43
|
+
mod = await import(import_path);
|
|
36
44
|
} catch (err) {
|
|
37
45
|
return {ok: false, type: 'failed_import', id, error: err};
|
|
38
46
|
}
|
package/src/lib/package.ts
CHANGED
|
@@ -5,7 +5,7 @@ import type {Src_Json} from '@ryanatkn/belt/src_json.js';
|
|
|
5
5
|
|
|
6
6
|
export const package_json: Package_Json = {
|
|
7
7
|
name: '@ryanatkn/gro',
|
|
8
|
-
version: '0.
|
|
8
|
+
version: '0.167.0',
|
|
9
9
|
description: 'task runner and toolkit extending SvelteKit',
|
|
10
10
|
motto: 'generate, run, optimize',
|
|
11
11
|
glyph: '🌰',
|
|
@@ -70,7 +70,7 @@ export const package_json: Package_Json = {
|
|
|
70
70
|
'@changesets/types': '^6.1.0',
|
|
71
71
|
'@ryanatkn/eslint-config': '^0.8.0',
|
|
72
72
|
'@ryanatkn/fuz': '^0.146.0',
|
|
73
|
-
'@ryanatkn/moss': '^0.
|
|
73
|
+
'@ryanatkn/moss': '^0.35.0',
|
|
74
74
|
'@sveltejs/adapter-static': '^3.0.9',
|
|
75
75
|
'@sveltejs/kit': '^2.37.1',
|
|
76
76
|
'@sveltejs/package': '^2.5.0',
|
|
@@ -104,7 +104,7 @@ export const package_json: Package_Json = {
|
|
|
104
104
|
|
|
105
105
|
export const src_json: Src_Json = {
|
|
106
106
|
name: '@ryanatkn/gro',
|
|
107
|
-
version: '0.
|
|
107
|
+
version: '0.167.0',
|
|
108
108
|
modules: {
|
|
109
109
|
'.': {
|
|
110
110
|
path: 'index.ts',
|