diff --git a/SPEC.md b/SPEC.md index 76d6b56..c9f5fab 100644 --- a/SPEC.md +++ b/SPEC.md @@ -14,11 +14,31 @@ The `type` field is either `file` or `dir`. A file object has the following fields. - `type`: String with value of `'file'`. - - `data`: TODO: Define structure for file content data. + - `data`: Array of `file-data`. - `size`: Integer. Cumulative size of `data`. The `type` field must be set to `file`. +### `file-data` + +File data is an Array. Each element is an Array with only 2 elements (Tuple). + + - 0: Array. Tuple containing two integers, the `start` and `length` offsets of the content. + - 0: Integer: start offset. + - 1: Integer: length of part(s). + - 1: Link. Either a `raw` link or a link to another node formatted as `file-data`. + +```javascript +[ + [ [0, 1024], Link ], + [ [1025, 1002], Link ] +] +``` + +Implementations are encouraged to use nested `file-data` array nodes through links for files +with many chunks in order to limit the size of the serialized node. No strict boundary is +set but it is typical to try and limit node size to less than one megabyte. + ## IPLD `dir` A directory object represents a directory.