dpkit
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
45 lines • 17.4 kB
JavaScript
import { Option } from "commander";
export const dialect = new Option("--dialect <dialect>", "path to a table dialect descriptor");
export const sampleBytes = new Option("--sample-bytes <bytes>", "number of bytes to sample from the file").argParser(Number.parseInt);
export const header = new Option("--header <header>", "whether the file includes a header row with field names")
.choices(["true", "false"])
.argParser((value) => value === "true");
export const headerRows = new Option("--header-rows <rows>", "comma-separated row numbers (zero-based) that are considered header rows");
export const headerJoin = new Option("--header-join <char>", "character used to join multi-line headers");
export const commentRows = new Option("--comment-rows <rows>", "comma-separated rows to be excluded from the data (zero-based)");
export const commentChar = new Option("--comment-char <char>", "character sequence denoting the start of a comment line");
export const delimiter = new Option("--delimiter <char>", "character used to separate fields in the data");
export const lineTerminator = new Option("--line-terminator <char>", "character sequence used to terminate rows");
export const quoteChar = new Option("--quote-char <char>", "character used to quote fields");
export const doubleQuote = new Option("--double-quote", "whether a sequence of two quote characters represents a single quote");
export const escapeChar = new Option("--escape-char <char>", "character used to escape the delimiter or quote characters");
export const nullSequence = new Option("--null-sequence <seq>", "character sequence representing null or missing values in the data");
export const skipInitialSpace = new Option("--skip-initial-space", "whether to ignore whitespace immediately following the delimiter");
export const property = new Option("--property <name>", "for JSON data, the property name containing the data array");
export const itemType = new Option("--item-type <type>", "the type of data item in the source").choices(["array", "object"]);
export const itemKeys = new Option("--item-keys <keys>", "comma-separated object properties to extract as values (for object-based data items)");
export const sheetNumber = new Option("--sheet-number <num>", "for spreadsheet data, the sheet number to read (zero-based)").argParser(Number.parseInt);
export const sheetName = new Option("--sheet-name <name>", "for spreadsheet data, the sheet name to read");
export const table = new Option("--table <name>", "for database sources, the table name to read");
export const toDialect = new Option("--to-dialect <toDialect>", "path to a table dialect descriptor");
export const toHeader = new Option("--to-header", "whether the file includes a header row with field names")
.choices(["true", "false"])
.argParser((value) => value === "true");
export const toHeaderRows = new Option("--to-header-rows <rows>", "comma-separated row numbers (zero-based) that are considered header rows");
export const toHeaderJoin = new Option("--to-header-join <char>", "character used to join multi-line headers");
export const toCommentRows = new Option("--to-comment-rows <rows>", "comma-separated rows to be excluded from the data (zero-based)");
export const toCommentChar = new Option("--to-comment-char <char>", "character sequence denoting the start of a comment line");
export const toDelimiter = new Option("--to-delimiter <char>", "character used to separate fields in the data");
export const toLineTerminator = new Option("--to-line-terminator <char>", "character sequence used to terminate rows");
export const toQuoteChar = new Option("--to-quote-char <char>", "character used to quote fields");
export const toDoubleQuote = new Option("--to-double-quote", "whether a sequence of two quote characters represents a single quote");
export const toEscapeChar = new Option("--to-escape-char <char>", "character used to escape the delimiter or quote characters");
export const toNullSequence = new Option("--to-null-sequence <seq>", "character sequence representing null or missing values in the data");
export const toSkipInitialSpace = new Option("--to-skip-initial-space", "whether to ignore whitespace immediately following the delimiter");
export const toProperty = new Option("--to-property <name>", "for JSON data, the property name containing the data array");
export const toItemType = new Option("--to-item-type <type>", "the type of data item in the source").choices(["array", "object"]);
export const toItemKeys = new Option("--to-item-keys <keys>", "comma-separated object properties to extract as values (for object-based data items)");
export const toSheetNumber = new Option("--to-sheet-number <num>", "for spreadsheet data, the sheet number to read (zero-based)").argParser(Number.parseInt);
export const toSheetName = new Option("--to-sheet-name <name>", "for spreadsheet data, the sheet name to read");
export const toTable = new Option("--to-table <name>", "for database sources, the table name to read");
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbGVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3BhcmFtcy9kaWFsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFbEMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUMvQixxQkFBcUIsRUFDckIsb0NBQW9DLENBQ3JDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxNQUFNLENBQ25DLHdCQUF3QixFQUN4Qix5Q0FBeUMsQ0FDMUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBRTVCLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FDOUIsbUJBQW1CLEVBQ25CLHlEQUF5RCxDQUMxRDtLQUNFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUMxQixTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQTtBQUVqRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQ2xDLHNCQUFzQixFQUN0QiwwRUFBMEUsQ0FDM0UsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FDbEMsc0JBQXNCLEVBQ3RCLDJDQUEyQyxDQUM1QyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksTUFBTSxDQUNuQyx1QkFBdUIsRUFDdkIsZ0VBQWdFLENBQ2pFLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxNQUFNLENBQ25DLHVCQUF1QixFQUN2Qix5REFBeUQsQ0FDMUQsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FDakMsb0JBQW9CLEVBQ3BCLCtDQUErQyxD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T3B0aW9uIH0gZnJvbSBcImNvbW1hbmRlclwiXG5cbmV4cG9ydCBjb25zdCBkaWFsZWN0ID0gbmV3IE9wdGlvbihcbiAgXCItLWRpYWxlY3QgPGRpYWxlY3Q+XCIsXG4gIFwicGF0aCB0byBhIHRhYmxlIGRpYWxlY3QgZGVzY3JpcHRvclwiLFxuKVxuXG5leHBvcnQgY29uc3Qgc2FtcGxlQnl0ZXMgPSBuZXcgT3B0aW9uKFxuICBcIi0tc2FtcGxlLWJ5dGVzIDxieXRlcz5cIixcbiAgXCJudW1iZXIgb2YgYnl0ZXMgdG8gc2FtcGxlIGZyb20gdGhlIGZpbGVcIixcbikuYXJnUGFyc2VyKE51bWJlci5wYXJzZUludClcblxuZXhwb3J0IGNvbnN0IGhlYWRlciA9IG5ldyBPcHRpb24oXG4gIFwiLS1oZWFkZXIgPGhlYWRlcj5cIixcbiAgXCJ3aGV0aGVyIHRoZSBmaWxlIGluY2x1ZGVzIGEgaGVhZGVyIHJvdyB3aXRoIGZpZWxkIG5hbWVzXCIsXG4pXG4gIC5jaG9pY2VzKFtcInRydWVcIiwgXCJmYWxzZVwiXSlcbiAgLmFyZ1BhcnNlcigodmFsdWU6IHN0cmluZykgPT4gdmFsdWUgPT09IFwidHJ1ZVwiKVxuXG5leHBvcnQgY29uc3QgaGVhZGVyUm93cyA9IG5ldyBPcHRpb24oXG4gIFwiLS1oZWFkZXItcm93cyA8cm93cz5cIixcbiAgXCJjb21tYS1zZXBhcmF0ZWQgcm93IG51bWJlcnMgKHplcm8tYmFzZWQpIHRoYXQgYXJlIGNvbnNpZGVyZWQgaGVhZGVyIHJvd3NcIixcbilcblxuZXhwb3J0IGNvbnN0IGhlYWRlckpvaW4gPSBuZXcgT3B0aW9uKFxuICBcIi0taGVhZGVyLWpvaW4gPGNoYXI+XCIsXG4gIFwiY2hhcmFjdGVyIHVzZWQgdG8gam9pbiBtdWx0aS1saW5lIGhlYWRlcnNcIixcbilcblxuZXhwb3J0IGNvbnN0IGNvbW1lbnRSb3dzID0gbmV3IE9wdGlvbihcbiAgXCItLWNvbW1lbnQtcm93cyA8cm93cz5cIixcbiAgXCJjb21tYS1zZXBhcmF0ZWQgcm93cyB0byBiZSBleGNsdWRlZCBmcm9tIHRoZSBkYXRhICh6ZXJvLWJhc2VkKVwiLFxuKVxuXG5leHBvcnQgY29uc3QgY29tbWVudENoYXIgPSBuZXcgT3B0aW9uKFxuICBcIi0tY29tbWVudC1jaGFyIDxjaGFyPlwiLFxuICBcImNoYXJhY3RlciBzZXF1ZW5jZSBkZW5vdGluZyB0aGUgc3RhcnQgb2YgYSBjb21tZW50IGxpbmVcIixcbilcblxuZXhwb3J0IGNvbnN0IGRlbGltaXRlciA9IG5ldyBPcHRpb24oXG4gIFwiLS1kZWxpbWl0ZXIgPGNoYXI+XCIsXG4gIFwiY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgZmllbGRzIGluIHRoZSBkYXRhXCIsXG4pXG5cbmV4cG9ydCBjb25zdCBsaW5lVGVybWluYXRvciA9IG5ldyBPcHRpb24oXG4gIFwiLS1saW5lLXRlcm1pbmF0b3IgPGNoYXI+XCIsXG4gIFwiY2hhcmFjdGVyIHNlcXVlbmNlIHVzZWQgdG8gdGVybWluYXRlIHJvd3NcIixcbilcblxuZXhwb3J0IGNvbnN0IHF1b3RlQ2hhciA9IG5ldyBPcHRpb24oXG4gIFwiLS1xdW90ZS1jaGFyIDxjaGFyPlwiLFxuICBcImNoYXJhY3RlciB1c2VkIHRvIHF1b3RlIGZpZWxkc1wiLFxuKVxuXG5leHBvcnQgY29uc3QgZG91YmxlUXVvdGUgPSBuZXcgT3B0aW9uKFxuICBcIi0tZG91YmxlLXF1b3RlXCIsXG4gIFwid2hldGhlciBhIHNlcXVlbmNlIG9mIHR3byBxdW90ZSBjaGFyYWN0ZXJzIHJlcHJlc2VudHMgYSBzaW5nbGUgcXVvdGVcIixcbilcblxuZXhwb3J0IGNvbnN0IGVzY2FwZUNoYXIgPSBuZXcgT3B0aW9uKFxuICBcIi0tZXNjYXBlLWNoYXIgPGNoYXI+XCIsXG4gIFwiY2hhcmFjdGVyIHVzZWQgdG8gZXNjYXBlIHRoZSBkZWxpbWl0ZXIgb3IgcXVvdGUgY2hhcmFjdGVyc1wiLFxuKVxuXG5leHBvcnQgY29uc3QgbnVsbFNlcXVlbmNlID0gbmV3IE9wdGlvbihcbiAgXCItLW51bGwtc2VxdWVuY2UgPHNlcT5cIixcbiAgXCJjaGFyYWN0ZXIgc2VxdWVuY2UgcmVwcmVzZW50aW5nIG51bGwgb3IgbWlzc2luZyB2YWx1ZXMgaW4gdGhlIGRhdGFcIixcbilcblxuZXhwb3J0IGNvbnN0IHNraXBJbml0aWFsU3BhY2UgPSBuZXcgT3B0aW9uKFxuICBcIi0tc2tpcC1pbml0aWFsLXNwYWNlXCIsXG4gIFwid2hldGhlciB0byBpZ25vcmUgd2hpdGVzcGFjZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGRlbGltaXRlclwiLFxuKVxuXG5leHBvcnQgY29uc3QgcHJvcGVydHkgPSBuZXcgT3B0aW9uKFxuICBcIi0tcHJvcGVydHkgPG5hbWU+XCIsXG4gIFwiZm9yIEpTT04gZGF0YSwgdGhlIHByb3BlcnR5IG5hbWUgY29udGFpbmluZyB0aGUgZGF0YSBhcnJheVwiLFxuKVxuXG5leHBvcnQgY29uc3QgaXRlbVR5cGUgPSBuZXcgT3B0aW9uKFxuICBcIi0taXRlbS10eXBlIDx0eXBlPlwiLFxuICBcInRoZSB0eXBlIG9mIGRhdGEgaXRlbSBpbiB0aGUgc291cmNlXCIsXG4pLmNob2ljZXMoW1wiYXJyYXlcIiwgXCJvYmplY3RcIl0pXG5cbmV4cG9ydCBjb25zdCBpdGVtS2V5cyA9IG5ldyBPcHRpb24oXG4gIFwiLS1pdGVtLWtleXMgPGtleXM+XCIsXG4gIFwiY29tbWEtc2VwYXJhdGVkIG9iamVjdCBwcm9wZXJ0aWVzIHRvIGV4dHJhY3QgYXMgdmFsdWVzIChmb3Igb2JqZWN0LWJhc2VkIGRhdGEgaXRlbXMpXCIsXG4pXG5cbmV4cG9ydCBjb25zdCBzaGVldE51bWJlciA9IG5ldyBPcHRpb24oXG4gIFwiLS1zaGVldC1udW1iZXIgPG51bT5cIixcbiAgXCJmb3Igc3ByZWFkc2hlZXQgZGF0YSwgdGhlIHNoZWV0IG51bWJlciB0byByZWFkICh6ZXJvLWJhc2VkKVwiLFxuKS5hcmdQYXJzZXIoTnVtYmVyLnBhcnNlSW50KVxuXG5leHBvcnQgY29uc3Qgc2hlZXROYW1lID0gbmV3IE9wdGlvbihcbiAgXCItLXNoZWV0LW5hbWUgPG5hbWU+XCIsXG4gIFwiZm9yIHNwcmVhZHNoZWV0IGRhdGEsIHRoZSBzaGVldCBuYW1lIHRvIHJlYWRcIixcbilcblxuZXhwb3J0IGNvbnN0IHRhYmxlID0gbmV3IE9wdGlvbihcbiAgXCItLXRhYmxlIDxuYW1lPlwiLFxuICBcImZvciBkYXRhYmFzZSBzb3VyY2VzLCB0aGUgdGFibGUgbmFtZSB0byByZWFkXCIsXG4pXG5cbmV4cG9ydCBjb25zdCB0b0RpYWxlY3QgPSBuZXcgT3B0aW9uKFxuICBcIi0tdG8tZGlhbGVjdCA8dG9EaWFsZWN0PlwiLFxuICBcInBhdGggdG8gYSB0YWJsZSBkaWFsZWN0IGRlc2NyaXB0b3JcIixcbilcblxuZXhwb3J0IGNvbnN0IHRvSGVhZGVyID0gbmV3IE9wdGlvbihcbiAgXCItLXRvLWhlYWRlclwiLFxuICBcIndoZXRoZXIgdGhlIGZpbGUgaW5jbHVkZXMgYSBoZWFkZXIgcm93IHdpdGggZmllbGQgbmFtZXNcIixcbilcbiAgLmNob2ljZXMoW1widHJ1ZVwiLCBcImZhbHNlXCJdKVxuICAuYXJnUGFyc2VyKCh2YWx1ZTogc3RyaW5nKSA9PiB2YWx1ZSA9PT0gXCJ0cnVlXCIpXG5cbmV4cG9ydCBjb25zdCB0b0hlYWRlclJvd3MgPSBuZXcgT3B0aW9uKFxuICBcIi0tdG8taGVhZGVyLXJvd3MgPHJvd3M+XCIsXG4gIFwiY29tbWEtc2VwYXJhdGVkIHJvdyBudW1iZXJzICh6ZXJvLWJhc2VkKSB0aGF0IGFyZSBjb25zaWRlcmVkIGhlYWRlciByb3dzXCIsXG4pXG5cbmV4cG9ydCBjb25zdCB0b0hlYWRlckpvaW4gPSBuZXcgT3B0aW9uKFxuICBcIi0tdG8taGVhZGVyLWpvaW4gPGNoYXI+XCIsXG4gIFwiY2hhcmFjdGVyIHVzZWQgdG8gam9pbiBtdWx0aS1saW5lIGhlYWRlcnNcIixcbilcblxuZXhwb3J0IGNvbnN0IHRvQ29tbWVudFJvd3MgPSBuZXcgT3B0aW9uKFxuICBcIi0tdG8tY29tbWVudC1yb3dzIDxyb3dzPlwiLFxuICBcImNvbW1hLXNlcGFyYXRlZCByb3dzIHRvIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGRhdGEgKHplcm8tYmFzZWQpXCIsXG4pXG5cbmV4cG9ydCBjb25zdCB0b0NvbW1lbnRDaGFyID0gbmV3IE9wdGlvbihcbiAgXCItLXRvLWNvbW1lbnQtY2hhciA8Y2hhcj5cIixcbiAgXCJjaGFyYWN0ZXIgc2VxdWVuY2UgZGVub3RpbmcgdGhlIHN0YXJ0IG9mIGEgY29tbWVudCBsaW5lXCIsXG4pXG5cbmV4cG9ydCBjb25zdCB0b0RlbGltaXRlciA9IG5ldyBPcHRpb24oXG4gIFwiLS10by1kZWxpbWl0ZXIgPGNoYXI+XCIsXG4gIFwiY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgZmllbGRzIGluIHRoZSBkYXRhXCIsXG4pXG5cbmV4cG9ydCBjb25zdCB0b0xpbmVUZXJtaW5hdG9yID0gbmV3IE9wdGlvbihcbiAgXCItLXRvLWxpbmUtdGVybWluYXRvciA8Y2hhcj5cIixcbiAgXCJjaGFyYWN0ZXIgc2VxdWVuY2UgdXNlZCB0byB0ZXJtaW5hdGUgcm93c1wiLFxuKVxuXG5leHBvcnQgY29uc3QgdG9RdW90ZUNoYXIgPSBuZXcgT3B0aW9uKFxuICBcIi0tdG8tcXVvdGUtY2hhciA8Y2hhcj5cIixcbiAgXCJjaGFyYWN0ZXIgdXNlZCB0byBxdW90ZSBmaWVsZHNcIixcbilcblxuZXhwb3J0IGNvbnN0IHRvRG91YmxlUXVvdGUgPSBuZXcgT3B0aW9uKFxuICBcIi0tdG8tZG91YmxlLXF1b3RlXCIsXG4gIFwid2hldGhlciBhIHNlcXVlbmNlIG9mIHR3byBxdW90ZSBjaGFyYWN0ZXJzIHJlcHJlc2VudHMgYSBzaW5nbGUgcXVvdGVcIixcbilcblxuZXhwb3J0IGNvbnN0IHRvRXNjYXBlQ2hhciA9IG5ldyBPcHRpb24oXG4gIFwiLS10by1lc2NhcGUtY2hhciA8Y2hhcj5cIixcbiAgXCJjaGFyYWN0ZXIgdXNlZCB0byBlc2NhcGUgdGhlIGRlbGltaXRlciBvciBxdW90ZSBjaGFyYWN0ZXJzXCIsXG4pXG5cbmV4cG9ydCBjb25zdCB0b051bGxTZXF1ZW5jZSA9IG5ldyBPcHRpb24oXG4gIFwiLS10by1udWxsLXNlcXVlbmNlIDxzZXE+XCIsXG4gIFwiY2hhcmFjdGVyIHNlcXVlbmNlIHJlcHJlc2VudGluZyBudWxsIG9yIG1pc3NpbmcgdmFsdWVzIGluIHRoZSBkYXRhXCIsXG4pXG5cbmV4cG9ydCBjb25zdCB0b1NraXBJbml0aWFsU3BhY2UgPSBuZXcgT3B0aW9uKFxuICBcIi0tdG8tc2tpcC1pbml0aWFsLXNwYWNlXCIsXG4gIFwid2hldGhlciB0byBpZ25vcmUgd2hpdGVzcGFjZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGRlbGltaXRlclwiLFxuKVxuXG5leHBvcnQgY29uc3QgdG9Qcm9wZXJ0eSA9IG5ldyBPcHRpb24oXG4gIFwiLS10by1wcm9wZXJ0eSA8bmFtZT5cIixcbiAgXCJmb3IgSlNPTiBkYXRhLCB0aGUgcHJvcGVydHkgbmFtZSBjb250YWluaW5nIHRoZSBkYXRhIGFycmF5XCIsXG4pXG5cbmV4cG9ydCBjb25zdCB0b0l0ZW1UeXBlID0gbmV3IE9wdGlvbihcbiAgXCItLXRvLWl0ZW0tdHlwZSA8dHlwZT5cIixcbiAgXCJ0aGUgdHlwZSBvZiBkYXRhIGl0ZW0gaW4gdGhlIHNvdXJjZVwiLFxuKS5jaG9pY2VzKFtcImFycmF5XCIsIFwib2JqZWN0XCJdKVxuXG5leHBvcnQgY29uc3QgdG9JdGVtS2V5cyA9IG5ldyBPcHRpb24oXG4gIFwiLS10by1pdGVtLWtleXMgPGtleXM+XCIsXG4gIFwiY29tbWEtc2VwYXJhdGVkIG9iamVjdCBwcm9wZXJ0aWVzIHRvIGV4dHJhY3QgYXMgdmFsdWVzIChmb3Igb2JqZWN0LWJhc2VkIGRhdGEgaXRlbXMpXCIsXG4pXG5cbmV4cG9ydCBjb25zdCB0b1NoZWV0TnVtYmVyID0gbmV3IE9wdGlvbihcbiAgXCItLXRvLXNoZWV0LW51bWJlciA8bnVtPlwiLFxuICBcImZvciBzcHJlYWRzaGVldCBkYXRhLCB0aGUgc2hlZXQgbnVtYmVyIHRvIHJlYWQgKHplcm8tYmFzZWQpXCIsXG4pLmFyZ1BhcnNlcihOdW1iZXIucGFyc2VJbnQpXG5cbmV4cG9ydCBjb25zdCB0b1NoZWV0TmFtZSA9IG5ldyBPcHRpb24oXG4gIFwiLS10by1zaGVldC1uYW1lIDxuYW1lPlwiLFxuICBcImZvciBzcHJlYWRzaGVldCBkYXRhLCB0aGUgc2hlZXQgbmFtZSB0byByZWFkXCIsXG4pXG5cbmV4cG9ydCBjb25zdCB0b1RhYmxlID0gbmV3IE9wdGlvbihcbiAgXCItLXRvLXRhYmxlIDxuYW1lPlwiLFxuICBcImZvciBkYXRhYmFzZSBzb3VyY2VzLCB0aGUgdGFibGUgbmFtZSB0byByZWFkXCIsXG4pXG4iXX0=