No Plugins; Monolithic

    @ridi/comic-parser
    TypeScript icon, indicating that this package has built-in type declarations

    0.7.4-alpha.1 • Public • Published

    @ridi/comic-parser

    Common comic data parser for Ridibooks services

    NPM version Check codecov NPM total downloads

    Features

    • [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

    Install

    npm install @ridi/comic-parser

    Usage

    Basic:

    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:

    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:

    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

    API

    parse(parseOptions)

    Returns Promise<ComicBook> with:

    • ComicBook: Instance with image path, size, etc.

    Or throw exception.

    parseOptions: ?object


    readItem(item, readOptions)

    Returns string or Buffer in Promise with:

    • If readOptions.base64 is true:

      • string
    • Other:

      • Buffer

    or throw exception.

    item: Item

    readOptions: ?object


    readItems(items, readOptions)

    Returns string[] or Buffer[] in Promise with:

    • If readOptions.base64 is true:

      • string
    • Other:

      • Buffer

    or throw exception.

    items: Item[]

    readOptions: ?object


    unzip(unzipPath, overwrite)

    Returns Promise<boolean> with:

    • If result is true, unzip is successful or has already been unzipped.

    Or throw exception.

    unzipPath: string

    overwrite: boolean


    onProgress = callback(step, totalStep, action)

    Tells the progress of parser through callback.

    const { Action } = ComicParser; // PARSE, READ_ITEMS
    parser.onProgress = (step, totalStep, action) => {
      console.log(`[${action}] ${step} / ${totalStep}`);
    }

    Model

    ComicBook

    • items: Item[]
    • toRaw(): object

    Item

    • index: ?string
    • path: ?string
    • size: ?number
    • width: ?number
    • height: ?number
    • toRaw(): object

    Parse Options


    unzipPath: ?string

    If specified, unzip to that path.

    only using if input is Zip file.

    Default: undefined


    overwrite: boolean

    If true, overwrite to unzipPath when unzip.

    only using if unzipPath specified.

    Default: true


    ext: string[]

    File extension to allow when extracting lists.

    Default: ['jpg', 'jpeg', 'png', 'bmp', 'gif']


    parseImageSize: boolean|number

    If true, image size parse. (parse may be slower.)

    Default: false

    Read Options


    force: boolean

    If true, ignore any exceptions that occur within parser.

    Default: false


    base64: boolean

    If false, reads image into a buffer.

    Default: false

    License

    MIT

    Keywords

    none

    Install

    npm i @ridi/comic-parser

    DownloadsWeekly Downloads

    139

    Version

    0.7.4-alpha.1

    License

    MIT

    Unpacked Size

    23 kB

    Total Files

    15

    Last publish

    Collaborators

    • mando212
    • khinenw
    • davin.ahn
    • ridicorp
    • m0ai
    • limeburst
    • minq
    • ridi-junhee
    • hw.choi