diff --git a/README.md b/README.md index 1b57bfb..eb48039 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,6 @@ This library automatically generates TypeScript types (`*.d.ts`) by parsing Goog - Generate types(`*.d.ts`) for Google Sheets at the desired location - Customize the type and type file name -### TODO - -- CLI (`npx google-spreadsheet-dts ...`) -- Private Google Sheets parser - ## 📦 Install ```bash @@ -44,6 +39,8 @@ import { generateDts } from 'google-spreadsheet-dts'; import { resolve } from 'node:path'; import { publicGoogleSheetsParser } from 'google-spreadsheet-dts/parser'; +import PublicGoogleSheetsParser from 'public-google-sheets-parser'; + generateDts({ name: 'GoogleSheets', directory: resolve(__dirname, '../src'), @@ -58,15 +55,13 @@ generateDts({ ] } - // Specify the Google Sheets to parse - parser: publicGoogleSheetsParser({ - spreadSheetId: '1j23zhzHcPd_LzDQ7uPrXgMJfPoZYs289boUKoKnAjUo', - path: ['Key', 'Property'], - typeName: 'Type', - publicGoogleSheetsParser: { - sheetName: 'ParserTest', + parser: publicGoogleSheetsParser( + new PublicGoogleSheetsParser(/* ... */), + { + path: ['Key', 'Property'], + typeName: 'Type', }, - }), + ), }); ``` @@ -86,6 +81,8 @@ const { generateDts } = require('google-spreadsheet-dts'); const { resolve } = require('node:path'); const { publicGoogleSheetsParser } = require('google-spreadsheet-dts/parser'); +const PublicGoogleSheetsParser = require('public-google-sheets-parser'); + generateDts({ name: 'GoogleSheets', directory: resolve(__dirname, '../src'), @@ -99,14 +96,13 @@ generateDts({ ] } - parser: publicGoogleSheetsParser({ - spreadSheetId: '1j23zhzHcPd_LzDQ7uPrXgMJfPoZYs289boUKoKnAjUo', - path: ['Key', 'Property'], - typeName: 'Type', - publicGoogleSheetsParser: { - sheetName: 'ParserTest', + parser: publicGoogleSheetsParser( + new PublicGoogleSheetsParser(/* ... */), + { + path: ['Key', 'Property'], + typeName: 'Type', }, - }), + ), }); ``` diff --git a/src/__tests__/parser.test.ts b/src/__tests__/parser.test.ts index c74324f..bfa1165 100644 --- a/src/__tests__/parser.test.ts +++ b/src/__tests__/parser.test.ts @@ -1,12 +1,19 @@ import { describe, it, expect } from 'vitest'; import { publicGoogleSheetsParser } from '../parser'; - -const SPREADSHEET_ID = '1j23zhzHcPd_LzDQ7uPrXgMJfPoZYs289boUKoKnAjUo'; +import PublicGoogleSheetsParser from 'public-google-sheets-parser'; // https://docs.google.com/spreadsheets/d/1j23zhzHcPd_LzDQ7uPrXgMJfPoZYs289boUKoKnAjUo/edit#gid=0 const SHEET_NAME = 'ParserTest'; +const SPREADSHEET_ID = '1j23zhzHcPd_LzDQ7uPrXgMJfPoZYs289boUKoKnAjUo'; describe('publicGoogleSheetsParser', () => { + const publicGoogleSheetsParserInstance = new PublicGoogleSheetsParser( + SPREADSHEET_ID, + { + sheetName: SHEET_NAME, + }, + ); + const expected = { click_conversation_data: { conversation_id: 'string', @@ -24,31 +31,25 @@ describe('publicGoogleSheetsParser', () => { }; it('Common forms', async () => { - const parsed = await publicGoogleSheetsParser({ - spreadsheetId: SPREADSHEET_ID, - path: ['Key', 'Property'], - typeName: 'Type', - options: { - publicGoogleSheetsParser: { - sheetName: SHEET_NAME, - }, + const parsed = await publicGoogleSheetsParser( + publicGoogleSheetsParserInstance, + { + path: ['Key', 'Property'], + typeName: 'Type', }, - })(); + )(); expect(parsed).toEqual(expected); }); it('With empty lines', async () => { - const parsed = await publicGoogleSheetsParser({ - spreadsheetId: SPREADSHEET_ID, - path: ['Key', 'Property'], - typeName: 'Type', - options: { - publicGoogleSheetsParser: { - sheetName: `${SHEET_NAME}-EmptyLines`, - }, + const parsed = await publicGoogleSheetsParser( + publicGoogleSheetsParserInstance, + { + path: ['Key', 'Property'], + typeName: 'Type', }, - })(); + )(); expect(parsed).toEqual(expected); }); diff --git a/src/parser/README.md b/src/parser/README.md index 0f8a6b6..536cd88 100644 --- a/src/parser/README.md +++ b/src/parser/README.md @@ -5,7 +5,7 @@ ## public-google-sheets-parser -A parser that parses public Google Sheets. This parser uses [public-google-sheets-parser](https://github.com/fureweb-com/public-google-sheets-parser). +A parser that parses **public** Google Sheets. This parser uses [public-google-sheets-parser](https://github.com/fureweb-com/public-google-sheets-parser). ### Usage @@ -13,14 +13,16 @@ A parser that parses public Google Sheets. This parser uses [public-google-sheet import { generateDts } from 'google-spreadsheet-dts'; import { publicGoogleSheetsParser } from 'google-spreadsheet-dts/parser'; -const parser = publicGoogleSheetsParser({ - spreadSheetId: '1j23zhzHcPd_LzDQ7uPrXgMJfPoZYs289boUKoKnAjUo', - path: ['Key', 'Property'], - typeName: 'Type', - publicGoogleSheetsParser: { - sheetName: 'ParserTest', +import PublicGoogleSheetsParser from 'public-google-sheets-parser'; + +const parser = publicGoogleSheetsParser( + new PublicGoogleSheetsParser(/* ... */), + { + publicGoogleSheetsParserInstance, + path: ['Key', 'Property'], + typeName: 'Type', }, -}); +); generateDts({ name: 'GoogleSheets', @@ -34,23 +36,18 @@ generateDts({ #### `publicGoogleSheetsParser` ```ts -function publicGoogleSheetsParser(options: { - spreadSheetId: string; - path: string[]; - typeName: string; - publicGoogleSheetsParser: PublicGoogleSheetsParserOptions; -}): Parser; - -type PublicGoogleSheetsParserOptions = { - sheetName: string; -}; +function publicGoogleSheetsParser( + publicGoogleSheetsParserInstance: PublicGoogleSheetsParser, + params: { + path: string[]; + typeName: string; + }, +): Parser; ``` -- `spreadSheetId`: Google Sheets ID +- `publicGoogleSheetsParserInstance`: An instance of [`PublicGoogleSheetsParser`](https://github.com/fureweb-com/public-google-sheets-parser?tab=readme-ov-file#usage-example) - `path`: List of column names where object property names exists - `typeName`: Column name where the type name exists -- `publicGoogleSheets` - - `sheetName`: Google Sheets sheet name For example, given the following Google Sheets: diff --git a/src/parser/publicGoogleSheetsParser.ts b/src/parser/publicGoogleSheetsParser.ts index a5c9e74..f329532 100644 --- a/src/parser/publicGoogleSheetsParser.ts +++ b/src/parser/publicGoogleSheetsParser.ts @@ -1,30 +1,20 @@ // Parser for public-google-sheets-parser // https://github.com/fureweb-com/public-google-sheets-parser -import PublicGoogleSheetsParser from 'public-google-sheets-parser'; +import type PublicGoogleSheetsParser from 'public-google-sheets-parser'; -type SheetName = string; -type PublicGoogleSheetsParserOptions = { sheetName: SheetName }; - -type Options = Partial<{ - publicGoogleSheetsParser: PublicGoogleSheetsParserOptions; -}>; - -type Params = { - spreadsheetId: string; +type PublicGoogleSheetsParserParams = { path: string[]; typeName: string; - options?: Options; }; export const publicGoogleSheetsParser = - ({ spreadsheetId, path, typeName, options }: Params) => + ( + publicGoogleSheetsParserInstance: PublicGoogleSheetsParser, + { path, typeName }: PublicGoogleSheetsParserParams, + ) => async (): Promise => { - const parser = new PublicGoogleSheetsParser( - spreadsheetId, - options?.publicGoogleSheetsParser, - ); - const data = await parser.parse(); + const data = await publicGoogleSheetsParserInstance.parse(); const filledData = data.map((item, index, data) => { if (index === 0) {