@ryanatkn/gro 0.166.1 → 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 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":"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"}
1
+ {"version":3,"file":"gen.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gen.ts"],"names":[],"mappings":"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"}
@@ -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 { Filer } from './filer.ts';
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, dependencies_cache: Map<Path_Id, Gen_Dependencies | null>) => Promise<boolean>;
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":"AAEA,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,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAC3C,OAAO,EAIN,KAAK,gBAAgB,EACrB,MAAM,UAAU,CAAC;AAGlB,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAEvC;;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,EACxB,oBAAoB,GAAG,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC,KACvD,OAAO,CAAC,OAAO,CA0CjB,CAAC"}
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"}
@@ -1,91 +1,68 @@
1
- var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
- if (typeof path === "string" && /^\.\.?\//.test(path)) {
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';
10
1
  import { resolve } from 'node:path';
2
+ import { filter_dependents } from "./filer.js";
11
3
  import { normalize_gen_config, validate_gen_module, } from "./gen.js";
12
4
  import { default_svelte_config } from "./svelte_config.js";
13
5
  import { to_root_path } from "./paths.js";
6
+ import { load_module } from "./modules.js";
14
7
  /**
15
8
  * Check if a file change should trigger a gen file.
16
9
  */
17
- export const should_trigger_gen = async (gen_file_id, changed_file_id, config, filer, log, timings, invoke_task, dependencies_cache) => {
10
+ export const should_trigger_gen = async (gen_file_id, changed_file_id, config, filer, log, timings, invoke_task) => {
18
11
  // Always trigger if the gen file itself changed
19
- if (gen_file_id === changed_file_id) {
20
- // Invalidate cache for this gen file
21
- dependencies_cache.delete(gen_file_id);
12
+ const is_self_change = gen_file_id === changed_file_id;
13
+ if (is_self_change)
22
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);
23
21
  }
24
- let dependencies;
25
- if (!dependencies_cache.has(gen_file_id)) {
26
- dependencies = await resolve_gen_dependencies(gen_file_id, config, filer, log, timings, invoke_task);
27
- dependencies_cache.set(gen_file_id, dependencies);
28
- }
29
- else {
30
- dependencies = dependencies_cache.get(gen_file_id);
31
- }
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);
32
24
  if (!dependencies)
33
25
  return false;
34
- if (dependencies === 'all')
35
- return true;
36
- if (typeof dependencies !== 'function') {
37
- if (dependencies.patterns) {
38
- if (dependencies.patterns.some((p) => p.test(changed_file_id))) {
39
- return true;
40
- }
41
- }
42
- if (dependencies.files) {
43
- if (dependencies.files.includes(changed_file_id)) {
44
- return true;
45
- }
46
- }
47
- }
48
- 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);
49
30
  };
50
31
  /**
51
32
  * Resolve dependencies for a gen file.
52
- * Uses cache-busting to get fresh imports, allowing dependency
53
- * declarations to update during watch mode without restart.
33
+ * Uses cache-busting only when the gen file itself changes,
34
+ * otherwise relies on Node's module caching.
54
35
  */
55
- const resolve_gen_dependencies = async (gen_file_id, config, filer, log, timings, invoke_task) => {
56
- try {
57
- const url = pathToFileURL(gen_file_id);
58
- url.searchParams.set('t', Date.now().toString());
59
- const module = await import(__rewriteRelativeImportExtension(url.href, true));
60
- if (!validate_gen_module(module)) {
61
- return null;
62
- }
63
- const gen_config = normalize_gen_config(module.gen);
64
- if (!gen_config.dependencies) {
65
- return null;
66
- }
67
- let dependencies = gen_config.dependencies;
68
- if (typeof dependencies === 'function') {
69
- const gen_ctx = {
70
- config,
71
- svelte_config: default_svelte_config,
72
- filer,
73
- log,
74
- timings,
75
- invoke_task,
76
- origin_id: gen_file_id,
77
- origin_path: to_root_path(gen_file_id),
78
- };
79
- dependencies = await dependencies(gen_ctx);
80
- }
81
- // Normalize file paths to absolute paths
82
- if (dependencies !== 'all' && dependencies.files) {
83
- dependencies.files = dependencies.files.map((f) => resolve(f));
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);
84
41
  }
85
- return dependencies;
42
+ return null;
86
43
  }
87
- catch (err) {
88
- log.error(`Failed to resolve dependencies for ${gen_file_id}:`, err);
44
+ const gen_config = normalize_gen_config(result.mod.gen);
45
+ if (!gen_config.dependencies) {
89
46
  return null;
90
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;
91
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;AAcpC,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,MA2H1C,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"}
@@ -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, gen_dependencies_cache);
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>;
@@ -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;AAGrD,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,KACtD,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAWtC,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"}
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
- mod = await import(__rewriteRelativeImportExtension(id, true));
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.166.1',
4
+ version: '0.167.0',
5
5
  description: 'task runner and toolkit extending SvelteKit',
6
6
  motto: 'generate, run, optimize',
7
7
  glyph: '🌰',
@@ -98,7 +98,7 @@ export const package_json = {
98
98
  };
99
99
  export const src_json = {
100
100
  name: '@ryanatkn/gro',
101
- version: '0.166.1',
101
+ version: '0.167.0',
102
102
  modules: {
103
103
  '.': {
104
104
  path: 'index.ts',
@@ -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,CAwErB,CAAC"}
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
@@ -22,6 +22,7 @@ export const run_gen = async (gen_modules, config, filer, log, timings, invoke_t
22
22
  invoke_task,
23
23
  origin_id: id,
24
24
  origin_path: to_root_path(id),
25
+ changed_file_id: undefined,
25
26
  };
26
27
  let raw_gen_result;
27
28
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryanatkn/gro",
3
- "version": "0.166.1",
3
+ "version": "0.167.0",
4
4
  "description": "task runner and toolkit extending SvelteKit",
5
5
  "motto": "generate, run, optimize",
6
6
  "glyph": "🌰",
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?
@@ -1,20 +1,20 @@
1
- import {pathToFileURL} from 'node:url';
2
1
  import {resolve} from 'node:path';
3
2
  import type {Logger} from '@ryanatkn/belt/log.js';
4
3
  import type {Timings} from '@ryanatkn/belt/timings.js';
5
4
 
6
5
  import type {Gro_Config} from './gro_config.ts';
7
- import type {Filer} from './filer.ts';
6
+ import {filter_dependents, type Filer} from './filer.ts';
8
7
  import type {Invoke_Task} from './task.ts';
9
8
  import {
10
9
  normalize_gen_config,
11
10
  validate_gen_module,
12
11
  type Gen_Context,
13
- type Gen_Dependencies,
12
+ type Gen_Dependencies_Config,
14
13
  } from './gen.ts';
15
14
  import {default_svelte_config} from './svelte_config.ts';
16
15
  import {to_root_path} from './paths.ts';
17
16
  import type {Path_Id} from './path.ts';
17
+ import {load_module} from './modules.ts';
18
18
 
19
19
  /**
20
20
  * Check if a file change should trigger a gen file.
@@ -27,100 +27,94 @@ export const should_trigger_gen = async (
27
27
  log: Logger,
28
28
  timings: Timings,
29
29
  invoke_task: Invoke_Task,
30
- dependencies_cache: Map<Path_Id, Gen_Dependencies | null>,
31
30
  ): Promise<boolean> => {
32
31
  // Always trigger if the gen file itself changed
33
- if (gen_file_id === changed_file_id) {
34
- // Invalidate cache for this gen file
35
- dependencies_cache.delete(gen_file_id);
36
- return true;
37
- }
32
+ const is_self_change = gen_file_id === changed_file_id;
33
+ if (is_self_change) return true;
38
34
 
39
- let dependencies: Gen_Dependencies | null | undefined;
40
- if (!dependencies_cache.has(gen_file_id)) {
41
- dependencies = await resolve_gen_dependencies(
42
- gen_file_id,
43
- config,
44
- filer,
45
- log,
46
- timings,
47
- 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
48
43
  );
49
- dependencies_cache.set(gen_file_id, dependencies);
50
- } else {
51
- dependencies = dependencies_cache.get(gen_file_id);
44
+ should_bust_cache = dependents.has(gen_file_id);
52
45
  }
53
46
 
54
- if (!dependencies) return false;
55
-
56
- if (dependencies === 'all') return true;
57
-
58
- if (typeof dependencies !== 'function') {
59
- if (dependencies.patterns) {
60
- if (dependencies.patterns.some((p) => p.test(changed_file_id))) {
61
- return true;
62
- }
63
- }
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
+ );
64
58
 
65
- if (dependencies.files) {
66
- if (dependencies.files.includes(changed_file_id)) {
67
- return true;
68
- }
69
- }
70
- }
59
+ if (!dependencies) return false;
71
60
 
72
- return false;
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
+ );
73
67
  };
74
68
 
75
69
  /**
76
70
  * Resolve dependencies for a gen file.
77
- * Uses cache-busting to get fresh imports, allowing dependency
78
- * declarations to update during watch mode without restart.
71
+ * Uses cache-busting only when the gen file itself changes,
72
+ * otherwise relies on Node's module caching.
79
73
  */
80
74
  const resolve_gen_dependencies = async (
81
75
  gen_file_id: string,
76
+ changed_file_id: Path_Id | undefined,
77
+ bust_cache: boolean,
82
78
  config: Gro_Config,
83
79
  filer: Filer,
84
80
  log: Logger,
85
81
  timings: Timings,
86
82
  invoke_task: Invoke_Task,
87
- ): Promise<Gen_Dependencies | null> => {
88
- try {
89
- const url = pathToFileURL(gen_file_id);
90
- url.searchParams.set('t', Date.now().toString());
91
- const module = await import(url.href);
92
- if (!validate_gen_module(module)) {
93
- return null;
94
- }
83
+ ): Promise<Gen_Dependencies_Config | 'all' | null> => {
84
+ const result = await load_module(gen_file_id, validate_gen_module, bust_cache);
95
85
 
96
- const gen_config = normalize_gen_config(module.gen);
97
- if (!gen_config.dependencies) {
98
- return null;
86
+ if (!result.ok) {
87
+ if (result.type === 'failed_import') {
88
+ log.error(`Failed to import ${gen_file_id}:`, result.error);
99
89
  }
90
+ return null;
91
+ }
100
92
 
101
- let dependencies = gen_config.dependencies;
102
- if (typeof dependencies === 'function') {
103
- const gen_ctx: Gen_Context = {
104
- config,
105
- svelte_config: default_svelte_config,
106
- filer,
107
- log,
108
- timings,
109
- invoke_task,
110
- origin_id: gen_file_id,
111
- origin_path: to_root_path(gen_file_id),
112
- };
113
- dependencies = await dependencies(gen_ctx);
114
- }
93
+ const gen_config = normalize_gen_config(result.mod.gen);
94
+ if (!gen_config.dependencies) {
95
+ return null;
96
+ }
115
97
 
116
- // Normalize file paths to absolute paths
117
- if (dependencies !== 'all' && dependencies.files) {
118
- dependencies.files = dependencies.files.map((f) => resolve(f));
119
- }
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
+ }
120
113
 
121
- return dependencies;
122
- } catch (err) {
123
- log.error(`Failed to resolve dependencies for ${gen_file_id}:`, err);
124
- return null;
114
+ // Normalize file paths to absolute paths
115
+ if (dependencies !== 'all' && dependencies.files) {
116
+ dependencies.files = dependencies.files.map((f) => resolve(f));
125
117
  }
118
+
119
+ return dependencies;
126
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, type Gen_Dependencies} from './gen.ts';
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
  }
@@ -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
- mod = await import(id);
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
  }
@@ -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.166.1',
8
+ version: '0.167.0',
9
9
  description: 'task runner and toolkit extending SvelteKit',
10
10
  motto: 'generate, run, optimize',
11
11
  glyph: '🌰',
@@ -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.166.1',
107
+ version: '0.167.0',
108
108
  modules: {
109
109
  '.': {
110
110
  path: 'index.ts',
@@ -49,6 +49,7 @@ export const run_gen = async (
49
49
  invoke_task,
50
50
  origin_id: id,
51
51
  origin_path: to_root_path(id),
52
+ changed_file_id: undefined,
52
53
  };
53
54
  let raw_gen_result: Raw_Gen_Result;
54
55
  try {