web-csv-toolbox 0.13.1-next-afac98bd3a41b6e902268ac4ca6a99a8da883c81 → 0.14.0-next-fe8f8c27b5fcf2744b32ad7dca0a70ed7f47c915

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,37 @@
1
+ import { commonParseErrorHandling } from './commonParseErrorHandling.js';
2
+ import { getOptionsFromRequest } from './getOptionsFromRequest.js';
3
+ import { parseRequestToStream } from './parseRequestToStream.js';
4
+ import { parseUint8ArrayStream } from './parseUint8ArrayStream.js';
5
+ import { convertThisAsyncIterableIteratorToArray } from './utils/convertThisAsyncIterableIteratorToArray.js';
6
+
7
+ function parseRequest(request, options) {
8
+ const options_ = getOptionsFromRequest(
9
+ request,
10
+ options
11
+ );
12
+ if (request.body === null) {
13
+ throw new TypeError("Request body is null");
14
+ }
15
+ return (async function* () {
16
+ try {
17
+ yield* parseUint8ArrayStream(request.body, options_);
18
+ } catch (error) {
19
+ commonParseErrorHandling(error);
20
+ }
21
+ })();
22
+ }
23
+ Object.defineProperties(parseRequest, {
24
+ toArray: {
25
+ enumerable: true,
26
+ writable: false,
27
+ value: convertThisAsyncIterableIteratorToArray
28
+ },
29
+ toStream: {
30
+ enumerable: true,
31
+ writable: false,
32
+ value: parseRequestToStream
33
+ }
34
+ });
35
+
36
+ export { parseRequest };
37
+ //# sourceMappingURL=parseRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseRequest.js","sources":["../src/parseRequest.ts"],"sourcesContent":["import type { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport { getOptionsFromRequest } from \"./getOptionsFromRequest.ts\";\nimport { parseRequestToStream } from \"./parseRequestToStream.ts\";\nimport { parseUint8ArrayStream } from \"./parseUint8ArrayStream.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse HTTP Request what contains CSV to records,\n * ideal for server-side use cases.\n *\n * @remarks\n * This function automatically treats request headers.\n *\n * - If `Content-Type` header is not set, it assumes `text/csv`.\n * - If `Content-Type` header is not `text/csv`, it throws an error.\n * - If `Content-Type` header has charset parameter, it uses it for decoding.\n * - If `Content-Encoding` header is set, it decompresses the request.\n * - Should there be any conflicting information between the header and the options, the option's value will take precedence.\n *\n * This function is particularly useful for server-side environments like Cloudflare Workers,\n * Service Workers, or other edge computing platforms that use the Request API.\n *\n * @category Middle-level API\n * @param request - The request object to parse\n * @param options - Parsing options\n * @returns Async iterable iterator of records.\n *\n * If you want array of records, use {@link parseRequest.toArray} function.\n *\n * @example Parsing CSV from Request (Cloudflare Workers)\n *\n * ```ts\n * import { parseRequest } from 'web-csv-toolbox';\n *\n * export default {\n * async fetch(request: Request) {\n * if (request.method === 'POST' && request.headers.get('content-type')?.includes('text/csv')) {\n * for await (const record of parseRequest(request)) {\n * console.log(record);\n * }\n * return new Response('CSV processed', { status: 200 });\n * }\n * return new Response('Not Found', { status: 404 });\n * }\n * };\n * ```\n *\n * @example Parsing CSV from Request (Service Worker)\n *\n * ```ts\n * import { parseRequest } from 'web-csv-toolbox';\n *\n * self.addEventListener('fetch', (event) => {\n * const request = event.request;\n * if (request.method === 'POST' && request.url.endsWith('/upload-csv')) {\n * event.respondWith(\n * (async () => {\n * const records = [];\n * for await (const record of parseRequest(request)) {\n * records.push(record);\n * }\n * return new Response(JSON.stringify(records), {\n * headers: { 'Content-Type': 'application/json' }\n * });\n * })()\n * );\n * }\n * });\n * ```\n */\nexport function parseRequest<Header extends ReadonlyArray<string>>(\n request: Request,\n options?: ParseBinaryOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n // Validate synchronously before creating async generator\n const options_: ParseBinaryOptions<Header> = getOptionsFromRequest(\n request,\n options,\n );\n if (request.body === null) {\n throw new TypeError(\"Request body is null\");\n }\n\n // Return wrapper async generator for error handling\n return (async function* () {\n try {\n yield* parseUint8ArrayStream(request.body!, options_);\n } catch (error) {\n commonParseErrorHandling(error);\n }\n })();\n}\n\nexport declare namespace parseRequest {\n /**\n * Parse CSV Request to array of records.\n *\n * @returns Array of records\n *\n * @example Parsing CSV Request\n *\n * ```ts\n * import { parseRequest } from 'web-csv-toolbox';\n *\n * const request = new Request('https://example.com', {\n * method: 'POST',\n * headers: { 'Content-Type': 'text/csv' },\n * body: 'name,age\\nAlice,42\\nBob,69'\n * });\n *\n * const records = await parseRequest.toArray(request);\n * console.log(records);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n request: Request,\n options?: ParseBinaryOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse CSV Request to stream of records.\n *\n * @param request - Request to parse\n * @returns Stream of records\n *\n * @example Parsing CSV Request\n *\n * ```ts\n * import { parseRequest } from 'web-csv-toolbox';\n *\n * const request = new Request('https://example.com', {\n * method: 'POST',\n * headers: { 'Content-Type': 'text/csv' },\n * body: 'name,age\\nAlice,42\\nBob,69'\n * });\n *\n * await parseRequest.toStream(request)\n * .pipeTo(\n * new WritableStream({\n * write(record) {\n * console.log(record);\n * },\n * }),\n * );\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n */\n export function toStream<Header extends ReadonlyArray<string>>(\n request: Request,\n options?: ParseBinaryOptions<Header>,\n ): ReadableStream<CSVRecord<Header>>;\n}\n\nObject.defineProperties(parseRequest, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n toStream: {\n enumerable: true,\n writable: false,\n value: parseRequestToStream,\n },\n});\n"],"names":["internal.convertThisAsyncIterableIteratorToArray"],"mappings":";;;;;;AAuEO,SAAS,YAAA,CACd,SACA,OAAA,EAC0C;AAE1C,EAAA,MAAM,QAAA,GAAuC,qBAAA;AAAA,IAC3C,OAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,IAAA,EAAM;AACzB,IAAA,MAAM,IAAI,UAAU,sBAAsB,CAAA;AAAA,EAC5C;AAGA,EAAA,OAAA,CAAQ,mBAAmB;AACzB,IAAA,IAAI;AACF,MAAA,OAAO,qBAAA,CAAsB,OAAA,CAAQ,IAAA,EAAO,QAAQ,CAAA;AAAA,IACtD,SAAS,KAAA,EAAO;AACd,MAAA,wBAAA,CAAyB,KAAK,CAAA;AAAA,IAChC;AAAA,EACF,CAAA,GAAG;AACL;AA+DA,MAAA,CAAO,iBAAiB,YAAA,EAAc;AAAA,EACpC,OAAA,EAAS;AAAA,IACP,UAAA,EAAY,IAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV,OAAOA;AAAS,GAClB;AAAA,EACA,QAAA,EAAU;AAAA,IACR,UAAA,EAAY,IAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV,KAAA,EAAO;AAAA;AAEX,CAAC,CAAA;;;;"}
@@ -0,0 +1,11 @@
1
+ import { CSVRecord, ParseBinaryOptions } from './common/types.ts';
2
+ /**
3
+ * Parse CSV Request to stream of records.
4
+ *
5
+ * @param request - Request to parse
6
+ * @param options - Parsing options
7
+ * @returns Stream of records
8
+ *
9
+ * @category Middle-level API
10
+ */
11
+ export declare function parseRequestToStream<Header extends ReadonlyArray<string>>(request: Request, options?: ParseBinaryOptions<Header>): ReadableStream<CSVRecord<Header>>;
@@ -0,0 +1,16 @@
1
+ import { getOptionsFromRequest } from './getOptionsFromRequest.js';
2
+ import { parseUint8ArrayStreamToStream } from './parseUint8ArrayStreamToStream.js';
3
+
4
+ function parseRequestToStream(request, options) {
5
+ const options_ = getOptionsFromRequest(
6
+ request,
7
+ options
8
+ );
9
+ if (request.body === null) {
10
+ throw new TypeError("Request body is null");
11
+ }
12
+ return parseUint8ArrayStreamToStream(request.body, options_);
13
+ }
14
+
15
+ export { parseRequestToStream };
16
+ //# sourceMappingURL=parseRequestToStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseRequestToStream.js","sources":["../src/parseRequestToStream.ts"],"sourcesContent":["import type { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { getOptionsFromRequest } from \"./getOptionsFromRequest.ts\";\nimport { parseUint8ArrayStreamToStream } from \"./parseUint8ArrayStreamToStream.ts\";\n\n/**\n * Parse CSV Request to stream of records.\n *\n * @param request - Request to parse\n * @param options - Parsing options\n * @returns Stream of records\n *\n * @category Middle-level API\n */\nexport function parseRequestToStream<Header extends ReadonlyArray<string>>(\n request: Request,\n options?: ParseBinaryOptions<Header>,\n): ReadableStream<CSVRecord<Header>> {\n const options_: ParseBinaryOptions<Header> = getOptionsFromRequest(\n request,\n options,\n );\n if (request.body === null) {\n throw new TypeError(\"Request body is null\");\n }\n return parseUint8ArrayStreamToStream(request.body, options_);\n}\n"],"names":[],"mappings":";;;AAaO,SAAS,oBAAA,CACd,SACA,OAAA,EACmC;AACnC,EAAA,MAAM,QAAA,GAAuC,qBAAA;AAAA,IAC3C,OAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,IAAA,EAAM;AACzB,IAAA,MAAM,IAAI,UAAU,sBAAsB,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,6BAAA,CAA8B,OAAA,CAAQ,IAAA,EAAM,QAAQ,CAAA;AAC7D;;;;"}
@@ -11,12 +11,7 @@ function parseResponse(response, options) {
11
11
  }
12
12
  return (async function* () {
13
13
  try {
14
- const result = parseUint8ArrayStream(response.body, options_);
15
- if (result instanceof Promise) {
16
- yield* await result;
17
- } else {
18
- yield* result;
19
- }
14
+ yield* parseUint8ArrayStream(response.body, options_);
20
15
  } catch (error) {
21
16
  commonParseErrorHandling(error);
22
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parseResponse.js","sources":["../src/parseResponse.ts"],"sourcesContent":["import type { CSVRecord, ParseOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport { getOptionsFromResponse } from \"./getOptionsFromResponse.ts\";\nimport { parseResponseToStream } from \"./parseResponseToStream.ts\";\nimport { parseUint8ArrayStream } from \"./parseUint8ArrayStream.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse HTTP Response what contains CSV to records,\n * ideal for smaller data sets.\n *\n * @remarks\n * This function automatically treats response headers.\n *\n * - If `Content-Type` header is not set, it assumes `text/csv`.\n * - If `Content-Type` header is not `text/csv`, it throws an error.\n * - If `Content-Type` header has charset parameter, it uses it for decoding.\n * - If `Content-Encoding` header is set, it decompresses the response.\n * - Should there be any conflicting information between the header and the options, the option's value will take precedence.\n *\n * @category Middle-level API\n * @param response\n * @param options\n * @returns Async iterable iterator of records.\n *\n * If you want array of records, use {@link parseResponse.toArray} function.\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * for await (const record of parseResponse(response)) {\n * console.log(record);\n * }\n * ```\n */\nexport function parseResponse<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n // Validate synchronously before creating async generator\n const options_ = getOptionsFromResponse(response, options);\n if (response.body === null) {\n throw new TypeError(\"Response body is null\");\n }\n\n // Return wrapper async generator for error handling\n return (async function* () {\n try {\n const result = parseUint8ArrayStream(response.body!, options_);\n if (result instanceof Promise) {\n yield* await result;\n } else {\n yield* result;\n }\n } catch (error) {\n commonParseErrorHandling(error);\n }\n })();\n}\n\nexport declare namespace parseResponse {\n /**\n * Parse CSV Response to array of records.\n *\n * @returns Array of records\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * const records = await parseResponse.toArray(response);\n * console.log(records);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse CSV Response to stream of records.\n *\n * @param response Response to parse\n * @returns Stream of records\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * await parseResponse.toStream(response)\n * .pipeTo(\n * new WritableStream({\n * write(record) {\n * console.log(record);\n * },\n * }),\n * );\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n */\n export function toStream<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n ): ReadableStream<CSVRecord<Header>>;\n}\n\nObject.defineProperties(parseResponse, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n toStreamSync: {\n enumerable: true,\n writable: false,\n value: parseResponseToStream,\n },\n});\n"],"names":["internal.convertThisAsyncIterableIteratorToArray"],"mappings":";;;;;;AAuCO,SAAS,aAAA,CACd,UACA,OAAA,EAC0C;AAE1C,EAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,QAAA,EAAU,OAAO,CAAA;AACzD,EAAA,IAAI,QAAA,CAAS,SAAS,IAAA,EAAM;AAC1B,IAAA,MAAM,IAAI,UAAU,uBAAuB,CAAA;AAAA,EAC7C;AAGA,EAAA,OAAA,CAAQ,mBAAmB;AACzB,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,qBAAA,CAAsB,QAAA,CAAS,IAAA,EAAO,QAAQ,CAAA;AAC7D,MAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,QAAA,OAAO,MAAM,MAAA;AAAA,MACf,CAAA,MAAO;AACL,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,wBAAA,CAAyB,KAAK,CAAA;AAAA,IAChC;AAAA,EACF,CAAA,GAAG;AACL;AAuDA,MAAA,CAAO,iBAAiB,aAAA,EAAe;AAAA,EACrC,OAAA,EAAS;AAAA,IACP,UAAA,EAAY,IAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV,OAAOA;AAAS,GAClB;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,UAAA,EAAY,IAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV,KAAA,EAAO;AAAA;AAEX,CAAC,CAAA;;;;"}
1
+ {"version":3,"file":"parseResponse.js","sources":["../src/parseResponse.ts"],"sourcesContent":["import type { CSVRecord, ParseOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport { getOptionsFromResponse } from \"./getOptionsFromResponse.ts\";\nimport { parseResponseToStream } from \"./parseResponseToStream.ts\";\nimport { parseUint8ArrayStream } from \"./parseUint8ArrayStream.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse HTTP Response what contains CSV to records,\n * ideal for smaller data sets.\n *\n * @remarks\n * This function automatically treats response headers.\n *\n * - If `Content-Type` header is not set, it assumes `text/csv`.\n * - If `Content-Type` header is not `text/csv`, it throws an error.\n * - If `Content-Type` header has charset parameter, it uses it for decoding.\n * - If `Content-Encoding` header is set, it decompresses the response.\n * - Should there be any conflicting information between the header and the options, the option's value will take precedence.\n *\n * @category Middle-level API\n * @param response\n * @param options\n * @returns Async iterable iterator of records.\n *\n * If you want array of records, use {@link parseResponse.toArray} function.\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * for await (const record of parseResponse(response)) {\n * console.log(record);\n * }\n * ```\n */\nexport function parseResponse<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n // Validate synchronously before creating async generator\n const options_ = getOptionsFromResponse(response, options);\n if (response.body === null) {\n throw new TypeError(\"Response body is null\");\n }\n\n // Return wrapper async generator for error handling\n return (async function* () {\n try {\n yield* parseUint8ArrayStream(response.body!, options_);\n } catch (error) {\n commonParseErrorHandling(error);\n }\n })();\n}\n\nexport declare namespace parseResponse {\n /**\n * Parse CSV Response to array of records.\n *\n * @returns Array of records\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * const records = await parseResponse.toArray(response);\n * console.log(records);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse CSV Response to stream of records.\n *\n * @param response Response to parse\n * @returns Stream of records\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * await parseResponse.toStream(response)\n * .pipeTo(\n * new WritableStream({\n * write(record) {\n * console.log(record);\n * },\n * }),\n * );\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n */\n export function toStream<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n ): ReadableStream<CSVRecord<Header>>;\n}\n\nObject.defineProperties(parseResponse, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n toStreamSync: {\n enumerable: true,\n writable: false,\n value: parseResponseToStream,\n },\n});\n"],"names":["internal.convertThisAsyncIterableIteratorToArray"],"mappings":";;;;;;AAuCO,SAAS,aAAA,CACd,UACA,OAAA,EAC0C;AAE1C,EAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,QAAA,EAAU,OAAO,CAAA;AACzD,EAAA,IAAI,QAAA,CAAS,SAAS,IAAA,EAAM;AAC1B,IAAA,MAAM,IAAI,UAAU,uBAAuB,CAAA;AAAA,EAC7C;AAGA,EAAA,OAAA,CAAQ,mBAAmB;AACzB,IAAA,IAAI;AACF,MAAA,OAAO,qBAAA,CAAsB,QAAA,CAAS,IAAA,EAAO,QAAQ,CAAA;AAAA,IACvD,SAAS,KAAA,EAAO;AACd,MAAA,wBAAA,CAAyB,KAAK,CAAA;AAAA,IAChC;AAAA,EACF,CAAA,GAAG;AACL;AAuDA,MAAA,CAAO,iBAAiB,aAAA,EAAe;AAAA,EACrC,OAAA,EAAS;AAAA,IACP,UAAA,EAAY,IAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV,OAAOA;AAAS,GAClB;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,UAAA,EAAY,IAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV,KAAA,EAAO;AAAA;AAEX,CAAC,CAAA;;;;"}
@@ -6,6 +6,9 @@ export * from './CSVLexerTransformer.ts';
6
6
  export * from './loadWASM.ts';
7
7
  export * from './parse.ts';
8
8
  export * from './parseBinary.ts';
9
+ export * from './parseBlob.ts';
10
+ export * from './parseFile.ts';
11
+ export * from './parseRequest.ts';
9
12
  export * from './parseResponse.ts';
10
13
  export * from './parseString.ts';
11
14
  export * from './parseStringStream.ts';
@@ -5,6 +5,9 @@ export { CSVLexerTransformer } from './CSVLexerTransformer.js';
5
5
  export { loadWASM } from './loadWASM.js';
6
6
  export { parse } from './parse.js';
7
7
  export { parseBinary } from './parseBinary.js';
8
+ export { parseBlob } from './parseBlob.js';
9
+ export { parseFile } from './parseFile.js';
10
+ export { parseRequest } from './parseRequest.js';
8
11
  export { parseResponse } from './parseResponse.js';
9
12
  export { parseString } from './parseString.js';
10
13
  export { parseStringStream } from './parseStringStream.js';
@@ -1 +1 @@
1
- {"version":3,"file":"web-csv-toolbox.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"web-csv-toolbox.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "web-csv-toolbox",
3
- "version": "0.13.1-next-afac98bd3a41b6e902268ac4ca6a99a8da883c81",
3
+ "version": "0.14.0-next-fe8f8c27b5fcf2744b32ad7dca0a70ed7f47c915",
4
4
  "description": "A CSV Toolbox utilizing Web Standard APIs.",
5
5
  "type": "module",
6
6
  "module": "dist/web-csv-toolbox.js",