2.2.0 • Published 10 months ago

tcadif v2.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

tcadif

Read and write data in Amateur Data Interchange Format (ADIF) with node.js.

Examples

Synchronous ADIF Reading and Writing

Reading

To parse ADIF text, simply call ADIF.parse(text). The result is an ADIF instance. To transform it into a plain old JavaScript object, call .toObject();

const { ADIF } = require('tcadif');
const fs = require('fs');
const path = require('path');

const input = fs.readFileSync(path.join(__dirname, 'sample.adi')).toString();

const adif = ADIF.parse(input);

console.log(adif.toObject());

Writing

To write ADIF text, simply instantiate an ADIF instance with an optional header and qsos. Then call .stringify().

const { ADIF } = require('tcadif');
const fs = require('fs');
const path = require('path');

const input = {
    qsos: [
        {
            BAND: '20m',
            CALL: 'KG9JP',
            FREQ: '14',
            MODE: 'SSB',
            NOTES: 'POTA K-4293 WI',
            QSL_RCVD: 'N',
            QSL_SENT: 'N',
            QSO_DATE: '20230217',
            QSO_DATE_OFF: '20230217',
            RST_RCVD: '57',
            RST_SENT: '59',
            TIME_OFF: '172600',
            TIME_ON: '172600',
            TX_PWR: '20'
        }
    ]
};

const adif = new ADIF(input);

console.log(adif.stringify());

.stringify(options = {}) accepts an optional object argument which influences the output:

  • fieldDelim - a string to insert between fields. Default end-of-line sequence (\n or \r\n).
  • recordDelim - a string to insert between records (header and QSOs). Default two end-of-line sequences (\n or \r\n).
  • programName - the name of your application. Defaults to this modules package.name (i.e. tcadif).
  • programVersion - the version of your application. Defaults to this module's package.version (e.g. 1.6.1).
  • verbosity - controls which fields are included in the output
  • full - all fields (default).
  • compact - only the required fields QSO_DATE, TIME_ON, CALL, BAND or FREQ, and MODE.

Streaming ADIF Reading and Writing

AdifReader

Read a text stream and ouputs an object stream:

'use strict';

const { AdifReader } = require('tcadif');
const fs = require('fs');
const path = require('path');

const input = fs.createReadStream(path.join(__dirname, 'sample.adi'));
const reader = new AdifReader();

reader.on('data', record => console.log('data', record));
reader.on('error', err => console.error('err', err));

input.pipe(reader);

AdifWriter

Reads an object stream and outputs a text stream:

'use strict';

const { AdifWriter } = require('tcadif');

const writer = new AdifWriter();

writer.pipe(process.stdout);

writer.write({
    BAND: '20m',
    CALL: 'VA2EPR',
    MODE: 'CW',
    QSO_DATE: '20230306',
    TIME_ON: '1728',
    OPERATOR: 'VA2NW',
});

Passthrough

Reads a text stream, transforms it into an object stream, transforms it back into a text stream, and writes a text stream:

'use strict';

const { AdifReader, AdifWriter } = require('tcadif');
const fs = require('fs');
const path = require('path');

const input  = fs.createReadStream(path.join(__dirname, 'sample.adi'));
const reader = new AdifReader();
const writer = new AdifWriter();
const output = fs.createWriteStream(path.join(__dirname, 'sample-2.adi'));

input
    .pipe(reader)
    .pipe(writer)
    .pipe(output);

Application-defined Fields

FieldData TypeSub TypeDescription
APP_TCADIF_KEYEnumerationApp TCADIF Key Enumerationthe contacted station's Morse key.
APP_TCADIF_KEY_INFOStringthe contacted station's Morse key information (make, model, etc).
APP_TCADIF_LICWStringthe contacted station's Long Island CW Club (LICW) member information.
APP_TCADIF_MY_KEYEnumerationApp TCADIF Key Enumerationthe logging station's Morse key.
APP_TCADIF_MY_KEY_INFOStringthe logging station's Morse key information (make, model, etc).
APP_TCADIF_QSO_IDUuidApp TCADIF QSO IdentifierUniversally Unique IDentifier (UUID) for this QSO.

Data Types

Data Type NameData Type IndicatorDescription
UuidA string representation of a Universally Unique IDentifier. See RFC4122.

App TCADIF Key Enumeration

AbbreviationKey
SKStraight key
SSSideswiper
BUGBug
SLPSingle-Lever Paddle
DLPDual-Lever Paddle
CPUComputer

ADIF Implementation Notes

  • QSO valid requires the following fields: QSO_DATE, TIME_ON, CALL, BAND or FREQ, MODE.
  • Unknown Application-defined Fields, User-defined Fields, and Deprecated Fields are ignored.
  • No referential integrity checks have been implemented (e.g. there are no checks that the state is valid for the country, the band is valid for the frequency, etc)).
  • If a field appears more than once in a record, the last instance is the one used.
2.2.0

10 months ago

1.8.1

1 year ago

1.8.0

1 year ago

1.7.1

1 year ago

1.7.0

1 year ago

1.6.0

1 year ago

2.1.0

1 year ago

2.0.0

1 year ago

1.5.1

1 year ago

1.5.0

1 year ago

1.4.1

2 years ago

1.4.0

2 years ago

1.3.0

2 years ago

1.2.0

2 years ago

1.1.3

2 years ago

1.1.2

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.0.0

2 years ago