Common comic data parser for Ridibooks services
npm install @ridi/comic-parser> Common comic data parser for Ridibooks services




- [x] Single structure parsing
- [ ] Nested structure parsing
- [x] Unzip zip file when parsing with options
- [x] Read files
- [x] Read image in base64 encoding
- [x] Encrypt and decrypt function when parsing or reading or unzipping
- [ ] Debug mode
- [ ] Environment
- [x] Node
- [ ] CLI
- [ ] Browser
- [ ] Online demo
``bash`
npm install @ridi/comic-parser
Basic:
`js
import { ComicParser } from '@ridi/comic-parser';
// or const { ComicParser } = require('@ridi/comic-parser');
const parser = new ComicParser('./foo/bar.zip' or './unzippedPath');
parser.parse(/ { parseOptions } /).then((book) => {
parser.readItems(items/, { readOptions } /).then((results) => {
...
});
...
});
`
with AesCryptor:
`js
import { CryptoProvider, AesCryptor } from '@ridi/comic-parser';
// or const { CryptoProvider, AesCryptor } = require('@ridi/comic-parser');
const { Purpose } = CryptoProvider;
const { Mode, Padding } = AesCryptor;
class ContentCryptoProvider extends CryptoProvider {
constructor(key) {
super();
this.cryptor = new AesCryptor(Mode.ECB, { key });
}
getCryptor(filePath, purpose) {
return this.cryptor;
}
// If use as follows:
// const provider = new ContentCryptoProvider(...);
// const parser = new ComicParser('encrypted.zip', provider);
// const book = await parser.parse({ unzipPath: ... });
// const firstImage = await parser.readItem(book.items[0]);
//
// It will be called as follows:
// 1. run(data, 'encrypted.zip', Purpose.READ_IN_DIR)
// 2. run(data, '0001.jpg', Purpose.READ_IN_ZIP)
// ...
// 4. run(data, '0001.jpg', Purpose.WRITE)
// ...
// 5. run(data, '0001.jpg', Purpose.READ_IN_DIR)
//
run(data, filePath, purpose) {
const cryptor = this.getCryptor(filePath, purpose);
const padding = Padding.AUTO;
if (purpose === Purpose.READ_IN_DIR) {
return cryptor.decrypt(data, { padding });
} else if (purpose === Purpose.WRITE) {
return cryptor.encrypt(data, { padding });
}
return data;
}
}
const cryptoProvider = new ContentCryptoProvider(key);
const parser = new ComicParser('./encrypted.zip' or './unzippedPath', cryptoProvider);
`
Log level setting:
`js`
import { LogLevel, ... } from '@ridi/comic-parser';
const parser = new ComicParser(/ path /, / cryptoProvider /, / logLevel /)
// or const parser = new ComicParser(/ path /, / logLevel /)
parser.logger.logLevel = LogLevel.VERBOSE; // SILENT, ERROR, WARN(default), INFO, DEBUG, VERBOSE
Returns Promise with:
- ComicBook: Instance with image path, size, etc.
Or throw exception.
#### parseOptions: ?object
---
Returns string or Buffer in Promise with:
- If readOptions.base64 is true:
- string
- Other:
- Buffer
or throw exception.
#### item: Item
#### readOptions: ?object
---
Returns string[] or Buffer[] in Promise with:
- If readOptions.base64 is true:
- string
- Other:
- Buffer
or throw exception.
#### items: [Item\[\]](#item)
#### readOptions: ?object
---
Returns Promise with:
- If result is true, unzip is successful or has already been unzipped.
Or throw exception.
#### unzipPath: string
#### overwrite: boolean
---
Tells the progress of parser through callback.
`js[${action}] ${step} / ${totalStep}
const { Action } = ComicParser; // PARSE, READ_ITEMS
parser.onProgress = (step, totalStep, action) => {
console.log();`
}
- items: Item[]
- toRaw(): object
- index: ?string
- path: ?string
- size: ?number
- width: ?number
- height: ?number
- toRaw(): object
* unzipPath
* overwrite
* ext
* parseImageSize
---
If specified, unzip to that path.
> only using if input is Zip file.
Default: undefined
---
If true, overwrite to unzipPath when unzip.
> only using if unzipPath specified.
Default: true
---
File extension to allow when extracting lists.
Default: ['jpg', 'jpeg', 'png', 'bmp', 'gif']
---
If true, image size parse. (parse may be slower.)
Default: false
---
If true, ignore any exceptions that occur within parser.
Default: false
---
If false, reads image into a buffer.
Default: false`