Modules@robinpath/storage
storage

@robinpath/storage

0.1.1Node.jsPublic

Persistent key-value and file storage for workflow state

Storage

Persistent key-value storage (memory or file-backed) with TTL, counters, and file operations

Package: @robinpath/storage | Category: Infrastructure | Type: Utility

Authentication

No authentication required. All functions are available immediately.

Use Cases

Use the storage module when you need to:

  • Create a named key-value store (memory or file-backed) -- Use storage.create to perform this operation
  • Get a value by key -- Use storage.get to perform this operation
  • Check if a key exists -- Use storage.has to perform this operation
  • Remove a key -- Use storage.remove to perform this operation
  • List all keys, optionally filtered by pattern -- Use storage.keys to perform this operation

Quick Reference

FunctionDescriptionReturns
createCreate a named key-value store (memory or file-backed){name, type, size}
setSet a key-value pair with optional TTLTrue
getGet a value by keyStored value or default
hasCheck if a key existsTrue if key exists
removeRemove a keyTrue if removed
keysList all keys, optionally filtered by patternArray of key strings
valuesGet all key-value pairsArray of {key, value}
sizeGet number of entriesCount
clearRemove all entries{cleared: count}
incrementIncrement a numeric valueNew value
decrementDecrement a numeric valueNew value
getAllGet all data as a plain objectKey-value object
setManySet multiple key-value pairs at once{set: count}
destroyDestroy a store and delete its file if file-backedTrue if destroyed
saveFileSave content to a file on disk{path, size}
loadFileLoad a file from diskFile content or null
listFilesList files in a directoryArray of file info objects
deleteFileDelete a file from diskTrue if deleted

Functions

create

Create a named key-value store (memory or file-backed)

Module: storage | Returns: object -- {name, type, size}

storage.create "workflow-state" {"type": "file", "path": "./data/state.json"}
ParameterTypeRequiredDescription
namestringYesStore name
optionsobjectNo{type: 'memory'

set

Set a key-value pair with optional TTL

Module: storage | Returns: boolean -- True

storage.set "state" "lastRun" $timestamp
ParameterTypeRequiredDescription
storestringYesStore name
keystringYesKey
valueanyYesValue
ttlMsnumberNoTTL in ms (optional)

get

Get a value by key

Module: storage | Returns: any -- Stored value or default

storage.get "state" "lastRun"
ParameterTypeRequiredDescription
storestringYesStore name
keystringYesKey
defaultanyNoDefault if not found

has

Check if a key exists

Module: storage | Returns: boolean -- True if key exists

storage.has "state" "lastRun"
ParameterTypeRequiredDescription
storestringYesStore name
keystringYesKey

remove

Remove a key

Module: storage | Returns: boolean -- True if removed

storage.remove "state" "lastRun"
ParameterTypeRequiredDescription
storestringYesStore name
keystringYesKey

keys

List all keys, optionally filtered by pattern

Module: storage | Returns: array -- Array of key strings

storage.keys "state" "user:*"
ParameterTypeRequiredDescription
storestringYesStore name
patternstringNoGlob pattern (optional)

values

Get all key-value pairs

Module: storage | Returns: array -- Array of {key, value}

storage.values "state"
ParameterTypeRequiredDescription
storestringYesStore name

size

Get number of entries

Module: storage | Returns: number -- Count

storage.size "state"
ParameterTypeRequiredDescription
storestringYesStore name

clear

Remove all entries

Module: storage | Returns: object -- {cleared: count}

storage.clear "state"
ParameterTypeRequiredDescription
storestringYesStore name

increment

Increment a numeric value

Module: storage | Returns: number -- New value

storage.increment "state" "runCount"
ParameterTypeRequiredDescription
storestringYesStore name
keystringYesKey
amountnumberNoIncrement (default 1)

decrement

Decrement a numeric value

Module: storage | Returns: number -- New value

storage.decrement "state" "credits"
ParameterTypeRequiredDescription
storestringYesStore name
keystringYesKey
amountnumberNoDecrement (default 1)

getAll

Get all data as a plain object

Module: storage | Returns: object -- Key-value object

storage.getAll "state"
ParameterTypeRequiredDescription
storestringYesStore name

setMany

Set multiple key-value pairs at once

Module: storage | Returns: object -- {set: count}

storage.setMany "state" {"user": "Alice", "role": "admin"}
ParameterTypeRequiredDescription
storestringYesStore name
dataobjectYesKey-value pairs
ttlMsnumberNoOptional TTL for all

destroy

Destroy a store and delete its file if file-backed

Module: storage | Returns: boolean -- True if destroyed

storage.destroy "state"
ParameterTypeRequiredDescription
storestringYesStore name

saveFile

Save content to a file on disk

Module: storage | Returns: object -- {path, size}

storage.saveFile "./output" "report.json" $data
ParameterTypeRequiredDescription
dirstringYesDirectory path
filenamestringYesFile name
contentanyYesString or JSON content

loadFile

Load a file from disk

Module: storage | Returns: any -- File content or null

storage.loadFile "./data/config.json" true
ParameterTypeRequiredDescription
pathstringYesFile path
asJsonbooleanNoParse as JSON (default false)

listFiles

List files in a directory

Module: storage | Returns: array -- Array of file info objects

storage.listFiles "./output"
ParameterTypeRequiredDescription
dirstringYesDirectory path

deleteFile

Delete a file from disk

Module: storage | Returns: boolean -- True if deleted

storage.deleteFile "./output/old.json"
ParameterTypeRequiredDescription
pathstringYesFile path

Error Handling

All functions throw on failure. Common errors:

ErrorCause
Directory and filename are requiredCheck the error message for details
Store "..." not found. Create it first.Check the error message for details
@desc "Create and validate result"
do
  set $result as storage.create "workflow-state" {"type": "file", "path": "./data/state.json"}
  if $result != null
    print "Success"
  else
    print "No result"
  end
enddo

Recipes

1. List and iterate

Retrieve all items and loop through them.

@desc "Get and iterate results"
do
  set $result as storage.get "state" "lastRun"
  each $item in $result
    print $item
  end
enddo

2. Create a new item with create

Create a new resource and capture the result.

set $result as storage.create "workflow-state" {"type": "file", "path": "./data/state.json"}
print "Created: " + $result

3. Check before creating

List existing items and only create if needed.

@desc "Get and create"
do
  set $existing as storage.get "state" "lastRun"
  if $existing == null
    storage.create "workflow-state" {"type": "file", "path": "./data/state.json"}
    print "Item created"
  else
    print "Item already exists"
  end
enddo

4. Multi-step Storage workflow

Chain multiple storage operations together.

@desc "Create, get, and more"
do
  set $r_create as storage.create "workflow-state" {"type": "file", "path": "./data/state.json"}
  set $r_get as storage.get "state" "lastRun"
  set $r_has as storage.has "state" "lastRun"
  print "All operations complete"
enddo

5. Safe create with validation

Check results before proceeding.

@desc "Create and validate result"
do
  set $result as storage.create "workflow-state" {"type": "file", "path": "./data/state.json"}
  if $result != null
    print "Success: " + $result
  else
    print "Operation returned no data"
  end
enddo

Related Modules

  • json -- JSON module for complementary functionality

Versions (1)

VersionTagPublished
0.1.1latest1 months ago
Install
$ robinpath add @robinpath/storage

Collaborators

Dumitru Balaban
Dumitru Balaban
@dumitru
View all @robinpath modules
Version0.1.1
LicenseMIT
Unpacked Size6.5 KB
Versions1
Weekly Downloads21
Total Downloads21
Stars0
Last Publish1 months ago
Created1 months ago

Category

devops