{"id":17563818,"url":"https://github.com/stdlib-js/utils-dsv-base-parse","last_synced_at":"2026-02-27T04:03:33.468Z","repository":{"id":59113206,"uuid":"530015151","full_name":"stdlib-js/utils-dsv-base-parse","owner":"stdlib-js","description":"Parser for delimiter-separated values (DSV).","archived":false,"fork":false,"pushed_at":"2026-02-07T19:07:06.000Z","size":14284,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-08T03:29:52.493Z","etag":null,"topics":["base","csv","data","delimiter","dsv","format","javascript","node","node-js","nodejs","parse","parser","stdlib","table","tabular","tsv","util","utilities","utils"],"latest_commit_sha":null,"homepage":"https://github.com/stdlib-js/stdlib","language":"JavaScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stdlib-js.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["stdlib-js"],"open_collective":"stdlib","tidelift":"npm/@stdlib/stdlib"}},"created_at":"2022-08-29T00:29:23.000Z","updated_at":"2026-02-07T18:56:20.000Z","dependencies_parsed_at":"2023-02-17T14:16:01.836Z","dependency_job_id":"c66dd6c7-0383-4ea9-b47a-eb0e4b3e9096","html_url":"https://github.com/stdlib-js/utils-dsv-base-parse","commit_stats":{"total_commits":48,"total_committers":1,"mean_commits":48.0,"dds":0.0,"last_synced_commit":"dd6c52ccf029d6ac9600e545450450b043dc19dd"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/stdlib-js/utils-dsv-base-parse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stdlib-js%2Futils-dsv-base-parse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stdlib-js%2Futils-dsv-base-parse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stdlib-js%2Futils-dsv-base-parse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stdlib-js%2Futils-dsv-base-parse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stdlib-js","download_url":"https://codeload.github.com/stdlib-js/utils-dsv-base-parse/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stdlib-js%2Futils-dsv-base-parse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29884515,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T23:51:21.483Z","status":"online","status_checked_at":"2026-02-27T02:00:06.759Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["base","csv","data","delimiter","dsv","format","javascript","node","node-js","nodejs","parse","parser","stdlib","table","tabular","tsv","util","utilities","utils"],"created_at":"2024-10-21T13:09:27.217Z","updated_at":"2026-02-27T04:03:33.462Z","avatar_url":"https://github.com/stdlib-js.png","language":"JavaScript","funding_links":["https://github.com/sponsors/stdlib-js","https://opencollective.com/stdlib","https://tidelift.com/funding/github/npm/@stdlib/stdlib"],"categories":[],"sub_categories":[],"readme":"\u003c!--\n\n@license Apache-2.0\n\nCopyright (c) 2022 The Stdlib Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n--\u003e\n\n\n\u003cdetails\u003e\n  \u003csummary\u003e\n    About stdlib...\n  \u003c/summary\u003e\n  \u003cp\u003eWe believe in a future in which the web is a preferred environment for numerical computation. To help realize this future, we've built stdlib. stdlib is a standard library, with an emphasis on numerical and scientific computation, written in JavaScript (and C) for execution in browsers and in Node.js.\u003c/p\u003e\n  \u003cp\u003eThe library is fully decomposable, being architected in such a way that you can swap out and mix and match APIs and functionality to cater to your exact preferences and use cases.\u003c/p\u003e\n  \u003cp\u003eWhen you use stdlib, you can be absolutely certain that you are using the most thorough, rigorous, well-written, studied, documented, tested, measured, and high-quality code out there.\u003c/p\u003e\n  \u003cp\u003eTo join us in bringing numerical computing to the web, get started by checking us out on \u003ca href=\"https://github.com/stdlib-js/stdlib\"\u003eGitHub\u003c/a\u003e, and please consider \u003ca href=\"https://opencollective.com/stdlib\"\u003efinancially supporting stdlib\u003c/a\u003e. We greatly appreciate your continued support!\u003c/p\u003e\n\u003c/details\u003e\n\n# DSV Parser\n\n[![NPM version][npm-image]][npm-url] [![Build Status][test-image]][test-url] [![Coverage Status][coverage-image]][coverage-url] \u003c!-- [![dependencies][dependencies-image]][dependencies-url] --\u003e\n\n\u003e Incremental parser for delimiter-separated values (DSV).\n\n\u003c!-- Section to include introductory text. Make sure to keep an empty line after the intro `section` element and another before the `/section` close. --\u003e\n\n\u003csection class=\"intro\"\u003e\n\n\u003c/section\u003e\n\n\u003c!-- /.intro --\u003e\n\n\u003c!-- Package usage documentation. --\u003e\n\n\u003csection class=\"installation\"\u003e\n\n## Installation\n\n```bash\nnpm install @stdlib/utils-dsv-base-parse\n```\n\nAlternatively,\n\n-   To load the package in a website via a `script` tag without installation and bundlers, use the [ES Module][es-module] available on the [`esm`][esm-url] branch (see [README][esm-readme]).\n-   If you are using Deno, visit the [`deno`][deno-url] branch (see [README][deno-readme] for usage intructions).\n-   For use in Observable, or in browser/node environments, use the [Universal Module Definition (UMD)][umd] build available on the [`umd`][umd-url] branch (see [README][umd-readme]).\n\nThe [branches.md][branches-url] file summarizes the available branches and displays a diagram illustrating their relationships.\n\nTo view installation and usage instructions specific to each branch build, be sure to explicitly navigate to the respective README files on each branch, as linked to above.\n\n\u003c/section\u003e\n\n\u003csection class=\"usage\"\u003e\n\n## Usage\n\n```javascript\nvar Parser = require( '@stdlib/utils-dsv-base-parse' );\n```\n\n#### Parser( \\[options] )\n\nReturns an incremental parser for delimiter-separated values (DSV).\n\n```javascript\nvar parse = new Parser();\n\n// Parse a line of comma-separated values (CSV):\nparse.next( '1,2,3,4\\r\\n' ); // =\u003e [ '1', '2', '3', '4' ]\n\n// ...\n\n// Parse multiple lines of CSV:\nparse.next( '4,5,6\\r\\n7,8,9\\r\\n' ); // =\u003e [ '4', '5', '6' ], [ '7', '8', '9' ]\n\n// ...\n\n// Parse partial lines:\nparse.next( 'a,b' );\nparse.next( ',c,d\\r\\n' ); // =\u003e [ 'a', 'b', 'c', 'd' ]\n\n// ...\n\n// Chain together invocations:\nparse.next( 'e,f' ).next( ',g,h' ).next( '\\r\\n' ); // =\u003e [ 'e', 'f', 'g', 'h' ]\n```\n\nThe constructor accepts the following `options`:\n\n-   **comment**: character sequence appearing at the beginning of a row which demarcates that the row content should be parsed as a commented line. A commented line ends upon encountering the first newline character sequence, regardless of whether that newline character sequence is preceded by an escape character sequence. Default: `''`.\n\n-   **delimiter**: character sequence separating record fields (e.g., `','` for comma-separated values (CSV) and `\\t` for tab-separated values (TSV)). Default: `','`.\n\n-   **doublequote**: `boolean` flag indicating how quote sequences should be escaped within a quoted field. When `true`, a quote sequence must be escaped by another quote sequence. When `false`, a quote sequence must be escaped by the escape sequence. Default: `true`.\n\n-   **escape**: character sequence for escaping character sequences having special meaning (i.e., the delimiter, newline, and escape sequences outside of quoted fields; the comment sequence at the beginning of a record and outside of a quoted field; and the quote sequence inside a quoted field when `doublequote` is `false`). Default: `''`.\n\n-   **ltrim**: `boolean` indicating whether to trim leading whitespace from field values. If `false`, the parser does not trim leading whitespace (e.g., `a, b, c` parses as `[ 'a', ' b', ' c' ]`).  If `true`, the parser trims leading whitespace (e.g., `a, b, c` parses as `[ 'a', 'b', 'c' ]`). Default: `false`.\n\n-   **maxRows**: maximum number of records to process (excluding skipped lines). By default, the maximum number of records is unlimited.\n\n-   **newline**: character sequence separating rows. Default: `'\\r\\n'` (see [RFC 4180][rfc-4180]).\n\n-   **onClose**: callback to be invoked upon closing the parser. If a parser has partially processed a record upon close, the callback is invoked with the following arguments:\n\n    -   **value**: unparsed partially processed **field** text.\n\n    Otherwise, the callback is invoked without any arguments.\n\n-   **onColumn**: callback to be invoked upon processing a field. The callback is invoked with the following arguments:\n\n    -   **field**: field value.\n    -   **row**: row number (zero-based).\n    -   **col**: field (column) number (zero-based).\n    -   **line**: line number (zero-based).\n\n-   **onComment**: callback to be invoked upon processing a commented line. The callback is invoked with the following arguments:\n\n    -   **comment**: comment text.\n    -   **line**: line number (zero-based).\n\n-   **onError**: callback to be invoked upon encountering an unrecoverable parse error. By default, upon encountering a parse error, the parser throws an `Error`. When provided an error callback, the parser does **not** throw and, instead, invokes the provided callback. The callback is invoked with the following arguments:\n\n    -   **error**: an `Error` object.\n\n-   **onRow**: callback to be invoked upon processing a record. The callback is invoked with the following arguments:\n\n    -   **record**: an array-like object containing field values. If provided a `rowBuffer`, the `record` argument will be the **same** array-like object for each invocation.\n    -   **row**: row number (zero-based).\n    -   **ncols**: number of fields (columns).\n    -   **line**: line number (zero-based).\n\n    If a parser is closed **before** fully processing the last record, the callback is invoked with field data for all fields which have been parsed. Any remaining field data is provided to the `onClose` callback. For example, if a parser has processed two fields and closes while attempting to process a third field, the parser invokes the `onRow` callback with field data for the first two fields and invokes the `onClose` callback with the partially processed data for the third field.\n\n-   **onSkip**: callback to be invoked upon processing a skipped line. The callback is invoked with the following arguments:\n\n    -   **record**: unparsed record text.\n    -   **line**: line number (zero-based).\n\n-   **onWarn**: when `strict` is `false`, a callback to be invoked upon encountering invalid DSV. The callback is invoked with the following arguments:\n\n    -   **error**: an `Error` object.\n\n-   **quote**: character sequence demarcating the beginning and ending of a quoted field. When `quoting` is `false`, a quote character sequence has no special meaning and is processed as normal text. Default: `'\"'`.\n\n-   **quoting**: `boolean` flag indicating whether to enable special processing of quote character sequences (i.e., when a quote sequence should demarcate a quoted field). Default: `true`.\n\n-   **rowBuffer**: array-like object for the storing field values of the most recently processed record. When provided, the row buffer is **reused** and is provided to the `onRow` callback for each processed record. If a provided row buffer is a generic array, the parser grows the buffer as needed. If a provided row buffer is a typed array, the buffer size is fixed, and, thus, needs to be large enough to accommodate processed fields. Providing a fixed length array is appropriate when the number of fields is known prior to parsing. When the number of fields is unknown, providing a fixed length array may still be appropriate; however, one is advised to allocate a buffer having more elements than is reasonably expected in order to avoid buffer overflow.\n\n-   **rtrim**: `boolean` indicating whether to trim trailing whitespace from field values. If `false`, the parser does not trim trailing whitespace (e.g., `a ,b ,c` parses as `[ 'a ', 'b ', 'c' ]`).  If `true`, the parser trims trailing whitespace (e.g., `a ,b ,c` parses as `[ 'a', 'b', 'c' ]`). Default: `false`.\n\n-   **skip**: character sequence appearing at the beginning of a row which demarcates that the row content should be parsed as a skipped record. Default: `''`.\n\n-   **skipBlankRows**: `boolean` flag indicating whether to skip over rows which are either empty or containing only whitespace. Default: `false`.\n\n-   **skipRow**: callback whose return value indicates whether to skip over a row. The callback is invoked with the following arguments:\n\n    -   **nrows**: number of processed rows (equivalent to the current row number).\n    -   **line**: line number (zero-based).\n\n    If the callback returns a truthy value, the parser skips the row; otherwise, the parser attempts to process the row.\n\n    Note, however, that, even if the callback returns a falsy value, a row may still be skipped depending on the presence of a `skip` character sequence.\n\n-   **strict**: `boolean` flag indicating whether to raise an exception upon encountering invalid DSV. When `false`, instead of throwing an `Error` or invoking the `onError` callback, the parser invokes an `onWarn` callback with an `Error` object specifying the encountered error. Default: `true`.\n\n-   **trimComment**: `boolean` flag indicating whether to trim leading whitespace in commented lines. Default: `true`.\n\n-   **whitespace**: list of characters to be interpreted as whitespace. Default: `[ ' ' ]`.\n\nThe parser does **not** perform field conversion/transformation and, instead, is solely responsible for incrementally identifying fields and records. Further processing of fields/records is the responsibility of parser consumers who are generally expected to provide either an `onColumn` callback, an `onRow` callback, or both.\n\n```javascript\nvar format = require( '@stdlib/string-format' );\n\nfunction onColumn( field, row, col ) {\n    console.log( format( 'Row: %d. Column: %d. Value: %s', row, col, field ) );\n}\n\nfunction onRow( record, row, ncols ) {\n    console.log( format( 'Row: %d. nFields: %d. Value: | %s |', row, ncols, record.join( ' | ' ) ) );\n}\n\nvar opts = {\n    'onColumn': onColumn,\n    'onRow': onRow\n};\nvar parse = new Parser( opts );\n\nparse.next( '1,2,3,4\\r\\n' ); // =\u003e [ '1', '2', '3', '4' ]\nparse.next( '5,6,7,8\\r\\n' ); // =\u003e [ '5', '6', '7', '8' ]\n\n// ...\n```\n\nUpon closing the parser, the parser invokes an `onClose` callback with any partially processed (i.e., incomplete) **field** data. Note, however, that the field data may **not** equal the original character sequence, as escape sequences may have already been removed.\n\n```javascript\nvar format = require( '@stdlib/string-format' );\n\nfunction onClose( v ) {\n    console.log( format( 'Incomplete: %s', v ) );\n}\n\nvar opts = {\n    'onClose': onClose\n};\nvar parse = new Parser( opts );\n\nparse.next( '1,2,3,4\\r\\n' ); // =\u003e [ '1', '2', '3', '4' ]\n\n// ...\n\n// Provide an incomplete record:\nparse.next( '5,6,\"foo' );\n\n// Close the parser:\nparse.close();\n```\n\nBy default, the parser assumes [RFC 4180][rfc-4180]-compliant newline-delimited comma separated values (CSV). To specify alternative separators, specify the relevant options.\n\n```javascript\nvar opts = {\n    'delimiter': '--',\n    'newline': '%%'\n};\nvar parse = new Parser( opts );\n\nparse.next( '1--2--3--4%%' ); // =\u003e [ '1', '2', '3', '4' ]\nparse.next( '5--6--7--8%%' ); // =\u003e [ '5', '6', '7', '8' ]\n\n// ...\n```\n\nBy default, the parser escapes double (i.e., two consecutive) quote character sequences within quoted fields. To parse DSV in which quote character sequences are escaped by an escape character sequence within quoted fields, set `doublequote` to `false` and specify the escape character sequence.\n\n\u003c!-- eslint-disable no-useless-escape --\u003e\n\n```javascript\n// Default parser:\nvar parse = new Parser();\n\n// Parse DSV using double quoting:\nparse.next( '1,\"\"\"2\"\"\",3,4\\r\\n' ); // =\u003e [ '1', '\"2\"', '3', '4' ]\n\n// ...\n\n// Create a parser which uses a custom escape sequence within quoted fields:\nvar opts = {\n    'doublequote': false,\n    'escape': '\\\\'\n};\nparse = new Parser( opts );\n\nparse.next( '1,\"\\\\\"2\\\\\"\",3,4\\r\\n' ); // =\u003e [ '1', '\"2\"', '3', '4' ]\n```\n\nWhen `quoting` is `true`, the parser identifies a quote character sequence at the beginning of a field as the start of a quoted field. To process quote character sequences as normal field text, set `quoting` to `false`.\n\n```javascript\n// Default parser;\nvar parse = new Parser();\n\nparse.next( '1,\"2\",3,4\\r\\n' ); // =\u003e [ '1', '2', '3', '4' ]\n\n// ...\n\n// Create a parser which treats quote sequences as normal field text:\nvar opts = {\n    'quoting': false\n};\nparse = new Parser( opts );\n\nparse.next( '1,\"2\",3,4\\r\\n' ); // =\u003e [ '1', '\"2\"', '3', '4' ]\n```\n\nTo parse DSV containing commented lines, specify a comment character sequence which demarcates the beginning of a commented line.\n\n```javascript\nvar opts = {\n    'comment': '#'\n};\nvar parse = new Parser( opts );\n\nparse.next( '1,2,3,4\\r\\n' ); // =\u003e [ '1', '2', '3', '4' ]\nparse.next( '# This is a commented line.\\r\\n' ); // comment\nparse.next( '9,10,11,12\\r\\n' ); // =\u003e [ '9', '10', '11', '12' ]\n```\n\nTo parse DSV containing skipped lines, specify a skip character sequence which demarcates the beginning of a skipped line.\n\n```javascript\nvar opts = {\n    'skip': '//'\n};\nvar parse = new Parser( opts );\n\nparse.next( '1,2,3,4\\r\\n' ); // =\u003e [ '1', '2', '3', '4' ]\nparse.next( '//5,6,7,8\\r\\n' ); // skipped line\nparse.next( '9,10,11,12\\r\\n' ); // =\u003e [ '9', '10', '11', '12' ]\n```\n\n* * *\n\n### Properties\n\n#### Parser.prototype.done\n\n**Read-only** property indicating whether a parser is able to process new chunks.\n\n```javascript\nvar parse = new Parser();\n\nparse.next( '1,2,3,4\\r\\n' );\n\n// ...\n\nvar b = parse.done;\n// returns false\n\n// ...\n\nparse.close();\n\n// ...\n\nb = parse.done;\n// returns true\n```\n\n* * *\n\n### Methods\n\n#### Parser.prototype.next( chunk )\n\nIncrementally parses the next chunk.\n\n```javascript\nvar parse = new Parser();\n\nparse.next( '1,2,3,4\\r\\n' );\n\n// ...\n\nparse.next( '5,6,7,8\\r\\n' );\n\n// ...\n```\n\n#### Parser.prototype.close()\n\nCloses the parser.\n\n```javascript\nvar parse = new Parser();\n\nparse.next( '1,2,3,4\\r\\n' );\n\n// ...\n\nparse.next( '5,6,7,8\\r\\n' );\n\n// ...\n\nparse.close();\n```\n\nAfter closing a parser, a parser raises an exception upon receiving any additional chunks.\n\n\u003c/section\u003e\n\n\u003c!-- /.usage --\u003e\n\n\u003c!-- Package usage notes. Make sure to keep an empty line after the `section` element and another before the `/section` close. --\u003e\n\n* * *\n\n\u003csection class=\"notes\"\u003e\n\n## Notes\n\n-   Special character sequences (i.e., delimiter, newline, quote, escape, skip, and comment sequences) **must** all be unique with respect to one another, and **no** special character sequence is allowed to be a subsequence of another special character sequence. Allowing common subsequences would lead to ambiguous parser states.\n\n    For example, given the chunk `1,,3,4,,`, if `delimiter` is `','` and `newline` is `',,'`, is the first `,,` a field with no content or a newline? The parser cannot be certain, hence the prohibition.\n\n-   As specified in [RFC 4180][rfc-4180], special character sequences **must** be consistent across all provided chunks. Hence, providing chunks in which, e.g., line breaks vary between `\\r`, `\\n`, and `\\r\\n` is **not** supported.\n\n\u003c/section\u003e\n\n\u003c!-- /.notes --\u003e\n\n\u003c!-- Package usage examples. --\u003e\n\n* * *\n\n\u003csection class=\"examples\"\u003e\n\n## Examples\n\n\u003c!-- eslint no-undef: \"error\" --\u003e\n\n```javascript\nvar format = require( '@stdlib/string-format' );\nvar Parser = require( '@stdlib/utils-dsv-base-parse' );\n\nfunction onColumn( v, row, col ) {\n    console.log( format( 'Row: %d. Column: %d. Value: %s', row, col, v ) );\n}\n\nfunction onRow( v, row, ncols ) {\n    console.log( format( 'Row: %d. nFields: %d. Value: | %s |', row, ncols, v.join( ' | ' ) ) );\n}\n\nfunction onComment( str ) {\n    console.log( format( 'Comment: %s', str ) );\n}\n\nfunction onSkip( str ) {\n    console.log( format( 'Skipped line: %s', str ) );\n}\n\nfunction onWarn( err ) {\n    console.log( format( 'Warning: %s', err.message ) );\n}\n\nfunction onError( err ) {\n    console.log( format( 'Error: %s', err.message ) );\n}\n\nfunction onClose( v ) {\n    console.log( format( 'End: %s', v || '(none)' ) );\n}\n\nvar opts = {\n    'strict': false,\n    'newline': '\\r\\n',\n    'delimiter': ',',\n    'escape': '\\\\',\n    'comment': '#',\n    'skip': '//',\n    'doublequote': true,\n    'quoting': true,\n    'onColumn': onColumn,\n    'onRow': onRow,\n    'onComment': onComment,\n    'onSkip': onSkip,\n    'onError': onError,\n    'onWarn': onWarn,\n    'onClose': onClose\n};\nvar parse = new Parser( opts );\n\nvar str = [\n    [ '1', '2', '3', '4' ],\n    [ '5', '6', '7', '8' ],\n    [ 'foo\\\\,', 'bar\\\\ ,', 'beep\\\\,', 'boop\\\\,' ],\n    [ '\"\"\",1,\"\"\"', '\"\"\",2,\"\"\"', '\"\"\",3,\"\"\"', '\"\"\",4,\"\"\"' ],\n    [ '# This is a \"comment\", including with commas.' ],\n    [ '\\\\# Escaped comment', '# 2', '# 3', '# 4' ],\n    [ '1', '2', '3', '4' ],\n    [ '//A,Skipped,Line,!!!' ],\n    [ '\"foo\"', '\"bar\\\\ \"', '\"beep\"', '\"boop\"' ],\n    [ ' # 😃', ' # 🥳', ' # 😮', ' # 🤠' ]\n];\nvar i;\nfor ( i = 0; i \u003c str.length; i++ ) {\n    str[ i ] = str[ i ].join( opts.delimiter );\n}\nstr = str.join( opts.newline );\n\nconsole.log( format( 'Input:\\n\\n%s\\n', str ) );\nparse.next( str ).close();\n```\n\n\u003c/section\u003e\n\n\u003c!-- /.examples --\u003e\n\n\u003c!-- Section to include cited references. If references are included, add a horizontal rule *before* the section. Make sure to keep an empty line after the `section` element and another before the `/section` close. --\u003e\n\n\u003csection class=\"references\"\u003e\n\n\u003c/section\u003e\n\n\u003c!-- /.references --\u003e\n\n\u003c!-- Section for related `stdlib` packages. Do not manually edit this section, as it is automatically populated. --\u003e\n\n\u003csection class=\"related\"\u003e\n\n\u003c/section\u003e\n\n\u003c!-- /.related --\u003e\n\n\u003c!-- Section for all links. Make sure to keep an empty line after the `section` element and another before the `/section` close. --\u003e\n\n\n\u003csection class=\"main-repo\" \u003e\n\n* * *\n\n## Notice\n\nThis package is part of [stdlib][stdlib], a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more.\n\nFor more information on the project, filing bug reports and feature requests, and guidance on how to develop [stdlib][stdlib], see the main project [repository][stdlib].\n\n#### Community\n\n[![Chat][chat-image]][chat-url]\n\n---\n\n## License\n\nSee [LICENSE][stdlib-license].\n\n\n## Copyright\n\nCopyright \u0026copy; 2016-2026. The Stdlib [Authors][stdlib-authors].\n\n\u003c/section\u003e\n\n\u003c!-- /.stdlib --\u003e\n\n\u003c!-- Section for all links. Make sure to keep an empty line after the `section` element and another before the `/section` close. --\u003e\n\n\u003csection class=\"links\"\u003e\n\n[npm-image]: http://img.shields.io/npm/v/@stdlib/utils-dsv-base-parse.svg\n[npm-url]: https://npmjs.org/package/@stdlib/utils-dsv-base-parse\n\n[test-image]: https://github.com/stdlib-js/utils-dsv-base-parse/actions/workflows/test.yml/badge.svg?branch=main\n[test-url]: https://github.com/stdlib-js/utils-dsv-base-parse/actions/workflows/test.yml?query=branch:main\n\n[coverage-image]: https://img.shields.io/codecov/c/github/stdlib-js/utils-dsv-base-parse/main.svg\n[coverage-url]: https://codecov.io/github/stdlib-js/utils-dsv-base-parse?branch=main\n\n\u003c!--\n\n[dependencies-image]: https://img.shields.io/david/stdlib-js/utils-dsv-base-parse.svg\n[dependencies-url]: https://david-dm.org/stdlib-js/utils-dsv-base-parse/main\n\n--\u003e\n\n[chat-image]: https://img.shields.io/badge/zulip-join_chat-brightgreen.svg\n[chat-url]: https://stdlib.zulipchat.com\n\n[stdlib]: https://github.com/stdlib-js/stdlib\n\n[stdlib-authors]: https://github.com/stdlib-js/stdlib/graphs/contributors\n\n[umd]: https://github.com/umdjs/umd\n[es-module]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules\n\n[deno-url]: https://github.com/stdlib-js/utils-dsv-base-parse/tree/deno\n[deno-readme]: https://github.com/stdlib-js/utils-dsv-base-parse/blob/deno/README.md\n[umd-url]: https://github.com/stdlib-js/utils-dsv-base-parse/tree/umd\n[umd-readme]: https://github.com/stdlib-js/utils-dsv-base-parse/blob/umd/README.md\n[esm-url]: https://github.com/stdlib-js/utils-dsv-base-parse/tree/esm\n[esm-readme]: https://github.com/stdlib-js/utils-dsv-base-parse/blob/esm/README.md\n[branches-url]: https://github.com/stdlib-js/utils-dsv-base-parse/blob/main/branches.md\n\n[stdlib-license]: https://raw.githubusercontent.com/stdlib-js/utils-dsv-base-parse/main/LICENSE\n\n[rfc-4180]: https://www.rfc-editor.org/rfc/rfc4180\n\n\u003c!-- \u003crelated-links\u003e --\u003e\n\n\u003c!-- \u003c/related-links\u003e --\u003e\n\n\u003c/section\u003e\n\n\u003c!-- /.links --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstdlib-js%2Futils-dsv-base-parse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstdlib-js%2Futils-dsv-base-parse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstdlib-js%2Futils-dsv-base-parse/lists"}