@ryanatkn/gro 0.161.2 → 0.162.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.
Files changed (106) hide show
  1. package/README.md +8 -7
  2. package/dist/build.task.d.ts.map +1 -1
  3. package/dist/build.task.js +4 -2
  4. package/dist/check.task.d.ts +0 -1
  5. package/dist/check.task.d.ts.map +1 -1
  6. package/dist/check.task.js +8 -8
  7. package/dist/child_process_logging.js +1 -1
  8. package/dist/constants.d.ts +10 -1
  9. package/dist/constants.d.ts.map +1 -1
  10. package/dist/constants.js +12 -3
  11. package/dist/dev.task.d.ts +0 -1
  12. package/dist/dev.task.d.ts.map +1 -1
  13. package/dist/dev.task.js +5 -7
  14. package/dist/disknode.d.ts +18 -0
  15. package/dist/disknode.d.ts.map +1 -0
  16. package/dist/disknode.js +1 -0
  17. package/dist/esbuild_plugin_sveltekit_shim_env.d.ts.map +1 -1
  18. package/dist/esbuild_plugin_sveltekit_shim_env.js +1 -2
  19. package/dist/filer.d.ts +6 -21
  20. package/dist/filer.d.ts.map +1 -1
  21. package/dist/filer.js +11 -6
  22. package/dist/format_directory.js +2 -2
  23. package/dist/gen.task.d.ts.map +1 -1
  24. package/dist/gen.task.js +56 -12
  25. package/dist/git.js +3 -3
  26. package/dist/gro.config.default.d.ts.map +1 -1
  27. package/dist/gro.config.default.js +2 -1
  28. package/dist/gro_config.d.ts +1 -1
  29. package/dist/gro_config.d.ts.map +1 -1
  30. package/dist/gro_config.js +5 -5
  31. package/dist/gro_plugin_gen.d.ts.map +1 -1
  32. package/dist/gro_plugin_gen.js +7 -6
  33. package/dist/gro_plugin_server.d.ts.map +1 -1
  34. package/dist/gro_plugin_server.js +16 -25
  35. package/dist/gro_plugin_sveltekit_app.d.ts.map +1 -1
  36. package/dist/gro_plugin_sveltekit_app.js +1 -2
  37. package/dist/gro_plugin_sveltekit_library.d.ts.map +1 -1
  38. package/dist/gro_plugin_sveltekit_library.js +2 -1
  39. package/dist/invoke.js +6 -4
  40. package/dist/package.d.ts.map +1 -1
  41. package/dist/package.gen.d.ts.map +1 -1
  42. package/dist/package.gen.js +4 -0
  43. package/dist/package.js +41 -30
  44. package/dist/package_json.d.ts +4 -3
  45. package/dist/package_json.d.ts.map +1 -1
  46. package/dist/package_json.js +12 -10
  47. package/dist/parse_imports.js +2 -2
  48. package/dist/paths.js +2 -2
  49. package/dist/reinstall.task.js +1 -1
  50. package/dist/resolve_specifier.d.ts.map +1 -1
  51. package/dist/src_json.d.ts.map +1 -1
  52. package/dist/src_json.js +3 -1
  53. package/dist/svelte_config.d.ts.map +1 -1
  54. package/dist/svelte_config.js +2 -0
  55. package/dist/sveltekit_helpers.d.ts +0 -7
  56. package/dist/sveltekit_helpers.d.ts.map +1 -1
  57. package/dist/sveltekit_helpers.js +1 -8
  58. package/dist/sync.task.d.ts +0 -1
  59. package/dist/sync.task.d.ts.map +1 -1
  60. package/dist/sync.task.js +1 -2
  61. package/dist/task.d.ts.map +1 -1
  62. package/dist/test.task.d.ts +2 -3
  63. package/dist/test.task.d.ts.map +1 -1
  64. package/dist/test.task.js +31 -30
  65. package/dist/test_helpers.d.ts +1 -0
  66. package/dist/test_helpers.d.ts.map +1 -1
  67. package/dist/test_helpers.js +1 -0
  68. package/dist/typecheck.task.d.ts.map +1 -1
  69. package/dist/typecheck.task.js +2 -1
  70. package/dist/upgrade.task.d.ts.map +1 -1
  71. package/dist/upgrade.task.js +2 -1
  72. package/package.json +34 -19
  73. package/src/lib/build.task.ts +3 -2
  74. package/src/lib/check.task.ts +7 -8
  75. package/src/lib/child_process_logging.ts +1 -1
  76. package/src/lib/constants.ts +12 -3
  77. package/src/lib/dev.task.ts +4 -7
  78. package/src/lib/disknode.ts +21 -0
  79. package/src/lib/esbuild_plugin_sveltekit_shim_env.ts +1 -2
  80. package/src/lib/filer.ts +23 -35
  81. package/src/lib/format_directory.ts +2 -2
  82. package/src/lib/gen.task.ts +83 -23
  83. package/src/lib/git.ts +3 -3
  84. package/src/lib/gro.config.default.ts +2 -1
  85. package/src/lib/gro_config.ts +11 -7
  86. package/src/lib/gro_plugin_gen.ts +8 -6
  87. package/src/lib/gro_plugin_server.ts +18 -24
  88. package/src/lib/gro_plugin_sveltekit_app.ts +1 -2
  89. package/src/lib/gro_plugin_sveltekit_library.ts +2 -5
  90. package/src/lib/invoke.ts +6 -4
  91. package/src/lib/package.gen.ts +4 -0
  92. package/src/lib/package.ts +41 -30
  93. package/src/lib/package_json.ts +11 -9
  94. package/src/lib/parse_imports.ts +2 -2
  95. package/src/lib/paths.ts +2 -2
  96. package/src/lib/reinstall.task.ts +1 -1
  97. package/src/lib/resolve_specifier.ts +2 -0
  98. package/src/lib/src_json.ts +3 -1
  99. package/src/lib/svelte_config.ts +3 -0
  100. package/src/lib/sveltekit_helpers.ts +7 -13
  101. package/src/lib/sync.task.ts +1 -2
  102. package/src/lib/task.ts +0 -2
  103. package/src/lib/test.task.ts +31 -32
  104. package/src/lib/test_helpers.ts +2 -0
  105. package/src/lib/typecheck.task.ts +2 -1
  106. package/src/lib/upgrade.task.ts +2 -1
@@ -9,7 +9,7 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
9
9
  import { join, resolve } from 'node:path';
10
10
  import { existsSync } from 'node:fs';
11
11
  import { GRO_DIST_DIR, IS_THIS_GRO, paths } from "./paths.js";
12
- import { GRO_CONFIG_PATH, JS_CLI_DEFAULT, NODE_MODULES_DIRNAME, PM_CLI_DEFAULT, SERVER_DIST_PATH, SVELTEKIT_BUILD_DIRNAME, SVELTEKIT_DIST_DIRNAME, } from "./constants.js";
12
+ import { GRO_CONFIG_FILENAME, JS_CLI_DEFAULT, NODE_MODULES_DIRNAME, PM_CLI_DEFAULT, SERVER_DIST_PATH, SVELTEKIT_BUILD_DIRNAME, SVELTEKIT_DIST_DIRNAME, } from "./constants.js";
13
13
  import create_default_config from "./gro.config.default.js";
14
14
  export const create_empty_gro_config = () => ({
15
15
  plugins: () => [],
@@ -48,7 +48,7 @@ export const EXPORTS_EXCLUDER_DEFAULT = /(\.md|\.(test|ignore)\.|\/(test|fixture
48
48
  * Transforms a `Raw_Gro_Config` to the more strict `Gro_Config`.
49
49
  * This allows users to provide a more relaxed config.
50
50
  */
51
- export const normalize_gro_config = (raw_config) => {
51
+ export const cook_gro_config = (raw_config) => {
52
52
  const empty_config = create_empty_gro_config();
53
53
  // All of the raw config properties are optional,
54
54
  // so fall back to the empty values when `undefined`.
@@ -67,8 +67,8 @@ export const normalize_gro_config = (raw_config) => {
67
67
  };
68
68
  };
69
69
  export const load_gro_config = async (dir = paths.root) => {
70
- const default_config = normalize_gro_config(await create_default_config(create_empty_gro_config()));
71
- const config_path = join(dir, GRO_CONFIG_PATH);
70
+ const default_config = cook_gro_config(await create_default_config(create_empty_gro_config()));
71
+ const config_path = join(dir, GRO_CONFIG_FILENAME);
72
72
  if (!existsSync(config_path)) {
73
73
  // No user config file found, so return the default.
74
74
  return default_config;
@@ -76,7 +76,7 @@ export const load_gro_config = async (dir = paths.root) => {
76
76
  // Import the user's `gro.config.ts`.
77
77
  const config_module = await import(__rewriteRelativeImportExtension(config_path, true));
78
78
  validate_gro_config_module(config_module, config_path);
79
- return normalize_gro_config(typeof config_module.default === 'function'
79
+ return cook_gro_config(typeof config_module.default === 'function'
80
80
  ? await config_module.default(default_config)
81
81
  : config_module.default);
82
82
  };
@@ -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;AAQpC,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,MAqF1C,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;AAQpC,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,MAuF1C,CAAC"}
@@ -23,8 +23,9 @@ export const gro_plugin_gen = ({ input_paths = [paths.source], root_dirs = [path
23
23
  queued_files.clear();
24
24
  await gen(files);
25
25
  }, { delay: flush_debounce_delay });
26
+ // TODO do this in-process - will it cause caching issues with the current impl?
26
27
  const gen = (files = []) => spawn_cli('gro', ['gen', ...files]);
27
- let cleanup;
28
+ let cleanup_watch;
28
29
  return {
29
30
  name: 'gro_plugin_gen',
30
31
  setup: async ({ watch, dev, log, config, filer }) => {
@@ -47,7 +48,7 @@ export const gro_plugin_gen = ({ input_paths = [paths.source], root_dirs = [path
47
48
  }
48
49
  // When a file builds, check it and its tree of dependents
49
50
  // for any `.gen.` files that need to run.
50
- cleanup = await filer.watch((change, source_file) => {
51
+ cleanup_watch = await filer.watch((change, source_file) => {
51
52
  if (source_file.external)
52
53
  return;
53
54
  switch (change.type) {
@@ -63,7 +64,7 @@ export const gro_plugin_gen = ({ input_paths = [paths.source], root_dirs = [path
63
64
  break;
64
65
  }
65
66
  case 'delete': {
66
- // TODO delete the generated file(s)? option?
67
+ // TODO delete the generated file(s)? option? because it may be surprising
67
68
  break;
68
69
  }
69
70
  default:
@@ -72,9 +73,9 @@ export const gro_plugin_gen = ({ input_paths = [paths.source], root_dirs = [path
72
73
  });
73
74
  },
74
75
  teardown: async () => {
75
- if (cleanup !== undefined) {
76
- await cleanup();
77
- cleanup = undefined;
76
+ if (cleanup_watch) {
77
+ await cleanup_watch();
78
+ cleanup_watch = undefined;
78
79
  }
79
80
  },
80
81
  };
@@ -1 +1 @@
1
- {"version":3,"file":"gro_plugin_server.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gro_plugin_server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAC,MAAM,IAAI,YAAY,EAAC,MAAM,eAAe,CAAC;AAI1D,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAC;AAIrD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AAgBxC,eAAO,MAAM,gBAAgB,6BAA0D,CAAC;AAExF,eAAO,MAAM,UAAU,GAAI,kCAAuB,KAAG,MAAM,CAAC,MAAM,EAAE;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAKpF,CAAC;AAEF,MAAM,WAAW,yBAAyB;IACzC;;OAEG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC;;OAEG;IACH,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,CAAC;IACrF;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACxB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,QAAQ,CAAC;AAEzD,eAAO,MAAM,iBAAiB,GAAI,mJAgB/B,yBAA8B,KAAG,MA2JnC,CAAC"}
1
+ {"version":3,"file":"gro_plugin_server.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gro_plugin_server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAC,MAAM,IAAI,YAAY,EAAC,MAAM,eAAe,CAAC;AAI1D,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAC;AAIrD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AAexC,eAAO,MAAM,gBAAgB,6BAA0D,CAAC;AAExF,eAAO,MAAM,UAAU,GAAI,kCAAuB,KAAG,MAAM,CAAC,MAAM,EAAE;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAKpF,CAAC;AAEF,MAAM,WAAW,yBAAyB;IACzC;;OAEG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC;;OAEG;IACH,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,CAAC;IACrF;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACxB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,QAAQ,CAAC;AAEzD,eAAO,MAAM,iBAAiB,GAAI,mJAgB/B,yBAA8B,KAAG,MAsJnC,CAAC"}
@@ -7,7 +7,6 @@ import { existsSync } from 'node:fs';
7
7
  import { throttle } from '@ryanatkn/belt/throttle.js';
8
8
  import { base_path_to_path_id, LIB_DIRNAME, paths } from "./paths.js";
9
9
  import { GRO_DEV_DIRNAME, SERVER_DIST_PATH } from "./constants.js";
10
- import { watch_dir } from "./watch_dir.js";
11
10
  import { parse_svelte_config, default_svelte_config } from "./svelte_config.js";
12
11
  import { esbuild_plugin_sveltekit_shim_app } from "./esbuild_plugin_sveltekit_shim_app.js";
13
12
  import { esbuild_plugin_sveltekit_shim_env } from "./esbuild_plugin_sveltekit_shim_env.js";
@@ -30,13 +29,13 @@ export const gro_plugin_server = ({ entry_points = [SERVER_SOURCE_ID], dir = pro
30
29
  outname: 'server/server.js',
31
30
  }), env_files, ambient_env, svelte_config, target = 'esnext', esbuild_build_options = identity, rebuild_throttle_delay = 1000, cli_command, run, // `dev` default is not available in this scope
32
31
  } = {}) => {
33
- let build_ctx = null;
34
- let watcher = null;
35
- let server_process = null;
36
- let deps = null;
32
+ let build_ctx;
33
+ let cleanup_watch;
34
+ let server_process;
35
+ let deps;
37
36
  return {
38
37
  name: 'gro_plugin_server',
39
- setup: async ({ dev, watch, timings, log, config }) => {
38
+ setup: async ({ dev, watch, timings, log, config, filer }) => {
40
39
  const parsed_svelte_config = !svelte_config && strip_end(dir, '/') === process.cwd()
41
40
  ? default_svelte_config
42
41
  : await parse_svelte_config({
@@ -117,23 +116,13 @@ export const gro_plugin_server = ({ entry_points = [SERVER_SOURCE_ID], dir = pro
117
116
  server_process?.restart();
118
117
  }, { delay: rebuild_throttle_delay });
119
118
  await rebuild();
120
- // uses chokidar instead of esbuild's watcher for efficiency
121
119
  if (watch) {
122
- let watcher_ready = false;
123
- // TODO maybe reuse this watcher globally via an option,
124
- // because it watches all of `$lib`, and that means it excludes `$routes`
125
- // while also including a lot of client files we don't care about,
126
- // but we can't discern which of `$lib` to watch ahead of time
127
- watcher = watch_dir({
128
- dir: paths.lib,
129
- on_change: (change) => {
130
- if (!watcher_ready || !deps?.has(change.path))
131
- return;
132
- void rebuild();
133
- },
120
+ cleanup_watch = await filer.watch((change) => {
121
+ if (!deps?.has(change.path)) {
122
+ return;
123
+ }
124
+ void rebuild();
134
125
  });
135
- await watcher.init();
136
- watcher_ready = true;
137
126
  }
138
127
  if (!existsSync(server_outpath)) {
139
128
  throw Error(`Node server failed to start due to missing file: ${server_outpath}`);
@@ -148,16 +137,18 @@ export const gro_plugin_server = ({ entry_points = [SERVER_SOURCE_ID], dir = pro
148
137
  }
149
138
  },
150
139
  teardown: async () => {
140
+ if (cleanup_watch) {
141
+ cleanup_watch();
142
+ cleanup_watch = undefined;
143
+ }
151
144
  if (server_process) {
152
145
  const s = server_process; // avoid possible issue where a build is in progress, don't want to issue a restart, could be fixed upstream in `spawn_restartable_process`
153
- server_process = null;
146
+ server_process = undefined;
154
147
  await s.kill();
155
148
  }
156
- if (watcher) {
157
- await watcher.close();
158
- }
159
149
  if (build_ctx) {
160
150
  await build_ctx.dispose();
151
+ build_ctx = undefined;
161
152
  }
162
153
  },
163
154
  };
@@ -1 +1 @@
1
- {"version":3,"file":"gro_plugin_sveltekit_app.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gro_plugin_sveltekit_app.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AAExC,OAAO,EAAyB,KAAK,gBAAgB,EAAoB,MAAM,mBAAmB,CAAC;AAGnG,OAAO,EAAC,KAAK,YAAY,EAAsC,MAAM,eAAe,CAAC;AAMrF,MAAM,WAAW,gCAAgC;IAChD;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;IAErD;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;IAE7C;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;IAClD;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;AAE9D,eAAO,MAAM,wBAAwB,GAAI,iGAMtC,gCAAqC,KAAG,MA6G1C,CAAC"}
1
+ {"version":3,"file":"gro_plugin_sveltekit_app.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gro_plugin_sveltekit_app.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AAExC,OAAO,EAAyB,KAAK,gBAAgB,EAAoB,MAAM,mBAAmB,CAAC;AAGnG,OAAO,EAAC,KAAK,YAAY,EAAsC,MAAM,eAAe,CAAC;AAKrF,MAAM,WAAW,gCAAgC;IAChD;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;IAErD;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;IAE7C;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;IAClD;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;AAE9D,eAAO,MAAM,wBAAwB,GAAI,iGAMtC,gCAAqC,KAAG,MA6G1C,CAAC"}
@@ -7,8 +7,7 @@ import { find_cli, spawn_cli, spawn_cli_process } from "./cli.js";
7
7
  import { serialize_src_json, create_src_json } from "./src_json.js";
8
8
  import { EXPORTS_EXCLUDER_DEFAULT } from "./gro_config.js";
9
9
  import { default_svelte_config } from "./svelte_config.js";
10
- import { SOURCE_DIRNAME } from "./constants.js";
11
- import { VITE_CLI } from "./sveltekit_helpers.js";
10
+ import { SOURCE_DIRNAME, VITE_CLI } from "./constants.js";
12
11
  export const gro_plugin_sveltekit_app = ({ host_target = 'github_pages', well_known_package_json, well_known_src_json, well_known_src_files, vite_cli = VITE_CLI, } = {}) => {
13
12
  let sveltekit_process = undefined;
14
13
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"gro_plugin_sveltekit_library.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gro_plugin_sveltekit_library.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AAGxC,OAAO,EAGN,KAAK,sBAAsB,EAC3B,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,oCAAoC;IACpD;;;OAGG;IACH,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,4BAA4B,GAAI,kDAG1C,oCAAyC,KAAG,MAoC9C,CAAC"}
1
+ {"version":3,"file":"gro_plugin_sveltekit_library.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gro_plugin_sveltekit_library.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAqB,KAAK,sBAAsB,EAAC,MAAM,wBAAwB,CAAC;AAGvF,MAAM,WAAW,oCAAoC;IACpD;;;OAGG;IACH,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,4BAA4B,GAAI,kDAG1C,oCAAyC,KAAG,MAoC9C,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import { print_spawn_result, spawn } from '@ryanatkn/belt/process.js';
2
2
  import { Task_Error } from "./task.js";
3
3
  import { load_package_json } from "./package_json.js";
4
- import { SVELTE_PACKAGE_CLI, run_svelte_package, } from "./sveltekit_helpers.js";
4
+ import { run_svelte_package } from "./sveltekit_helpers.js";
5
+ import { SVELTE_PACKAGE_CLI } from "./constants.js";
5
6
  export const gro_plugin_sveltekit_library = ({ svelte_package_options, svelte_package_cli = SVELTE_PACKAGE_CLI, } = {}) => {
6
7
  const package_json = load_package_json();
7
8
  return {
package/dist/invoke.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import { attach_process_error_handlers } from '@ryanatkn/belt/process.js';
2
2
  import { configure_log_colors } from '@ryanatkn/belt/log.js';
3
- import { set_colors } from '@ryanatkn/belt/print.js';
4
- import { styleText } from 'node:util';
3
+ import { configure_print_colors } from '@ryanatkn/belt/print.js';
5
4
  import { invoke_task } from "./invoke_task.js";
6
5
  import { to_task_args } from "./args.js";
7
6
  import { load_gro_config } from "./gro_config.js";
@@ -18,8 +17,11 @@ and the rest of the args are forwarded to the task's `run` function.
18
17
  */
19
18
  // handle uncaught errors
20
19
  attach_process_error_handlers((err) => (err.constructor.name === 'Task_Error' ? 'Task_Error' : null), (err) => (err.constructor.name === 'Silent_Error' ? '' : null));
21
- configure_log_colors(styleText);
22
- set_colors(styleText);
20
+ if (!process.env.NO_COLOR) {
21
+ const { styleText } = await import('node:util');
22
+ configure_log_colors(styleText);
23
+ configure_print_colors(styleText);
24
+ }
23
25
  await sveltekit_sync_if_obviously_needed();
24
26
  const { task_name, args } = to_task_args();
25
27
  await invoke_task(task_name, args, await load_gro_config());
@@ -1 +1 @@
1
- {"version":3,"file":"package.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/package.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,4BAA4B,CAAC;AAEzD,eAAO,MAAM,YAAY,EAAE,YAiQnB,CAAC;AAET,eAAO,MAAM,QAAQ,EAAE,QAmwBf,CAAC"}
1
+ {"version":3,"file":"package.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/package.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,4BAA4B,CAAC;AAEzD,eAAO,MAAM,YAAY,EAAE,YAyQnB,CAAC;AAET,eAAO,MAAM,QAAQ,EAAE,QAswBf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"package.gen.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/package.gen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,UAAU,CAAC;AAMlC;;;;GAIG;AACH,eAAO,MAAM,GAAG,EAAE,GAoBjB,CAAC"}
1
+ {"version":3,"file":"package.gen.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/package.gen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,UAAU,CAAC;AAMlC;;;;GAIG;AACH,eAAO,MAAM,GAAG,EAAE,GAwBjB,CAAC"}
@@ -9,6 +9,10 @@ import { create_src_json } from "./src_json.js";
9
9
  */
10
10
  export const gen = ({ origin_path }) => {
11
11
  const package_json = load_package_json();
12
+ // TODO this can error with bad json data, do we need to update the package.json here first?
13
+ // similarly do this in other places too?
14
+ // part of the problem is that the package_json actually has a dependency on each of its exports and their deps,
15
+ // but only when they're added/removed right? see gro_plugin_gen for details
12
16
  const src_json = create_src_json(package_json, undefined);
13
17
  const is_this_belt = package_json.name === '@ryanatkn/belt'; // TODO more robust?
14
18
  return `
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.161.2',
4
+ version: '0.162.0',
5
5
  description: 'task runner and toolkit extending SvelteKit',
6
6
  motto: 'generate, run, optimize',
7
7
  glyph: '🌰',
@@ -39,39 +39,46 @@ export const package_json = {
39
39
  'typescript',
40
40
  ],
41
41
  dependencies: {
42
- '@ryanatkn/belt': '^0.33.0',
42
+ '@ryanatkn/belt': '^0.34.1',
43
43
  chokidar: '^4.0.3',
44
44
  dotenv: '^17.2.1',
45
45
  'esm-env': '^1.2.2',
46
46
  mri: '^1.2.0',
47
- 'oxc-parser': '^0.79.1',
47
+ 'oxc-parser': '^0.82.3',
48
48
  prettier: '^3.6.2',
49
49
  'prettier-plugin-svelte': '^3.4.0',
50
- 'ts-blank-space': '^0.6.1',
50
+ 'ts-blank-space': '^0.6.2',
51
51
  tslib: '^2.8.1',
52
- zod: '^4.0.14',
52
+ zod: '^4.1.4',
53
53
  },
54
- peerDependencies: { esbuild: '^0.25', svelte: '^5', typescript: '^5' },
55
- optionalDependencies: { '@ryanatkn/moss': '>=0.31.0' },
54
+ peerDependencies: {
55
+ '@sveltejs/kit': '^2',
56
+ esbuild: '^0.25',
57
+ svelte: '^5',
58
+ typescript: '^5',
59
+ vitest: '^3',
60
+ },
61
+ peerDependenciesMeta: { '@sveltejs/kit': { optional: true }, vitest: { optional: true } },
62
+ optionalDependencies: { '@ryanatkn/moss': '>=0.31.0', vitest: '^3' },
56
63
  devDependencies: {
57
64
  '@changesets/changelog-git': '^0.2.1',
58
65
  '@changesets/types': '^6.1.0',
59
66
  '@ryanatkn/eslint-config': '^0.8.0',
60
67
  '@ryanatkn/fuz': '^0.145.0',
61
68
  '@ryanatkn/moss': '^0.32.0',
62
- '@sveltejs/adapter-static': '^3.0.8',
63
- '@sveltejs/kit': '^2.27.0',
64
- '@sveltejs/package': '^2.4.0',
65
- '@sveltejs/vite-plugin-svelte': '^6.1.0',
66
- '@types/node': '^24.1.0',
67
- esbuild: '^0.25.5',
68
- eslint: '^9.32.0',
69
+ '@sveltejs/adapter-static': '^3.0.9',
70
+ '@sveltejs/kit': '^2.36.3',
71
+ '@sveltejs/package': '^2.5.0',
72
+ '@sveltejs/vite-plugin-svelte': '^6.1.3',
73
+ '@types/node': '^24.3.0',
74
+ esbuild: '^0.25.9',
75
+ eslint: '^9.34.0',
69
76
  'eslint-plugin-svelte': '^3.11.0',
70
- svelte: '^5.37.2',
71
- 'svelte-check': '^4.3.0',
72
- typescript: '^5.8.3',
73
- 'typescript-eslint': '^8.38.0',
74
- uvu: '^0.5.6',
77
+ svelte: '^5.38.6',
78
+ 'svelte-check': '^4.3.1',
79
+ typescript: '^5.9.2',
80
+ 'typescript-eslint': '^8.41.0',
81
+ vitest: '^3.2.4',
75
82
  },
76
83
  prettier: {
77
84
  plugins: ['prettier-plugin-svelte'],
@@ -109,6 +116,7 @@ export const package_json = {
109
116
  './constants.js': { types: './dist/constants.d.ts', default: './dist/constants.js' },
110
117
  './deploy.task.js': { types: './dist/deploy.task.d.ts', default: './dist/deploy.task.js' },
111
118
  './dev.task.js': { types: './dist/dev.task.d.ts', default: './dist/dev.task.js' },
119
+ './disknode.js': { types: './dist/disknode.d.ts', default: './dist/disknode.js' },
112
120
  './env.js': { types: './dist/env.d.ts', default: './dist/env.js' },
113
121
  './esbuild_helpers.js': {
114
122
  types: './dist/esbuild_helpers.d.ts',
@@ -258,7 +266,7 @@ export const package_json = {
258
266
  };
259
267
  export const src_json = {
260
268
  name: '@ryanatkn/gro',
261
- version: '0.161.2',
269
+ version: '0.162.0',
262
270
  modules: {
263
271
  '.': {
264
272
  path: 'index.ts',
@@ -371,11 +379,12 @@ export const src_json = {
371
379
  { name: 'SOURCE_DIR', kind: 'variable' },
372
380
  { name: 'GRO_DIR', kind: 'variable' },
373
381
  { name: 'GRO_DEV_DIR', kind: 'variable' },
374
- { name: 'GRO_CONFIG_PATH', kind: 'variable' },
382
+ { name: 'GRO_CONFIG_FILENAME', kind: 'variable' },
375
383
  { name: 'README_FILENAME', kind: 'variable' },
376
384
  { name: 'SVELTE_CONFIG_FILENAME', kind: 'variable' },
377
385
  { name: 'VITE_CONFIG_FILENAME', kind: 'variable' },
378
386
  { name: 'NODE_MODULES_DIRNAME', kind: 'variable' },
387
+ { name: 'PACKAGE_JSON_FILENAME', kind: 'variable' },
379
388
  { name: 'LOCKFILE_FILENAME', kind: 'variable' },
380
389
  { name: 'SVELTEKIT_DEV_DIRNAME', kind: 'variable' },
381
390
  { name: 'SVELTEKIT_BUILD_DIRNAME', kind: 'variable' },
@@ -390,10 +399,18 @@ export const src_json = {
390
399
  { name: 'SVELTE_MATCHER', kind: 'variable' },
391
400
  { name: 'SVELTE_RUNES_MATCHER', kind: 'variable' },
392
401
  { name: 'SVELTE_SCRIPT_MATCHER', kind: 'variable' },
402
+ { name: 'SVELTEKIT_ENV_MATCHER', kind: 'variable' },
403
+ { name: 'SVELTEKIT_GLOBAL_SPECIFIER', kind: 'variable' },
393
404
  { name: 'EVERYTHING_MATCHER', kind: 'variable' },
394
405
  { name: 'JS_CLI_DEFAULT', kind: 'variable' },
395
406
  { name: 'PM_CLI_DEFAULT', kind: 'variable' },
396
407
  { name: 'PRETTIER_CLI_DEFAULT', kind: 'variable' },
408
+ { name: 'SVELTEKIT_CLI', kind: 'variable' },
409
+ { name: 'SVELTE_CHECK_CLI', kind: 'variable' },
410
+ { name: 'SVELTE_PACKAGE_CLI', kind: 'variable' },
411
+ { name: 'SVELTE_PACKAGE_DEP_NAME', kind: 'variable' },
412
+ { name: 'VITE_CLI', kind: 'variable' },
413
+ { name: 'VITEST_CLI', kind: 'variable' },
397
414
  ],
398
415
  },
399
416
  './deploy.task.js': {
@@ -411,6 +428,7 @@ export const src_json = {
411
428
  { name: 'task', kind: 'variable' },
412
429
  ],
413
430
  },
431
+ './disknode.js': { path: 'disknode.ts', declarations: [{ name: 'Disknode', kind: 'type' }] },
414
432
  './env.js': {
415
433
  path: 'env.ts',
416
434
  declarations: [
@@ -471,7 +489,6 @@ export const src_json = {
471
489
  './filer.js': {
472
490
  path: 'filer.ts',
473
491
  declarations: [
474
- { name: 'Source_File', kind: 'type' },
475
492
  { name: 'Cleanup_Watch', kind: 'type' },
476
493
  { name: 'On_Filer_Change', kind: 'type' },
477
494
  { name: 'Filer_Options', kind: 'type' },
@@ -578,7 +595,7 @@ export const src_json = {
578
595
  { name: 'create_empty_gro_config', kind: 'function' },
579
596
  { name: 'SEARCH_EXCLUDER_DEFAULT', kind: 'variable' },
580
597
  { name: 'EXPORTS_EXCLUDER_DEFAULT', kind: 'variable' },
581
- { name: 'normalize_gro_config', kind: 'function' },
598
+ { name: 'cook_gro_config', kind: 'function' },
582
599
  { name: 'Gro_Config_Module', kind: 'type' },
583
600
  { name: 'load_gro_config', kind: 'function' },
584
601
  { name: 'validate_gro_config_module', kind: 'function' },
@@ -866,13 +883,6 @@ export const src_json = {
866
883
  './sveltekit_helpers.js': {
867
884
  path: 'sveltekit_helpers.ts',
868
885
  declarations: [
869
- { name: 'SVELTEKIT_CLI', kind: 'variable' },
870
- { name: 'SVELTE_CHECK_CLI', kind: 'variable' },
871
- { name: 'SVELTE_PACKAGE_CLI', kind: 'variable' },
872
- { name: 'SVELTE_PACKAGE_DEP_NAME', kind: 'variable' },
873
- { name: 'VITE_CLI', kind: 'variable' },
874
- { name: 'SVELTEKIT_ENV_MATCHER', kind: 'variable' },
875
- { name: 'SVELTEKIT_GLOBAL_SPECIFIER', kind: 'variable' },
876
886
  { name: 'has_sveltekit_app', kind: 'function' },
877
887
  { name: 'has_sveltekit_library', kind: 'function' },
878
888
  { name: 'sveltekit_sync', kind: 'function' },
@@ -988,6 +998,7 @@ export const src_json = {
988
998
  './test_helpers.js': {
989
999
  path: 'test_helpers.ts',
990
1000
  declarations: [
1001
+ { name: 'TEST_TIMEOUT_MD', kind: 'variable' },
991
1002
  { name: 'SOME_PUBLIC_ENV_VAR_NAME', kind: 'variable' },
992
1003
  { name: 'SOME_PUBLIC_ENV_VAR_VALUE', kind: 'variable' },
993
1004
  { name: 'init_test_env', kind: 'function' },
@@ -2,8 +2,9 @@ import type { Logger } from '@ryanatkn/belt/log.js';
2
2
  import { Package_Json, Package_Json_Exports } from '@ryanatkn/belt/package_json.js';
3
3
  export type Map_Package_Json = (package_json: Package_Json) => Package_Json | null | Promise<Package_Json | null>;
4
4
  export declare const EMPTY_PACKAGE_JSON: Package_Json;
5
- export declare const load_package_json: (dir?: string, cache?: Record<string, Package_Json>, parse?: boolean) => Package_Json;
6
- export declare const sync_package_json: (map_package_json: Map_Package_Json, log: Logger, check?: boolean, dir?: string, exports_dir?: string) => Promise<{
5
+ export declare const load_package_json: (dir?: string, cache?: Record<string, Package_Json>, parse?: boolean, // TODO pass `false` here in more places, especially anything perf-sensitive like work on startup
6
+ log?: Logger) => Package_Json;
7
+ export declare const sync_package_json: (map_package_json: Map_Package_Json, log: Logger, write?: boolean, dir?: string, exports_dir?: string) => Promise<{
7
8
  package_json: Package_Json | null;
8
9
  changed: boolean;
9
10
  }>;
@@ -13,7 +14,7 @@ export declare const serialize_package_json: (package_json: Package_Json) => str
13
14
  /**
14
15
  * Updates package.json. Writes to the filesystem only when contents change.
15
16
  */
16
- export declare const update_package_json: (dir: string | undefined, update: (package_json: Package_Json) => Package_Json | null | Promise<Package_Json | null>, write?: boolean) => Promise<{
17
+ export declare const update_package_json: (update: (package_json: Package_Json) => Package_Json | null | Promise<Package_Json | null>, dir?: string, write?: boolean) => Promise<{
17
18
  package_json: Package_Json | null;
18
19
  changed: boolean;
19
20
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"package_json.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/package_json.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAC,YAAY,EAAE,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AAQlF,MAAM,MAAM,gBAAgB,GAAG,CAC9B,YAAY,EAAE,YAAY,KACtB,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;AAExD,eAAO,MAAM,kBAAkB,EAAE,YAAsC,CAAC;AAExE,eAAO,MAAM,iBAAiB,GAC7B,YAA+C,EAC/C,QAAQ,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EACpC,eAAY,KACV,YAiBF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC7B,kBAAkB,gBAAgB,EAClC,KAAK,MAAM,EACX,eAAa,EACb,YAAgB,EAChB,oBAAuB,KACrB,OAAO,CAAC;IAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAC,CA2B/D,CAAC;AAEF,eAAO,MAAM,qBAAqB,QAAO,YAAiD,CAAC;AAM3F,eAAO,MAAM,kBAAkB,GAAI,yBAAyB,MAAM,KAAG,IAEpE,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,cAAc,YAAY,KAAG,MACW,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC/B,uBAAgB,EAChB,QAAQ,CAAC,YAAY,EAAE,YAAY,KAAK,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,EAC1F,eAAY,KACV,OAAO,CAAC;IAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAC,CAa/D,CAAC;AAIF,eAAO,MAAM,kBAAkB,GAAI,OAAO,KAAK,CAAC,MAAM,CAAC,KAAG,oBA6CzD,CAAC;AAIF,eAAO,MAAM,cAAc,GAC1B,cAAc,YAAY,KACxB;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,GAAG,SAgBlC,CAAC;AA8BF,eAAO,MAAM,OAAO,GACnB,UAAU,MAAM,EAChB,eAAc,YAAkC,KAC9C,OAGyC,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,YAAY,GAAI,cAAc,YAAY,KAAG,KAAK,CAAC,gBAAgB,CAe/E,CAAC"}
1
+ {"version":3,"file":"package_json.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/package_json.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAC,YAAY,EAAE,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AAQlF,MAAM,MAAM,gBAAgB,GAAG,CAC9B,YAAY,EAAE,YAAY,KACtB,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;AAExD,eAAO,MAAM,kBAAkB,EAAE,YAAsC,CAAC;AAExE,eAAO,MAAM,iBAAiB,GAC7B,YAA+C,EAC/C,QAAQ,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EACpC,eAAY,EAAE,iGAAiG;AAC/G,MAAM,MAAM,KACV,YAkBF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC7B,kBAAkB,gBAAgB,EAClC,KAAK,MAAM,EACX,eAAY,EACZ,YAAgB,EAChB,oBAAuB,KACrB,OAAO,CAAC;IAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAC,CA2B/D,CAAC;AAEF,eAAO,MAAM,qBAAqB,QAAO,YAAiD,CAAC;AAM3F,eAAO,MAAM,kBAAkB,GAAI,yBAAyB,MAAM,KAAG,IAEpE,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,cAAc,YAAY,KAAG,MACW,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC/B,QAAQ,CAAC,YAAY,EAAE,YAAY,KAAK,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,EAC1F,YAAgB,EAChB,eAAY,KACV,OAAO,CAAC;IAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAC,CAa/D,CAAC;AAIF,eAAO,MAAM,kBAAkB,GAAI,OAAO,KAAK,CAAC,MAAM,CAAC,KAAG,oBA6CzD,CAAC;AAIF,eAAO,MAAM,cAAc,GAC1B,cAAc,YAAY,KACxB;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,GAAG,SAgBlC,CAAC;AA8BF,eAAO,MAAM,OAAO,GACnB,UAAU,MAAM,EAChB,eAAc,YAAkC,KAC9C,OAGyC,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,YAAY,GAAI,cAAc,YAAY,KAAG,KAAK,CAAC,gBAAgB,CAe/E,CAAC"}
@@ -5,12 +5,13 @@ import { plural, strip_end } from '@ryanatkn/belt/string.js';
5
5
  import { styleText as st } from 'node:util';
6
6
  import { Package_Json, Package_Json_Exports } from '@ryanatkn/belt/package_json.js';
7
7
  import { paths, gro_paths, IS_THIS_GRO, replace_extension } from "./paths.js";
8
- import { SVELTEKIT_DIST_DIRNAME } from "./constants.js";
8
+ import { PACKAGE_JSON_FILENAME, SVELTEKIT_DIST_DIRNAME } from "./constants.js";
9
9
  import { search_fs } from "./search_fs.js";
10
10
  import { has_sveltekit_library } from "./sveltekit_helpers.js";
11
11
  import { GITHUB_REPO_MATCHER } from "./github.js";
12
12
  export const EMPTY_PACKAGE_JSON = { name: '', version: '' };
13
- export const load_package_json = (dir = IS_THIS_GRO ? gro_paths.root : paths.root, cache, parse = true) => {
13
+ export const load_package_json = (dir = IS_THIS_GRO ? gro_paths.root : paths.root, cache, parse = true, // TODO pass `false` here in more places, especially anything perf-sensitive like work on startup
14
+ log) => {
14
15
  let package_json;
15
16
  if (cache && dir in cache) {
16
17
  return cache[dir];
@@ -18,7 +19,8 @@ export const load_package_json = (dir = IS_THIS_GRO ? gro_paths.root : paths.roo
18
19
  try {
19
20
  package_json = JSON.parse(load_package_json_contents(dir));
20
21
  }
21
- catch (_err) {
22
+ catch (err) {
23
+ log?.error(st('yellow', `Failed to load package.json in ${dir}`), err);
22
24
  return EMPTY_PACKAGE_JSON;
23
25
  }
24
26
  if (parse) {
@@ -29,17 +31,17 @@ export const load_package_json = (dir = IS_THIS_GRO ? gro_paths.root : paths.roo
29
31
  }
30
32
  return package_json;
31
33
  };
32
- export const sync_package_json = async (map_package_json, log, check = false, dir = paths.root, exports_dir = paths.lib) => {
34
+ export const sync_package_json = async (map_package_json, log, write = true, dir = paths.root, exports_dir = paths.lib) => {
33
35
  const exported_files = search_fs(exports_dir);
34
36
  const exported_paths = exported_files.map((f) => f.path);
35
- const updated = await update_package_json(dir, async (package_json) => {
37
+ const updated = await update_package_json(async (package_json) => {
36
38
  if (has_sveltekit_library(package_json).ok) {
37
39
  const exports = to_package_exports(exported_paths);
38
40
  package_json.exports = exports;
39
41
  }
40
42
  const mapped = await map_package_json(package_json);
41
43
  return mapped ? parse_package_json(Package_Json, mapped) : mapped;
42
- }, !check);
44
+ }, dir, write);
43
45
  const exports_count = updated.changed && updated.package_json?.exports
44
46
  ? Object.keys(updated.package_json.exports).length
45
47
  : 0;
@@ -50,15 +52,15 @@ export const sync_package_json = async (map_package_json, log, check = false, di
50
52
  };
51
53
  export const load_gro_package_json = () => load_package_json(gro_paths.root);
52
54
  // TODO probably make this nullable and make callers handle failures
53
- const load_package_json_contents = (dir) => readFileSync(join(dir, 'package.json'), 'utf8');
55
+ const load_package_json_contents = (dir) => readFileSync(join(dir, PACKAGE_JSON_FILENAME), 'utf8');
54
56
  export const write_package_json = (serialized_package_json) => {
55
- writeFileSync(join(paths.root, 'package.json'), serialized_package_json);
57
+ writeFileSync(join(paths.root, PACKAGE_JSON_FILENAME), serialized_package_json);
56
58
  };
57
59
  export const serialize_package_json = (package_json) => JSON.stringify(parse_package_json(Package_Json, package_json), null, 2) + '\n';
58
60
  /**
59
61
  * Updates package.json. Writes to the filesystem only when contents change.
60
62
  */
61
- export const update_package_json = async (dir = paths.root, update, write = true) => {
63
+ export const update_package_json = async (update, dir = paths.root, write = true) => {
62
64
  const original_contents = load_package_json_contents(dir);
63
65
  const original = JSON.parse(original_contents);
64
66
  const updated = await update(original);
@@ -147,7 +149,7 @@ export const parse_repo_url = (package_json) => {
147
149
  * Parses a `Package_Json` object but preserves the order of the original keys.
148
150
  */
149
151
  const parse_package_json = (schema, value) => {
150
- const parsed = parse_or_throw_formatted_error('package.json', schema, value);
152
+ const parsed = parse_or_throw_formatted_error(PACKAGE_JSON_FILENAME, schema, value);
151
153
  const keys = Object.keys(value);
152
154
  return Object.fromEntries(Object.entries(parsed).sort(([a], [b]) => keys.indexOf(a) - keys.indexOf(b)));
153
155
  };
@@ -90,7 +90,7 @@ export const parse_imports = (id, contents, ignore_types = true) => {
90
90
  }
91
91
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
92
92
  if (node.source.type === 'Literal') {
93
- const value = String(node.source.value);
93
+ const value = node.source.value;
94
94
  if (value) {
95
95
  specifiers.push(value);
96
96
  }
@@ -102,7 +102,7 @@ export const parse_imports = (id, contents, ignore_types = true) => {
102
102
  }
103
103
  };
104
104
  if (is_svelte) {
105
- // Reset the regex state between calls
105
+ // Reset the regexp state between calls
106
106
  SVELTE_SCRIPT_MATCHER.lastIndex = 0;
107
107
  // Capture script tags at the top level (not nested in HTML)
108
108
  let last_index = 0;
package/dist/paths.js CHANGED
@@ -2,7 +2,7 @@ import { join, extname, relative, basename } from 'node:path';
2
2
  import { fileURLToPath } from 'node:url';
3
3
  import { ensure_end, strip_end } from '@ryanatkn/belt/string.js';
4
4
  import { styleText as st } from 'node:util';
5
- import { GRO_CONFIG_PATH, GRO_DEV_DIR, GRO_DIR, SOURCE_DIR, SVELTEKIT_DIST_DIRNAME, } from "./constants.js";
5
+ import { GRO_CONFIG_FILENAME, GRO_DEV_DIR, GRO_DIR, SOURCE_DIR, SVELTEKIT_DIST_DIRNAME, } from "./constants.js";
6
6
  import { default_svelte_config } from "./svelte_config.js";
7
7
  /*
8
8
 
@@ -24,7 +24,7 @@ export const create_paths = (root_dir) => {
24
24
  lib: root + LIB_DIR,
25
25
  build: root + GRO_DIR,
26
26
  build_dev: root + GRO_DEV_DIR,
27
- config: root + GRO_CONFIG_PATH,
27
+ config: root + GRO_CONFIG_FILENAME,
28
28
  };
29
29
  };
30
30
  export const infer_paths = (id) => (is_gro_id(id) ? gro_paths : paths);
@@ -20,7 +20,7 @@ export const task = {
20
20
  if (!second_install_result.ok) {
21
21
  throw new Task_Error(`Failed \`${config.pm_cli} install\` after deleting ${LOCKFILE_FILENAME} and ${NODE_MODULES_DIRNAME}`);
22
22
  }
23
- // TODO this relies on npm behavior that changed in v11
23
+ // TODO @many this relies on npm behavior that changed in v11
24
24
  // Deleting the lockfile and reinstalling cleans the lockfile of unnecessary dep noise,
25
25
  // like esbuild's many packages for each platform.
26
26
  await rm(LOCKFILE_FILENAME);
@@ -1 +1 @@
1
- {"version":3,"file":"resolve_specifier.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/resolve_specifier.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAEvC,MAAM,WAAW,kBAAkB;IAClC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,wBAAwB,EAAE,MAAM,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,SAAS,GAAG,4BAA4B,GAAG,4BAA4B,CAAC;IACnF,GAAG,EAAE,OAAO,CAAC;CACb;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,WAAW,MAAM,EAAE,KAAK,MAAM,KAAG,kBAgDlE,CAAC"}
1
+ {"version":3,"file":"resolve_specifier.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/resolve_specifier.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAIvC,MAAM,WAAW,kBAAkB;IAClC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,wBAAwB,EAAE,MAAM,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,SAAS,GAAG,4BAA4B,GAAG,4BAA4B,CAAC;IACnF,GAAG,EAAE,OAAO,CAAC;CACb;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,WAAW,MAAM,EAAE,KAAK,MAAM,KAAG,kBAgDlE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"src_json.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/src_json.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAE,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACvF,OAAO,EAAC,QAAQ,EAAE,WAAW,EAAC,MAAM,4BAA4B,CAAC;AAKjE,MAAM,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AAE9F,eAAO,MAAM,eAAe,GAAI,cAAc,YAAY,EAAE,WAAW,MAAM,KAAG,QAK7E,CAAC;AAEJ,eAAO,MAAM,kBAAkB,GAAI,UAAU,QAAQ,KAAG,MAGvD,CAAC;AAEF,eAAO,MAAM,cAAc,GAC1B,SAAS,oBAAoB,GAAG,SAAS,EACzC,iBAAoB,KAClB,WAAW,GAAG,SAsEhB,CAAC"}
1
+ {"version":3,"file":"src_json.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/src_json.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAE,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AACvF,OAAO,EAAC,QAAQ,EAAE,WAAW,EAAC,MAAM,4BAA4B,CAAC;AAMjE,MAAM,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AAE9F,eAAO,MAAM,eAAe,GAAI,cAAc,YAAY,EAAE,WAAW,MAAM,KAAG,QAK7E,CAAC;AAEJ,eAAO,MAAM,kBAAkB,GAAI,UAAU,QAAQ,KAAG,MAGvD,CAAC;AAEF,eAAO,MAAM,cAAc,GAC1B,SAAS,oBAAoB,GAAG,SAAS,EACzC,iBAAoB,KAClB,WAAW,GAAG,SAuEhB,CAAC"}
package/dist/src_json.js CHANGED
@@ -5,6 +5,7 @@ import ts from 'typescript';
5
5
  import { Src_Json, Src_Modules } from '@ryanatkn/belt/src_json.js';
6
6
  import { paths, replace_extension } from "./paths.js";
7
7
  import { parse_exports } from "./parse_exports.js";
8
+ import { TS_MATCHER } from "./constants.js";
8
9
  export const create_src_json = (package_json, lib_path) => Src_Json.parse({
9
10
  name: package_json.name,
10
11
  version: package_json.version,
@@ -33,13 +34,14 @@ export const to_src_modules = (exports, lib_path = paths.lib) => {
33
34
  file_paths.push({ export_key: k, file_path: source_file_id });
34
35
  continue;
35
36
  }
37
+ // TODO still an error for unknown files running `gro gen`, can it use the filer to invalidate correctly?
36
38
  throw Error(`Failed to infer source file from package.json export path ${k} - the inferred file ${source_file_id} does not exist`);
37
39
  }
38
40
  file_paths.push({ export_key: k, file_path: source_file_id });
39
41
  }
40
42
  // Create a TypeScript program for all TypeScript files
41
43
  const ts_files = file_paths
42
- .filter(({ file_path }) => file_path.endsWith('.ts') || file_path.endsWith('.tsx'))
44
+ .filter(({ file_path }) => TS_MATCHER.test(file_path))
43
45
  .map(({ file_path }) => file_path);
44
46
  let program;
45
47
  if (ts_files.length > 0) {