diff --git a/dist/index.js b/dist/index.js
index ae03eff..a2e8065 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -94754,6 +94754,17 @@ function mungeDiagnosticEndpoint(inputUrl) {
 // EXTERNAL MODULE: external "fs"
 var external_fs_ = __nccwpck_require__(7147);
 ;// CONCATENATED MODULE: ./dist/index.js
+// src/inputs.ts
+function determineFlakeDirectories(input) {
+  const sepChar = /\s+/;
+  const trimmed = input.trim();
+  if (trimmed === "") {
+    return [];
+  } else {
+    return trimmed.split(sepChar).map((s) => s.trim());
+  }
+}
+
 // src/nix.ts
 function makeNixCommandArgs(nixOptions, flakeInputs, commitMessage) {
   const flakeInputFlags = flakeInputs.flatMap((input) => [
@@ -94781,6 +94792,12 @@ var UpdateFlakeLockAction = class extends DetSysAction {
     this.flakeInputs = inputs_exports.getArrayOfStrings("inputs", "space");
     this.nixOptions = inputs_exports.getArrayOfStrings("nix-options", "space");
     this.pathToFlakeDir = inputs_exports.getStringOrNull("path-to-flake-dir");
+    const flakeDirsInput = inputs_exports.getStringOrNull("flake-dirs");
+    if (flakeDirsInput !== null) {
+      this.flakeDirs = determineFlakeDirectories(flakeDirsInput);
+    } else {
+      this.flakeDirs = null;
+    }
     this.validateInputs();
   }
   async main() {
@@ -94789,14 +94806,6 @@ var UpdateFlakeLockAction = class extends DetSysAction {
   // No post phase
   async post() {
   }
-  get flakeDirs() {
-    const flakeDirs = inputs_exports.getStringOrNull("flake-dirs");
-    if (flakeDirs !== null) {
-      return flakeDirs.trim().split(" ");
-    } else {
-      return null;
-    }
-  }
   async updateFlakeLock() {
     if (this.flakeDirs !== null && this.flakeDirs.length > 0) {
       core.debug(
diff --git a/dist/index.js.map b/dist/index.js.map
index ae8d4d9..b3b2c4d 100644
--- a/dist/index.js.map
+++ b/dist/index.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/nix.ts","../src/index.ts"],"sourcesContent":["// Build the Nix args out of inputs from the Actions environment\nexport function makeNixCommandArgs(\n  nixOptions: string[],\n  flakeInputs: string[],\n  commitMessage: string,\n): string[] {\n  const flakeInputFlags = flakeInputs.flatMap((input) => [\n    \"--update-input\",\n    input,\n  ]);\n\n  const updateLockMechanism = flakeInputFlags.length === 0 ? \"update\" : \"lock\";\n\n  return nixOptions\n    .concat([\"flake\", updateLockMechanism])\n    .concat(flakeInputFlags)\n    .concat([\"--commit-lock-file\", \"--commit-lockfile-summary\", commitMessage]);\n}\n","import { makeNixCommandArgs } from \"./nix.js\";\nimport * as actionsCore from \"@actions/core\";\nimport * as actionsExec from \"@actions/exec\";\nimport { DetSysAction, inputs } from \"detsys-ts\";\nimport * as fs from \"fs\";\n\nconst EVENT_EXECUTION_FAILURE = \"execution_failure\";\n\nclass UpdateFlakeLockAction extends DetSysAction {\n  private commitMessage: string;\n  private nixOptions: string[];\n  private flakeInputs: string[];\n  private pathToFlakeDir: string | null;\n\n  constructor() {\n    super({\n      name: \"update-flake-lock\",\n      fetchStyle: \"universal\",\n      requireNix: \"fail\",\n    });\n\n    this.commitMessage = inputs.getString(\"commit-msg\");\n    this.flakeInputs = inputs.getArrayOfStrings(\"inputs\", \"space\");\n    this.nixOptions = inputs.getArrayOfStrings(\"nix-options\", \"space\");\n    this.pathToFlakeDir = inputs.getStringOrNull(\"path-to-flake-dir\");\n\n    this.validateInputs();\n  }\n\n  async main(): Promise<void> {\n    await this.updateFlakeLock();\n  }\n\n  // No post phase\n  async post(): Promise<void> {}\n\n  private get flakeDirs(): string[] | null {\n    const flakeDirs = inputs.getStringOrNull(\"flake-dirs\");\n    if (flakeDirs !== null) {\n      return flakeDirs.trim().split(\" \");\n    } else {\n      return null;\n    }\n  }\n\n  async updateFlakeLock(): Promise<void> {\n    if (this.flakeDirs !== null && this.flakeDirs.length > 0) {\n      actionsCore.debug(\n        `Running flake lock update in multiple directories: ${this.flakeDirs.map((dir) => `\\`${dir}\\``).join(\" \")}`,\n      );\n\n      for (const directory of this.flakeDirs) {\n        await this.updateFlakeInDirectory(directory);\n      }\n    } else {\n      // Set directory to root if not specified\n      const flakeDir = this.pathToFlakeDir ?? \".\";\n      await this.updateFlakeInDirectory(flakeDir);\n    }\n  }\n\n  private async updateFlakeInDirectory(flakeDir: string): Promise<void> {\n    this.ensureDirectoryExists(flakeDir);\n    this.ensureDirectoryIsFlake(flakeDir);\n\n    actionsCore.debug(`Running flake lock update in directory \\`${flakeDir}\\``);\n\n    // Nix command of this form:\n    // nix ${maybe nix options} flake ${\"update\" or \"lock\"} ${maybe --update-input flags} --commit-lock-file --commit-lockfile-summary ${commit message}\n    // Example commands:\n    // nix --extra-substituters https://example.com flake lock --update-input nixpkgs --commit-lock-file --commit-lockfile-summary \"updated flake.lock\"\n    // nix flake update --commit-lock-file --commit-lockfile-summary \"updated flake.lock\"\n    const nixCommandArgs: string[] = makeNixCommandArgs(\n      this.nixOptions,\n      this.flakeInputs,\n      this.commitMessage,\n    );\n\n    actionsCore.debug(\n      JSON.stringify({\n        directory: flakeDir,\n        options: this.nixOptions,\n        inputs: this.flakeInputs,\n        message: this.commitMessage,\n        args: nixCommandArgs,\n      }),\n    );\n\n    const execOptions: actionsExec.ExecOptions = {\n      cwd: flakeDir,\n    };\n\n    const exitCode = await actionsExec.exec(\"nix\", nixCommandArgs, execOptions);\n\n    if (exitCode !== 0) {\n      this.recordEvent(EVENT_EXECUTION_FAILURE, {\n        exitCode,\n      });\n      actionsCore.setFailed(\n        `non-zero exit code of ${exitCode} detected while updating directory \\`${flakeDir}\\``,\n      );\n    } else {\n      actionsCore.info(\n        `flake.lock file in \\`${flakeDir}\\` was successfully updated`,\n      );\n    }\n  }\n\n  private validateInputs(): void {\n    // Ensure that either `path-to-flake-dir` or `flake-dirs` is set to a meaningful value but not both\n    if (\n      this.flakeDirs !== null &&\n      this.flakeDirs.length > 0 &&\n      this.pathToFlakeDir !== null &&\n      this.pathToFlakeDir !== \"\"\n    ) {\n      throw new Error(\n        \"Both `path-to-flake-dir` and `flake-dirs` are set, whereas only one can be\",\n      );\n    }\n\n    // Ensure that `flake-dirs` isn't an empty array if set\n    if (this.flakeDirs !== null && this.flakeDirs.length === 0) {\n      throw new Error(\n        \"The `flake-dirs` input is set to an empty array; it must contain at least one directory\",\n      );\n    }\n\n    // Ensure that both `flake-dirs` and `inputs` aren't set at the same time\n    if (\n      this.flakeDirs !== null &&\n      this.flakeDirs.length > 0 &&\n      this.flakeInputs.length > 0\n    ) {\n      throw new Error(\n        `You've set both \\`flake-dirs\\` and \\`inputs\\` but you can only set one`,\n      );\n    }\n  }\n\n  private ensureDirectoryExists(flakeDir: string): void {\n    actionsCore.debug(`Checking that flake directory \\`${flakeDir}\\` exists`);\n\n    // Ensure the directory exists\n    fs.access(flakeDir, fs.constants.F_OK, (err) => {\n      if (err !== null) {\n        throw new Error(`Directory \\`${flakeDir}\\` doesn't exist`);\n      } else {\n        actionsCore.debug(`Flake directory \\`${flakeDir}\\` exists`);\n      }\n    });\n  }\n\n  private ensureDirectoryIsFlake(flakeDir: string): void {\n    const flakeDotNix = `${flakeDir}/flake.nix`;\n    if (!fs.existsSync(flakeDotNix)) {\n      throw new Error(\n        `Directory \\`${flakeDir}\\` is not a valid flake as it doesn't contain a \\`flake.nix\\``,\n      );\n    } else {\n      actionsCore.debug(`Directory \\`${flakeDir}\\` is a valid flake`);\n    }\n  }\n}\n\nfunction main(): void {\n  new UpdateFlakeLockAction().execute();\n}\n\nmain();\n"],"mappings":"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","names":[]}
\ No newline at end of file
+{"version":3,"sources":["../src/inputs.ts","../src/nix.ts","../src/index.ts"],"sourcesContent":["// Helper function for nullable input fields into an array of strings\nexport function determineFlakeDirectories(input: string): string[] {\n  const sepChar = /\\s+/;\n  const trimmed = input.trim();\n  if (trimmed === \"\") {\n    return [];\n  } else {\n    return trimmed.split(sepChar).map((s: string) => s.trim());\n  }\n}\n","// Build the Nix args out of inputs from the Actions environment\nexport function makeNixCommandArgs(\n  nixOptions: string[],\n  flakeInputs: string[],\n  commitMessage: string,\n): string[] {\n  const flakeInputFlags = flakeInputs.flatMap((input) => [\n    \"--update-input\",\n    input,\n  ]);\n\n  const updateLockMechanism = flakeInputFlags.length === 0 ? \"update\" : \"lock\";\n\n  return nixOptions\n    .concat([\"flake\", updateLockMechanism])\n    .concat(flakeInputFlags)\n    .concat([\"--commit-lock-file\", \"--commit-lockfile-summary\", commitMessage]);\n}\n","import { determineFlakeDirectories } from \"./inputs.js\";\nimport { makeNixCommandArgs } from \"./nix.js\";\nimport * as actionsCore from \"@actions/core\";\nimport * as actionsExec from \"@actions/exec\";\nimport { DetSysAction, inputs } from \"detsys-ts\";\nimport * as fs from \"fs\";\n\nconst EVENT_EXECUTION_FAILURE = \"execution_failure\";\n\nclass UpdateFlakeLockAction extends DetSysAction {\n  private commitMessage: string;\n  private nixOptions: string[];\n  private flakeInputs: string[];\n  private pathToFlakeDir: string | null;\n  private flakeDirs: string[] | null;\n\n  constructor() {\n    super({\n      name: \"update-flake-lock\",\n      fetchStyle: \"universal\",\n      requireNix: \"fail\",\n    });\n\n    this.commitMessage = inputs.getString(\"commit-msg\");\n    this.flakeInputs = inputs.getArrayOfStrings(\"inputs\", \"space\");\n    this.nixOptions = inputs.getArrayOfStrings(\"nix-options\", \"space\");\n    this.pathToFlakeDir = inputs.getStringOrNull(\"path-to-flake-dir\");\n\n    const flakeDirsInput = inputs.getStringOrNull(\"flake-dirs\");\n    if (flakeDirsInput !== null) {\n      this.flakeDirs = determineFlakeDirectories(flakeDirsInput);\n    } else {\n      this.flakeDirs = null;\n    }\n\n    this.validateInputs();\n  }\n\n  async main(): Promise<void> {\n    await this.updateFlakeLock();\n  }\n\n  // No post phase\n  async post(): Promise<void> {}\n\n  async updateFlakeLock(): Promise<void> {\n    if (this.flakeDirs !== null && this.flakeDirs.length > 0) {\n      actionsCore.debug(\n        `Running flake lock update in multiple directories: ${this.flakeDirs.map((dir) => `\\`${dir}\\``).join(\" \")}`,\n      );\n\n      for (const directory of this.flakeDirs) {\n        await this.updateFlakeInDirectory(directory);\n      }\n    } else {\n      // Set directory to root if not specified\n      const flakeDir = this.pathToFlakeDir ?? \".\";\n      await this.updateFlakeInDirectory(flakeDir);\n    }\n  }\n\n  private async updateFlakeInDirectory(flakeDir: string): Promise<void> {\n    this.ensureDirectoryExists(flakeDir);\n    this.ensureDirectoryIsFlake(flakeDir);\n\n    actionsCore.debug(`Running flake lock update in directory \\`${flakeDir}\\``);\n\n    // Nix command of this form:\n    // nix ${maybe nix options} flake ${\"update\" or \"lock\"} ${maybe --update-input flags} --commit-lock-file --commit-lockfile-summary ${commit message}\n    // Example commands:\n    // nix --extra-substituters https://example.com flake lock --update-input nixpkgs --commit-lock-file --commit-lockfile-summary \"updated flake.lock\"\n    // nix flake update --commit-lock-file --commit-lockfile-summary \"updated flake.lock\"\n    const nixCommandArgs: string[] = makeNixCommandArgs(\n      this.nixOptions,\n      this.flakeInputs,\n      this.commitMessage,\n    );\n\n    actionsCore.debug(\n      JSON.stringify({\n        directory: flakeDir,\n        options: this.nixOptions,\n        inputs: this.flakeInputs,\n        message: this.commitMessage,\n        args: nixCommandArgs,\n      }),\n    );\n\n    const execOptions: actionsExec.ExecOptions = {\n      cwd: flakeDir,\n    };\n\n    const exitCode = await actionsExec.exec(\"nix\", nixCommandArgs, execOptions);\n\n    if (exitCode !== 0) {\n      this.recordEvent(EVENT_EXECUTION_FAILURE, {\n        exitCode,\n      });\n      actionsCore.setFailed(\n        `non-zero exit code of ${exitCode} detected while updating directory \\`${flakeDir}\\``,\n      );\n    } else {\n      actionsCore.info(\n        `flake.lock file in \\`${flakeDir}\\` was successfully updated`,\n      );\n    }\n  }\n\n  private validateInputs(): void {\n    // Ensure that either `path-to-flake-dir` or `flake-dirs` is set to a meaningful value but not both\n    if (\n      this.flakeDirs !== null &&\n      this.flakeDirs.length > 0 &&\n      this.pathToFlakeDir !== null &&\n      this.pathToFlakeDir !== \"\"\n    ) {\n      throw new Error(\n        \"Both `path-to-flake-dir` and `flake-dirs` are set, whereas only one can be\",\n      );\n    }\n\n    // Ensure that `flake-dirs` isn't an empty array if set\n    if (this.flakeDirs !== null && this.flakeDirs.length === 0) {\n      throw new Error(\n        \"The `flake-dirs` input is set to an empty array; it must contain at least one directory\",\n      );\n    }\n\n    // Ensure that both `flake-dirs` and `inputs` aren't set at the same time\n    if (\n      this.flakeDirs !== null &&\n      this.flakeDirs.length > 0 &&\n      this.flakeInputs.length > 0\n    ) {\n      throw new Error(\n        `You've set both \\`flake-dirs\\` and \\`inputs\\` but you can only set one`,\n      );\n    }\n  }\n\n  private ensureDirectoryExists(flakeDir: string): void {\n    actionsCore.debug(`Checking that flake directory \\`${flakeDir}\\` exists`);\n\n    // Ensure the directory exists\n    fs.access(flakeDir, fs.constants.F_OK, (err) => {\n      if (err !== null) {\n        throw new Error(`Directory \\`${flakeDir}\\` doesn't exist`);\n      } else {\n        actionsCore.debug(`Flake directory \\`${flakeDir}\\` exists`);\n      }\n    });\n  }\n\n  private ensureDirectoryIsFlake(flakeDir: string): void {\n    const flakeDotNix = `${flakeDir}/flake.nix`;\n    if (!fs.existsSync(flakeDotNix)) {\n      throw new Error(\n        `Directory \\`${flakeDir}\\` is not a valid flake as it doesn't contain a \\`flake.nix\\``,\n      );\n    } else {\n      actionsCore.debug(`Directory \\`${flakeDir}\\` is a valid flake`);\n    }\n  }\n}\n\nfunction main(): void {\n  new UpdateFlakeLockAction().execute();\n}\n\nmain();\n"],"mappings":";AACO,SAAS,0BAA0B,OAAyB;AACjE,QAAM,UAAU;AAChB,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,YAAY,IAAI;AAClB,WAAO,CAAC;AAAA,EACV,OAAO;AACL,WAAO,QAAQ,MAAM,OAAO,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC;AAAA,EAC3D;AACF;;;ACRO,SAAS,mBACd,YACA,aACA,eACU;AACV,QAAM,kBAAkB,YAAY,QAAQ,CAAC,UAAU;AAAA,IACrD;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,sBAAsB,gBAAgB,WAAW,IAAI,WAAW;AAEtE,SAAO,WACJ,OAAO,CAAC,SAAS,mBAAmB,CAAC,EACrC,OAAO,eAAe,EACtB,OAAO,CAAC,sBAAsB,6BAA6B,aAAa,CAAC;AAC9E;;;ACfA,YAAY,iBAAiB;AAC7B,YAAY,iBAAiB;AAC7B,SAAS,cAAc,cAAc;AACrC,YAAY,QAAQ;AAEpB,IAAM,0BAA0B;AAEhC,IAAM,wBAAN,cAAoC,aAAa;AAAA,EAO/C,cAAc;AACZ,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,YAAY;AAAA,IACd,CAAC;AAED,SAAK,gBAAgB,OAAO,UAAU,YAAY;AAClD,SAAK,cAAc,OAAO,kBAAkB,UAAU,OAAO;AAC7D,SAAK,aAAa,OAAO,kBAAkB,eAAe,OAAO;AACjE,SAAK,iBAAiB,OAAO,gBAAgB,mBAAmB;AAEhE,UAAM,iBAAiB,OAAO,gBAAgB,YAAY;AAC1D,QAAI,mBAAmB,MAAM;AAC3B,WAAK,YAAY,0BAA0B,cAAc;AAAA,IAC3D,OAAO;AACL,WAAK,YAAY;AAAA,IACnB;AAEA,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,MAAM,OAAsB;AAC1B,UAAM,KAAK,gBAAgB;AAAA,EAC7B;AAAA;AAAA,EAGA,MAAM,OAAsB;AAAA,EAAC;AAAA,EAE7B,MAAM,kBAAiC;AACrC,QAAI,KAAK,cAAc,QAAQ,KAAK,UAAU,SAAS,GAAG;AACxD,MAAY;AAAA,QACV,sDAAsD,KAAK,UAAU,IAAI,CAAC,QAAQ,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,CAAC;AAAA,MAC3G;AAEA,iBAAW,aAAa,KAAK,WAAW;AACtC,cAAM,KAAK,uBAAuB,SAAS;AAAA,MAC7C;AAAA,IACF,OAAO;AAEL,YAAM,WAAW,KAAK,kBAAkB;AACxC,YAAM,KAAK,uBAAuB,QAAQ;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,MAAc,uBAAuB,UAAiC;AACpE,SAAK,sBAAsB,QAAQ;AACnC,SAAK,uBAAuB,QAAQ;AAEpC,IAAY,kBAAM,4CAA4C,QAAQ,IAAI;AAO1E,UAAM,iBAA2B;AAAA,MAC/B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAEA,IAAY;AAAA,MACV,KAAK,UAAU;AAAA,QACb,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,QAAQ,KAAK;AAAA,QACb,SAAS,KAAK;AAAA,QACd,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAEA,UAAM,cAAuC;AAAA,MAC3C,KAAK;AAAA,IACP;AAEA,UAAM,WAAW,MAAkB,iBAAK,OAAO,gBAAgB,WAAW;AAE1E,QAAI,aAAa,GAAG;AAClB,WAAK,YAAY,yBAAyB;AAAA,QACxC;AAAA,MACF,CAAC;AACD,MAAY;AAAA,QACV,yBAAyB,QAAQ,wCAAwC,QAAQ;AAAA,MACnF;AAAA,IACF,OAAO;AACL,MAAY;AAAA,QACV,wBAAwB,QAAQ;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,iBAAuB;AAE7B,QACE,KAAK,cAAc,QACnB,KAAK,UAAU,SAAS,KACxB,KAAK,mBAAmB,QACxB,KAAK,mBAAmB,IACxB;AACA,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAGA,QAAI,KAAK,cAAc,QAAQ,KAAK,UAAU,WAAW,GAAG;AAC1D,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAGA,QACE,KAAK,cAAc,QACnB,KAAK,UAAU,SAAS,KACxB,KAAK,YAAY,SAAS,GAC1B;AACA,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,sBAAsB,UAAwB;AACpD,IAAY,kBAAM,mCAAmC,QAAQ,WAAW;AAGxE,IAAG,UAAO,UAAa,aAAU,MAAM,CAAC,QAAQ;AAC9C,UAAI,QAAQ,MAAM;AAChB,cAAM,IAAI,MAAM,eAAe,QAAQ,kBAAkB;AAAA,MAC3D,OAAO;AACL,QAAY,kBAAM,qBAAqB,QAAQ,WAAW;AAAA,MAC5D;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,uBAAuB,UAAwB;AACrD,UAAM,cAAc,GAAG,QAAQ;AAC/B,QAAI,CAAI,cAAW,WAAW,GAAG;AAC/B,YAAM,IAAI;AAAA,QACR,eAAe,QAAQ;AAAA,MACzB;AAAA,IACF,OAAO;AACL,MAAY,kBAAM,eAAe,QAAQ,qBAAqB;AAAA,IAChE;AAAA,EACF;AACF;AAEA,SAAS,OAAa;AACpB,MAAI,sBAAsB,EAAE,QAAQ;AACtC;AAEA,KAAK;","names":[]}
\ No newline at end of file
diff --git a/package.json b/package.json
index b88edca..cc689cf 100644
--- a/package.json
+++ b/package.json
@@ -12,6 +12,7 @@
     "lint": "eslint src/**/*.ts --ignore-pattern *.test.ts",
     "package": "ncc build",
     "test": "vitest --watch false",
+    "test-dev": "vitest",
     "all": "pnpm run format && pnpm run lint && pnpm run build && pnpm run package"
   },
   "repository": {
diff --git a/src/index.ts b/src/index.ts
index deef502..cacffc1 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,3 +1,4 @@
+import { determineFlakeDirectories } from "./inputs.js";
 import { makeNixCommandArgs } from "./nix.js";
 import * as actionsCore from "@actions/core";
 import * as actionsExec from "@actions/exec";
@@ -11,6 +12,7 @@ class UpdateFlakeLockAction extends DetSysAction {
   private nixOptions: string[];
   private flakeInputs: string[];
   private pathToFlakeDir: string | null;
+  private flakeDirs: string[] | null;
 
   constructor() {
     super({
@@ -24,6 +26,13 @@ class UpdateFlakeLockAction extends DetSysAction {
     this.nixOptions = inputs.getArrayOfStrings("nix-options", "space");
     this.pathToFlakeDir = inputs.getStringOrNull("path-to-flake-dir");
 
+    const flakeDirsInput = inputs.getStringOrNull("flake-dirs");
+    if (flakeDirsInput !== null) {
+      this.flakeDirs = determineFlakeDirectories(flakeDirsInput);
+    } else {
+      this.flakeDirs = null;
+    }
+
     this.validateInputs();
   }
 
@@ -34,15 +43,6 @@ class UpdateFlakeLockAction extends DetSysAction {
   // No post phase
   async post(): Promise<void> {}
 
-  private get flakeDirs(): string[] | null {
-    const flakeDirs = inputs.getStringOrNull("flake-dirs");
-    if (flakeDirs !== null) {
-      return flakeDirs.trim().split(" ");
-    } else {
-      return null;
-    }
-  }
-
   async updateFlakeLock(): Promise<void> {
     if (this.flakeDirs !== null && this.flakeDirs.length > 0) {
       actionsCore.debug(
diff --git a/src/inputs.ts b/src/inputs.ts
new file mode 100644
index 0000000..1b965fc
--- /dev/null
+++ b/src/inputs.ts
@@ -0,0 +1,10 @@
+// Helper function for nullable input fields into an array of strings
+export function determineFlakeDirectories(input: string): string[] {
+  const sepChar = /\s+/;
+  const trimmed = input.trim();
+  if (trimmed === "") {
+    return [];
+  } else {
+    return trimmed.split(sepChar).map((s: string) => s.trim());
+  }
+}
diff --git a/src/nix.test.ts b/src/update-flake-lock.test.ts
similarity index 68%
rename from src/nix.test.ts
rename to src/update-flake-lock.test.ts
index becd582..a5aeaf5 100644
--- a/src/nix.test.ts
+++ b/src/update-flake-lock.test.ts
@@ -1,16 +1,17 @@
+import { determineFlakeDirectories } from "./inputs.js";
 import { makeNixCommandArgs } from "./nix.js";
 import { expect, test } from "vitest";
 
-type TestCase = {
-  inputs: {
-    nixOptions: string[];
-    flakeInputs: string[];
-    commitMessage: string;
-  };
-  expected: string[];
-};
-
 test("Nix command arguments", () => {
+  type TestCase = {
+    inputs: {
+      nixOptions: string[];
+      flakeInputs: string[];
+      commitMessage: string;
+    };
+    expected: string[];
+  };
+
   const testCases: TestCase[] = [
     {
       inputs: {
@@ -72,3 +73,23 @@ test("Nix command arguments", () => {
     expect(args).toStrictEqual(expected);
   });
 });
+
+test("Flake directory parsing", () => {
+  type TestCase = {
+    input: string;
+    outputs: string[];
+  };
+
+  const testCases: TestCase[] = [
+    { input: "", outputs: [] },
+    { input: "one two three", outputs: ["one", "two", "three"] },
+    {
+      input: `    one two     three    `,
+      outputs: ["one", "two", "three"],
+    },
+  ];
+
+  testCases.forEach(({ input, outputs }) => {
+    expect(determineFlakeDirectories(input)).toStrictEqual(outputs);
+  });
+});