@ryanatkn/gro 0.167.0 → 0.168.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/env.d.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  export declare const load_env: (dev: boolean, visibility: "public" | "private", public_prefix: string, private_prefix: string, env_dir?: string, env_files?: string[], ambient_env?: NodeJS.ProcessEnv) => Record<string, string>;
2
- export declare const merge_envs: (envs: Array<Record<string, string | undefined>>, visibility: "public" | "private", public_prefix: string, private_prefix: string) => Record<string, string>;
3
- export declare const is_private_env: (key: string, public_prefix: string, private_prefix: string) => boolean;
4
- export declare const is_public_env: (key: string, public_prefix: string, private_prefix: string) => boolean;
5
2
  /**
6
3
  * Loads a single env value without merging it into `process.env`.
7
4
  * By default searches process.env, then a local `.env` if one exists, then `../.env` if it exists.
5
+ * Empty strings are semantically the same as `undefined` for more ergonomic fallbacks.
8
6
  */
9
7
  export declare const load_from_env: (key: string, paths?: string[]) => string | undefined;
8
+ export declare const merge_envs: (envs: Array<Record<string, string | undefined>>, visibility: "public" | "private", public_prefix: string, private_prefix: string) => Record<string, string>;
9
+ export declare const is_private_env: (key: string, public_prefix: string, private_prefix: string) => boolean;
10
+ export declare const is_public_env: (key: string, public_prefix: string, private_prefix: string) => boolean;
10
11
  //# sourceMappingURL=env.d.ts.map
package/dist/env.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/env.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,QAAQ,GACpB,KAAK,OAAO,EACZ,YAAY,QAAQ,GAAG,SAAS,EAChC,eAAe,MAAM,EACrB,gBAAgB,MAAM,EACtB,UAAU,MAAM,EAChB,oBAAoE,EACpE,+BAAyB,KACvB,MAAM,CAAC,MAAM,EAAE,MAAM,CAMvB,CAAC;AAQF,eAAO,MAAM,UAAU,GACtB,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EAC/C,YAAY,QAAQ,GAAG,SAAS,EAChC,eAAe,MAAM,EACrB,gBAAgB,MAAM,KACpB,MAAM,CAAC,MAAM,EAAE,MAAM,CAgBvB,CAAC;AAEF,eAAO,MAAM,cAAc,GAC1B,KAAK,MAAM,EACX,eAAe,MAAM,EACrB,gBAAgB,MAAM,KACpB,OACwF,CAAC;AAE5F,eAAO,MAAM,aAAa,GACzB,KAAK,MAAM,EACX,eAAe,MAAM,EACrB,gBAAgB,MAAM,KACpB,OACyF,CAAC;AAE7F;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,EAAE,gBAA2B,KAAG,MAAM,GAAG,SAOjF,CAAC"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/env.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,QAAQ,GACpB,KAAK,OAAO,EACZ,YAAY,QAAQ,GAAG,SAAS,EAChC,eAAe,MAAM,EACrB,gBAAgB,MAAM,EACtB,UAAU,MAAM,EAChB,oBAAoE,EACpE,+BAAyB,KACvB,MAAM,CAAC,MAAM,EAAE,MAAM,CAMvB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,EAAE,gBAA2B,KAAG,MAAM,GAAG,SASjF,CAAC;AAQF,eAAO,MAAM,UAAU,GACtB,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EAC/C,YAAY,QAAQ,GAAG,SAAS,EAChC,eAAe,MAAM,EACrB,gBAAgB,MAAM,KACpB,MAAM,CAAC,MAAM,EAAE,MAAM,CAgBvB,CAAC;AAEF,eAAO,MAAM,cAAc,GAC1B,KAAK,MAAM,EACX,eAAe,MAAM,EACrB,gBAAgB,MAAM,KACpB,OACwF,CAAC;AAE5F,eAAO,MAAM,aAAa,GACzB,KAAK,MAAM,EACX,eAAe,MAAM,EACrB,gBAAgB,MAAM,KACpB,OACyF,CAAC"}
package/dist/env.js CHANGED
@@ -8,6 +8,23 @@ export const load_env = (dev, visibility, public_prefix, private_prefix, env_dir
8
8
  envs.push(ambient_env);
9
9
  return merge_envs(envs, visibility, public_prefix, private_prefix);
10
10
  };
11
+ /**
12
+ * Loads a single env value without merging it into `process.env`.
13
+ * By default searches process.env, then a local `.env` if one exists, then `../.env` if it exists.
14
+ * Empty strings are semantically the same as `undefined` for more ergonomic fallbacks.
15
+ */
16
+ export const load_from_env = (key, paths = ['.env', '../.env']) => {
17
+ let v = process.env[key];
18
+ if (v)
19
+ return v;
20
+ for (const path of paths) {
21
+ const env = load(path);
22
+ v = env?.[key];
23
+ if (v)
24
+ return v;
25
+ }
26
+ return undefined;
27
+ };
11
28
  const load = (path) => {
12
29
  if (!existsSync(path))
13
30
  return;
@@ -30,17 +47,3 @@ export const merge_envs = (envs, visibility, public_prefix, private_prefix) => {
30
47
  };
31
48
  export const is_private_env = (key, public_prefix, private_prefix) => key.startsWith(private_prefix) && (public_prefix === '' || !key.startsWith(public_prefix));
32
49
  export const is_public_env = (key, public_prefix, private_prefix) => key.startsWith(public_prefix) && (private_prefix === '' || !key.startsWith(private_prefix));
33
- /**
34
- * Loads a single env value without merging it into `process.env`.
35
- * By default searches process.env, then a local `.env` if one exists, then `../.env` if it exists.
36
- */
37
- export const load_from_env = (key, paths = ['.env', '../.env']) => {
38
- if (process.env[key])
39
- return process.env[key];
40
- for (const path of paths) {
41
- const env = load(path);
42
- if (env?.[key])
43
- return env[key];
44
- }
45
- return undefined;
46
- };
package/dist/gen.d.ts CHANGED
@@ -26,7 +26,7 @@ export interface Gen_Dependencies_Config {
26
26
  patterns?: Array<RegExp>;
27
27
  files?: Array<Path_Id>;
28
28
  }
29
- export type Gen_Dependencies_Resolver = (ctx: Gen_Context) => Gen_Dependencies_Config | 'all' | Promise<Gen_Dependencies_Config | 'all'>;
29
+ export type Gen_Dependencies_Resolver = (ctx: Gen_Context) => Gen_Dependencies_Config | 'all' | null | Promise<Gen_Dependencies_Config | 'all' | null>;
30
30
  export type Gen = Gen_Function | Gen_Config;
31
31
  export type Gen_Function = (ctx: Gen_Context) => Raw_Gen_Result | Promise<Raw_Gen_Result>;
32
32
  export interface Gen_Config {
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 +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,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
+ {"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;AAU3C,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"}
@@ -45,7 +45,7 @@ const resolve_gen_dependencies = async (gen_file_id, changed_file_id, bust_cache
45
45
  if (!gen_config.dependencies) {
46
46
  return null;
47
47
  }
48
- let { dependencies } = gen_config;
48
+ let dependencies = gen_config.dependencies;
49
49
  if (typeof dependencies === 'function') {
50
50
  const gen_ctx = {
51
51
  config,
@@ -60,8 +60,16 @@ const resolve_gen_dependencies = async (gen_file_id, changed_file_id, bust_cache
60
60
  };
61
61
  dependencies = await dependencies(gen_ctx);
62
62
  }
63
+ if (dependencies === null || dependencies === 'all') {
64
+ return dependencies;
65
+ }
66
+ // At this point, dependencies is either 'all' or Gen_Dependencies_Config
67
+ // For static dependencies, also normalize empty objects
68
+ if (!dependencies.patterns?.length && !dependencies.files?.length) {
69
+ return null;
70
+ }
63
71
  // Normalize file paths to absolute paths
64
- if (dependencies !== 'all' && dependencies.files) {
72
+ if (dependencies.files) {
65
73
  dependencies.files = dependencies.files.map((f) => resolve(f));
66
74
  }
67
75
  return dependencies;
@@ -42,7 +42,7 @@ export const gro_plugin_sveltekit_app = ({ host_target = 'github_pages', well_kn
42
42
  const serialized_package_json = mapped_package_json && serialize_package_json(mapped_package_json);
43
43
  // `.well-known/src.json` and `.well-known/src/`
44
44
  const final_package_json = mapped_package_json ?? package_json;
45
- const src_json = create_src_json(final_package_json, undefined);
45
+ const src_json = create_src_json(final_package_json, undefined, log);
46
46
  if (well_known_src_json === undefined) {
47
47
  well_known_src_json = final_package_json.public; // eslint-disable-line no-param-reassign
48
48
  }
@@ -7,13 +7,13 @@ import { create_src_json } from "./src_json.js";
7
7
  * which mirrors `package.json` but in TypeScript,
8
8
  * allowing apps to import typesafe data from their own `package.json`.
9
9
  */
10
- export const gen = ({ origin_path }) => {
10
+ export const gen = ({ origin_path, log }) => {
11
11
  const package_json = load_package_json();
12
12
  // TODO this can error with bad json data, do we need to update the package.json here first?
13
13
  // similarly do this in other places too?
14
14
  // part of the problem is that the package_json actually has a dependency on each of its exports and their deps,
15
15
  // but only when they're added/removed right? see gro_plugin_gen for details
16
- const src_json = create_src_json(package_json, undefined);
16
+ const src_json = create_src_json(package_json, undefined, log);
17
17
  const is_this_belt = package_json.name === '@ryanatkn/belt'; // TODO more robust?
18
18
  return `
19
19
  // generated by ${origin_path}
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.167.0',
4
+ version: '0.168.0',
5
5
  description: 'task runner and toolkit extending SvelteKit',
6
6
  motto: 'generate, run, optimize',
7
7
  glyph: '🌰',
@@ -64,8 +64,8 @@ export const package_json = {
64
64
  '@changesets/changelog-git': '^0.2.1',
65
65
  '@changesets/types': '^6.1.0',
66
66
  '@ryanatkn/eslint-config': '^0.8.0',
67
- '@ryanatkn/fuz': '^0.146.0',
68
- '@ryanatkn/moss': '^0.35.0',
67
+ '@ryanatkn/fuz': '^0.147.0',
68
+ '@ryanatkn/moss': '^0.36.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.167.0',
101
+ version: '0.168.0',
102
102
  modules: {
103
103
  '.': {
104
104
  path: 'index.ts',
@@ -265,10 +265,10 @@ export const src_json = {
265
265
  path: 'env.ts',
266
266
  declarations: [
267
267
  { name: 'load_env', kind: 'function' },
268
+ { name: 'load_from_env', kind: 'function' },
268
269
  { name: 'merge_envs', kind: 'function' },
269
270
  { name: 'is_private_env', kind: 'function' },
270
271
  { name: 'is_public_env', kind: 'function' },
271
- { name: 'load_from_env', kind: 'function' },
272
272
  ],
273
273
  },
274
274
  './esbuild_helpers.js': {
package/dist/run_task.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { styleText as st } from 'node:util';
2
2
  import { print_log_label } from '@ryanatkn/belt/print.js';
3
3
  import { System_Logger } from '@ryanatkn/belt/log.js';
4
- import z from 'zod';
4
+ import { z } from 'zod';
5
5
  import { parse_args } from "./args.js";
6
6
  import { log_task_help } from "./task_logging.js";
7
7
  import { Task_Error } from "./task.js";
@@ -1,7 +1,8 @@
1
1
  import type { Package_Json, Package_Json_Exports } from '@ryanatkn/belt/package_json.js';
2
2
  import { Src_Json, Src_Modules } from '@ryanatkn/belt/src_json.js';
3
+ import type { Logger } from '@ryanatkn/belt/log.js';
3
4
  export type Map_Src_Json = (src_json: Src_Json) => Src_Json | null | Promise<Src_Json | null>;
4
- export declare const create_src_json: (package_json: Package_Json, lib_path?: string) => Src_Json;
5
+ export declare const create_src_json: (package_json: Package_Json, lib_path?: string, log?: Logger) => Src_Json;
5
6
  export declare const serialize_src_json: (src_json: Src_Json) => string;
6
- export declare const to_src_modules: (exports: Package_Json_Exports | undefined, lib_path?: string) => Src_Modules | undefined;
7
+ export declare const to_src_modules: (exports: Package_Json_Exports | undefined, lib_path?: string, log?: Logger) => Src_Modules | undefined;
7
8
  //# sourceMappingURL=src_json.d.ts.map
@@ -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;AAOjE,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,SA4ChB,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;AACjE,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,uBAAuB,CAAC;AAOlD,MAAM,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AAE9F,eAAO,MAAM,eAAe,GAC3B,cAAc,YAAY,EAC1B,WAAW,MAAM,EACjB,MAAM,MAAM,KACV,QAKA,CAAC;AAEJ,eAAO,MAAM,kBAAkB,GAAI,UAAU,QAAQ,KAAG,MAGvD,CAAC;AAEF,eAAO,MAAM,cAAc,GAC1B,SAAS,oBAAoB,GAAG,SAAS,EACzC,iBAAoB,EACpB,MAAM,MAAM,KACV,WAAW,GAAG,SA+ChB,CAAC"}
package/dist/src_json.js CHANGED
@@ -7,16 +7,16 @@ import { paths, replace_extension } from "./paths.js";
7
7
  import { parse_exports } from "./parse_exports.js";
8
8
  import { TS_MATCHER, SVELTE_MATCHER, JSON_MATCHER, CSS_MATCHER } from "./constants.js";
9
9
  import { search_fs } from "./search_fs.js";
10
- export const create_src_json = (package_json, lib_path) => Src_Json.parse({
10
+ export const create_src_json = (package_json, lib_path, log) => Src_Json.parse({
11
11
  name: package_json.name,
12
12
  version: package_json.version,
13
- modules: to_src_modules(package_json.exports, lib_path),
13
+ modules: to_src_modules(package_json.exports, lib_path, log),
14
14
  });
15
15
  export const serialize_src_json = (src_json) => {
16
16
  const parsed = Src_Json.parse(src_json); // TODO can parse do the logic that normalize does? see `.transform`
17
17
  return JSON.stringify(parsed, null, 2) + '\n';
18
18
  };
19
- export const to_src_modules = (exports, lib_path = paths.lib) => {
19
+ export const to_src_modules = (exports, lib_path = paths.lib, log) => {
20
20
  if (!exports)
21
21
  return;
22
22
  const file_paths = collect_file_paths(exports, lib_path);
@@ -40,7 +40,10 @@ export const to_src_modules = (exports, lib_path = paths.lib) => {
40
40
  // Process each file
41
41
  for (const { export_key, file_path } of file_paths) {
42
42
  const relative_path = file_path.replace(ensure_end(lib_path, '/'), '');
43
- const declarations = parse_exports(file_path, program).map(({ name, kind }) => ({ name, kind }));
43
+ const declarations = parse_exports(file_path, program, undefined, log).map(({ name, kind }) => ({
44
+ name,
45
+ kind,
46
+ }));
44
47
  result[export_key] = declarations.length
45
48
  ? {
46
49
  path: relative_path,
@@ -1,4 +1,4 @@
1
- import { type ChokidarOptions } from 'chokidar';
1
+ import { type ChokidarOptions, type Matcher } from 'chokidar';
2
2
  import type { Path_Filter } from './path.ts';
3
3
  export interface Watch_Node_Fs {
4
4
  init: () => Promise<void>;
@@ -21,9 +21,16 @@ export interface Watch_Dir_Options {
21
21
  * @default true
22
22
  */
23
23
  absolute?: boolean;
24
+ /**
25
+ * Pattern to ignore files, merged into `chokidar.ignored` if also provided.
26
+ * - `undefined` (default) ignores files matching `.tmp.` pattern
27
+ * - `null` sets no default ignore pattern
28
+ * - or some custom pattern
29
+ */
30
+ ignored?: Matcher | null;
24
31
  }
25
32
  /**
26
33
  * Watch for changes on the filesystem using chokidar.
27
34
  */
28
- export declare const watch_dir: ({ dir, on_change, filter, absolute, chokidar, }: Watch_Dir_Options) => Watch_Node_Fs;
35
+ export declare const watch_dir: ({ dir, on_change, filter, absolute, chokidar, ignored, }: Watch_Dir_Options) => Watch_Node_Fs;
29
36
  //# sourceMappingURL=watch_dir.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"watch_dir.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/watch_dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,eAAe,EAAiB,MAAM,UAAU,CAAC;AAKrE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAI3C,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;CACtB;AACD,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC9D,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,uBAAuB,CAAC;IACnC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,iDAMvB,iBAAiB,KAAG,aA+CtB,CAAC"}
1
+ {"version":3,"file":"watch_dir.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/watch_dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,eAAe,EAAkB,KAAK,OAAO,EAAC,MAAM,UAAU,CAAC;AAMnF,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAM3C,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;CACtB;AACD,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC9D,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,uBAAuB,CAAC;IACnC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,0DAOvB,iBAAiB,KAAG,aA+CtB,CAAC"}
package/dist/watch_dir.js CHANGED
@@ -2,10 +2,12 @@ import { watch } from 'chokidar';
2
2
  import { relative } from 'node:path';
3
3
  import { statSync } from 'node:fs';
4
4
  import { create_deferred } from '@ryanatkn/belt/async.js';
5
+ import { EMPTY_OBJECT } from '@ryanatkn/belt/object.js';
6
+ const TMP_FILE_PATTERN = /\.tmp\./;
5
7
  /**
6
8
  * Watch for changes on the filesystem using chokidar.
7
9
  */
8
- export const watch_dir = ({ dir, on_change, filter, absolute = true, chokidar, }) => {
10
+ export const watch_dir = ({ dir, on_change, filter, absolute = true, chokidar, ignored = TMP_FILE_PATTERN, }) => {
9
11
  let watcher;
10
12
  let initing;
11
13
  return {
@@ -13,7 +15,7 @@ export const watch_dir = ({ dir, on_change, filter, absolute = true, chokidar, }
13
15
  if (initing)
14
16
  return initing.promise;
15
17
  initing = create_deferred();
16
- watcher = watch(dir, { ...chokidar });
18
+ watcher = watch(dir, resolve_chokidar_options(chokidar, ignored));
17
19
  watcher.on('add', (path) => {
18
20
  const final_path = absolute ? path : relative(dir, path);
19
21
  if (filter && !filter(final_path, false))
@@ -58,3 +60,10 @@ export const watch_dir = ({ dir, on_change, filter, absolute = true, chokidar, }
58
60
  },
59
61
  };
60
62
  };
63
+ const resolve_chokidar_options = (options, ignored) => {
64
+ if (ignored === null)
65
+ return options;
66
+ const { ignored: i, ...rest } = options ?? EMPTY_OBJECT;
67
+ const resolved_ignored = i === undefined ? ignored : Array.isArray(i) ? [...i, ignored] : [i, ignored];
68
+ return { ...rest, ignored: resolved_ignored };
69
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryanatkn/gro",
3
- "version": "0.167.0",
3
+ "version": "0.168.0",
4
4
  "description": "task runner and toolkit extending SvelteKit",
5
5
  "motto": "generate, run, optimize",
6
6
  "glyph": "🌰",
@@ -83,8 +83,8 @@
83
83
  "@changesets/changelog-git": "^0.2.1",
84
84
  "@changesets/types": "^6.1.0",
85
85
  "@ryanatkn/eslint-config": "^0.8.0",
86
- "@ryanatkn/fuz": "^0.146.0",
87
- "@ryanatkn/moss": "^0.35.0",
86
+ "@ryanatkn/fuz": "^0.147.0",
87
+ "@ryanatkn/moss": "^0.36.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/env.ts CHANGED
@@ -18,6 +18,22 @@ export const load_env = (
18
18
  return merge_envs(envs, visibility, public_prefix, private_prefix);
19
19
  };
20
20
 
21
+ /**
22
+ * Loads a single env value without merging it into `process.env`.
23
+ * By default searches process.env, then a local `.env` if one exists, then `../.env` if it exists.
24
+ * Empty strings are semantically the same as `undefined` for more ergonomic fallbacks.
25
+ */
26
+ export const load_from_env = (key: string, paths = ['.env', '../.env']): string | undefined => {
27
+ let v = process.env[key];
28
+ if (v) return v;
29
+ for (const path of paths) {
30
+ const env = load(path);
31
+ v = env?.[key];
32
+ if (v) return v;
33
+ }
34
+ return undefined;
35
+ };
36
+
21
37
  const load = (path: string): Record<string, string> | undefined => {
22
38
  if (!existsSync(path)) return;
23
39
  const loaded = readFileSync(path, 'utf8');
@@ -60,16 +76,3 @@ export const is_public_env = (
60
76
  private_prefix: string,
61
77
  ): boolean =>
62
78
  key.startsWith(public_prefix) && (private_prefix === '' || !key.startsWith(private_prefix));
63
-
64
- /**
65
- * Loads a single env value without merging it into `process.env`.
66
- * By default searches process.env, then a local `.env` if one exists, then `../.env` if it exists.
67
- */
68
- export const load_from_env = (key: string, paths = ['.env', '../.env']): string | undefined => {
69
- if (process.env[key]) return process.env[key];
70
- for (const path of paths) {
71
- const env = load(path);
72
- if (env?.[key]) return env[key];
73
- }
74
- return undefined;
75
- };
package/src/lib/gen.ts CHANGED
@@ -47,7 +47,7 @@ export interface Gen_Dependencies_Config {
47
47
 
48
48
  export type Gen_Dependencies_Resolver = (
49
49
  ctx: Gen_Context,
50
- ) => Gen_Dependencies_Config | 'all' | Promise<Gen_Dependencies_Config | 'all'>;
50
+ ) => Gen_Dependencies_Config | 'all' | null | Promise<Gen_Dependencies_Config | 'all' | null>;
51
51
 
52
52
  export type Gen = Gen_Function | Gen_Config;
53
53
 
@@ -9,6 +9,7 @@ import {
9
9
  normalize_gen_config,
10
10
  validate_gen_module,
11
11
  type Gen_Context,
12
+ type Gen_Dependencies,
12
13
  type Gen_Dependencies_Config,
13
14
  } from './gen.ts';
14
15
  import {default_svelte_config} from './svelte_config.ts';
@@ -95,7 +96,7 @@ const resolve_gen_dependencies = async (
95
96
  return null;
96
97
  }
97
98
 
98
- let {dependencies} = gen_config;
99
+ let dependencies: Gen_Dependencies | null = gen_config.dependencies;
99
100
  if (typeof dependencies === 'function') {
100
101
  const gen_ctx: Gen_Context = {
101
102
  config,
@@ -111,8 +112,18 @@ const resolve_gen_dependencies = async (
111
112
  dependencies = await dependencies(gen_ctx);
112
113
  }
113
114
 
115
+ if (dependencies === null || dependencies === 'all') {
116
+ return dependencies;
117
+ }
118
+
119
+ // At this point, dependencies is either 'all' or Gen_Dependencies_Config
120
+ // For static dependencies, also normalize empty objects
121
+ if (!dependencies.patterns?.length && !dependencies.files?.length) {
122
+ return null;
123
+ }
124
+
114
125
  // Normalize file paths to absolute paths
115
- if (dependencies !== 'all' && dependencies.files) {
126
+ if (dependencies.files) {
116
127
  dependencies.files = dependencies.files.map((f) => resolve(f));
117
128
  }
118
129
 
@@ -91,7 +91,7 @@ export const gro_plugin_sveltekit_app = ({
91
91
 
92
92
  // `.well-known/src.json` and `.well-known/src/`
93
93
  const final_package_json = mapped_package_json ?? package_json;
94
- const src_json = create_src_json(final_package_json, undefined);
94
+ const src_json = create_src_json(final_package_json, undefined, log);
95
95
  if (well_known_src_json === undefined) {
96
96
  well_known_src_json = final_package_json.public; // eslint-disable-line no-param-reassign
97
97
  }
@@ -11,13 +11,13 @@ import type {Gen} from './gen.ts';
11
11
  * which mirrors `package.json` but in TypeScript,
12
12
  * allowing apps to import typesafe data from their own `package.json`.
13
13
  */
14
- export const gen: Gen = ({origin_path}) => {
14
+ export const gen: Gen = ({origin_path, log}) => {
15
15
  const package_json = load_package_json();
16
16
  // TODO this can error with bad json data, do we need to update the package.json here first?
17
17
  // similarly do this in other places too?
18
18
  // part of the problem is that the package_json actually has a dependency on each of its exports and their deps,
19
19
  // but only when they're added/removed right? see gro_plugin_gen for details
20
- const src_json = create_src_json(package_json, undefined);
20
+ const src_json = create_src_json(package_json, undefined, log);
21
21
 
22
22
  const is_this_belt = package_json.name === '@ryanatkn/belt'; // TODO more robust?
23
23
 
@@ -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.167.0',
8
+ version: '0.168.0',
9
9
  description: 'task runner and toolkit extending SvelteKit',
10
10
  motto: 'generate, run, optimize',
11
11
  glyph: '🌰',
@@ -69,8 +69,8 @@ export const package_json: Package_Json = {
69
69
  '@changesets/changelog-git': '^0.2.1',
70
70
  '@changesets/types': '^6.1.0',
71
71
  '@ryanatkn/eslint-config': '^0.8.0',
72
- '@ryanatkn/fuz': '^0.146.0',
73
- '@ryanatkn/moss': '^0.35.0',
72
+ '@ryanatkn/fuz': '^0.147.0',
73
+ '@ryanatkn/moss': '^0.36.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.167.0',
107
+ version: '0.168.0',
108
108
  modules: {
109
109
  '.': {
110
110
  path: 'index.ts',
@@ -271,10 +271,10 @@ export const src_json: Src_Json = {
271
271
  path: 'env.ts',
272
272
  declarations: [
273
273
  {name: 'load_env', kind: 'function'},
274
+ {name: 'load_from_env', kind: 'function'},
274
275
  {name: 'merge_envs', kind: 'function'},
275
276
  {name: 'is_private_env', kind: 'function'},
276
277
  {name: 'is_public_env', kind: 'function'},
277
- {name: 'load_from_env', kind: 'function'},
278
278
  ],
279
279
  },
280
280
  './esbuild_helpers.js': {
@@ -2,7 +2,7 @@ import {styleText as st} from 'node:util';
2
2
  import {print_log_label} from '@ryanatkn/belt/print.js';
3
3
  import {System_Logger} from '@ryanatkn/belt/log.js';
4
4
  import type {Timings} from '@ryanatkn/belt/timings.js';
5
- import z from 'zod';
5
+ import {z} from 'zod';
6
6
 
7
7
  import {parse_args, type Args} from './args.ts';
8
8
  import type {invoke_task as base_invoke_task} from './invoke_task.ts';
@@ -4,6 +4,7 @@ import {existsSync} from 'node:fs';
4
4
  import ts from 'typescript';
5
5
  import type {Package_Json, Package_Json_Exports} from '@ryanatkn/belt/package_json.js';
6
6
  import {Src_Json, Src_Modules} from '@ryanatkn/belt/src_json.js';
7
+ import type {Logger} from '@ryanatkn/belt/log.js';
7
8
 
8
9
  import {paths, replace_extension} from './paths.ts';
9
10
  import {parse_exports} from './parse_exports.ts';
@@ -12,11 +13,15 @@ import {search_fs} from './search_fs.ts';
12
13
 
13
14
  export type Map_Src_Json = (src_json: Src_Json) => Src_Json | null | Promise<Src_Json | null>;
14
15
 
15
- export const create_src_json = (package_json: Package_Json, lib_path?: string): Src_Json =>
16
+ export const create_src_json = (
17
+ package_json: Package_Json,
18
+ lib_path?: string,
19
+ log?: Logger,
20
+ ): Src_Json =>
16
21
  Src_Json.parse({
17
22
  name: package_json.name,
18
23
  version: package_json.version,
19
- modules: to_src_modules(package_json.exports, lib_path),
24
+ modules: to_src_modules(package_json.exports, lib_path, log),
20
25
  });
21
26
 
22
27
  export const serialize_src_json = (src_json: Src_Json): string => {
@@ -27,6 +32,7 @@ export const serialize_src_json = (src_json: Src_Json): string => {
27
32
  export const to_src_modules = (
28
33
  exports: Package_Json_Exports | undefined,
29
34
  lib_path = paths.lib,
35
+ log?: Logger,
30
36
  ): Src_Modules | undefined => {
31
37
  if (!exports) return;
32
38
 
@@ -58,7 +64,10 @@ export const to_src_modules = (
58
64
  for (const {export_key, file_path} of file_paths) {
59
65
  const relative_path = file_path.replace(ensure_end(lib_path, '/'), '');
60
66
 
61
- const declarations = parse_exports(file_path, program).map(({name, kind}) => ({name, kind}));
67
+ const declarations = parse_exports(file_path, program, undefined, log).map(({name, kind}) => ({
68
+ name,
69
+ kind,
70
+ }));
62
71
 
63
72
  result[export_key] = declarations.length
64
73
  ? {
@@ -1,10 +1,13 @@
1
- import {watch, type ChokidarOptions, type FSWatcher} from 'chokidar';
1
+ import {watch, type ChokidarOptions, type FSWatcher, type Matcher} from 'chokidar';
2
2
  import {relative} from 'node:path';
3
3
  import {statSync} from 'node:fs';
4
4
  import {create_deferred, type Deferred} from '@ryanatkn/belt/async.js';
5
+ import {EMPTY_OBJECT} from '@ryanatkn/belt/object.js';
5
6
 
6
7
  import type {Path_Filter} from './path.ts';
7
8
 
9
+ const TMP_FILE_PATTERN = /\.tmp\./;
10
+
8
11
  // TODO pretty hacky
9
12
 
10
13
  export interface Watch_Node_Fs {
@@ -30,6 +33,13 @@ export interface Watch_Dir_Options {
30
33
  * @default true
31
34
  */
32
35
  absolute?: boolean;
36
+ /**
37
+ * Pattern to ignore files, merged into `chokidar.ignored` if also provided.
38
+ * - `undefined` (default) ignores files matching `.tmp.` pattern
39
+ * - `null` sets no default ignore pattern
40
+ * - or some custom pattern
41
+ */
42
+ ignored?: Matcher | null;
33
43
  }
34
44
 
35
45
  /**
@@ -41,6 +51,7 @@ export const watch_dir = ({
41
51
  filter,
42
52
  absolute = true,
43
53
  chokidar,
54
+ ignored = TMP_FILE_PATTERN,
44
55
  }: Watch_Dir_Options): Watch_Node_Fs => {
45
56
  let watcher: FSWatcher | undefined;
46
57
  let initing: Deferred<void> | undefined;
@@ -49,7 +60,7 @@ export const watch_dir = ({
49
60
  init: async () => {
50
61
  if (initing) return initing.promise;
51
62
  initing = create_deferred();
52
- watcher = watch(dir, {...chokidar});
63
+ watcher = watch(dir, resolve_chokidar_options(chokidar, ignored));
53
64
  watcher.on('add', (path) => {
54
65
  const final_path = absolute ? path : relative(dir, path);
55
66
  if (filter && !filter(final_path, false)) return;
@@ -89,3 +100,17 @@ export const watch_dir = ({
89
100
  },
90
101
  };
91
102
  };
103
+
104
+ const resolve_chokidar_options = (
105
+ options: ChokidarOptions | undefined,
106
+ ignored: Matcher | null,
107
+ ): ChokidarOptions | undefined => {
108
+ if (ignored === null) return options;
109
+
110
+ const {ignored: i, ...rest} = options ?? EMPTY_OBJECT;
111
+
112
+ const resolved_ignored =
113
+ i === undefined ? ignored : Array.isArray(i) ? [...i, ignored] : [i, ignored];
114
+
115
+ return {...rest, ignored: resolved_ignored};
116
+ };