Skip to content

Commit 483eed9

Browse files
committed
feat(v1.1.0): prompting input, credentials input
1 parent 48cac00 commit 483eed9

File tree

6 files changed

+5169
-5065
lines changed

6 files changed

+5169
-5065
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@
99
/tmp
1010
node_modules
1111
oclif.manifest.json
12+
*credentials.json

README.md

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,14 @@ a next-translate's tool for google spreadsheet, it can flatten 2D locale-key arr
99
<!-- toc -->
1010
* [Usage](#usage)
1111
* [Commands](#commands)
12+
* [Todos](#todos)
1213
<!-- tocstop -->
1314
# Usage
1415
<!-- usage -->
1516
```sh-session
1617
$ npm install -g @uppo/next-translate-spreadsheet-i18n-tool
18+
or
19+
$ yarn add -g @uppo/next-translate-spreadsheet-i18n-tool
1720
$ ntsit COMMAND
1821
running command...
1922
$ ntsit (--version)
@@ -26,7 +29,7 @@ USAGE
2629
<!-- usagestop -->
2730
# Commands
2831
<!-- commands -->
29-
* [`ntsit gen SHEETID WORKSHEETS HSTARTCELL VSTARTCELL`](#ntsit-gen-sheetid-worksheets-hstartcell-vstartcell)
32+
* [`ntsit gen`](#ntsit-gen)
3033
* [`ntsit help [COMMANDS]`](#ntsit-help-commands)
3134
* [`ntsit plugins`](#ntsit-plugins)
3235
* [`ntsit plugins:install PLUGIN...`](#ntsit-pluginsinstall-plugin)
@@ -38,19 +41,13 @@ USAGE
3841
* [`ntsit plugins:uninstall PLUGIN...`](#ntsit-pluginsuninstall-plugin-2)
3942
* [`ntsit plugins update`](#ntsit-plugins-update)
4043

41-
## `ntsit gen SHEETID WORKSHEETS HSTARTCELL VSTARTCELL`
44+
## `ntsit gen`
4245

4346
Start generating your files
4447

4548
```
4649
USAGE
47-
$ ntsit gen SHEETID WORKSHEETS HSTARTCELL VSTARTCELL
48-
49-
ARGUMENTS
50-
SHEETID google spreadsheet id
51-
WORKSHEETS google spreadsheet worksheet id
52-
HSTARTCELL horizontal start cell. e.g. C1
53-
VSTARTCELL vertical start cell. e.g. B3
50+
$ ntsit gen
5451
5552
DESCRIPTION
5653
Start generating your files
@@ -314,3 +311,13 @@ DESCRIPTION
314311
Update installed plugins.
315312
```
316313
<!-- commandsstop -->
314+
315+
# Todos
316+
<!-- todos -->
317+
- [ ] Optimize code: writeFile timing, logic, etc.
318+
- [ ] Add tests(btw: How to test a cli that results in some generated file ?)
319+
- [ ] Upgrade google-spredsheet to v4.
320+
- [ ] Change to Single Command CLI? (e.g. `ntsit` instead of `ntsit gen`).
321+
- [ ] Polish README.md: add demo gif, googlesheet template, tutorial for GCP(Google Cloud Platform) Authentication, etc.
322+
- [ ] Beautify console output: spinner, color, etc.
323+
<!-- todosstop -->

src/commands/gen/index.ts

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Args, Command} from '@oclif/core'
1+
import {Command, ux} from '@oclif/core'
22
import main from '../../runs/gen'
33

44
export default class Gen extends Command {
@@ -8,29 +8,6 @@ export default class Gen extends Command {
88
'$ ntsit gen 1sdfU3AZuFPzP_sDeDdpwa21S0BcH-ETVwNViuU9GqlB 3 C1 B3(./src/commands/gen/index.ts)',
99
];
1010

11-
static args = {
12-
sheetId: Args.string({
13-
description: 'google spreadsheet id',
14-
required: true,
15-
}),
16-
workSheets: Args.string({
17-
description: 'google spreadsheet worksheet id',
18-
required: true,
19-
// parse: input => {
20-
// if (input.includes(',')) return input.split(',').map(item => Number.parseInt(item, 10))
21-
// return Array.from({length: Number.parseInt(input, 10)}, (_, i) => i)
22-
// },
23-
}),
24-
hStartCell: Args.string({
25-
description: 'horizontal start cell. e.g. C1',
26-
required: true,
27-
}),
28-
vStartCell: Args.string({
29-
description: 'vertical start cell. e.g. B3',
30-
required: true,
31-
}),
32-
};
33-
3411
static parsedWorkSheets = (input: string): number[] => {
3512
if (input.includes(',')) return input.split(',').map(item => Number.parseInt(item, 10))
3613
return Array.from({length: Number.parseInt(input, 10)}, (_, i) => i)
@@ -52,9 +29,18 @@ export default class Gen extends Command {
5229
}
5330

5431
async run(): Promise<void> {
55-
const {args} = await this.parse(Gen)
56-
const {sheetId, workSheets, hStartCell, vStartCell} = args
57-
58-
await main(sheetId, Gen.parsedWorkSheets(workSheets), Gen.parsedCell(hStartCell), Gen.parsedCell(vStartCell))
32+
const sheetId = await ux.prompt('google spreadsheet id?')
33+
const workSheets = await ux.prompt('google spreadsheet worksheet id? count or indexs(e.g. 3 or 0,1,2)')
34+
const hStartCell = await ux.prompt('horizontal start cell?(e.g. C1)')
35+
const vStartCell = await ux.prompt('vertical start cell?(e.g. B3)')
36+
const credentialsPath = await ux.prompt('google credentials path? based on the current directory, use relative path')
37+
38+
await main({
39+
sheetId,
40+
sheetIndexs: Gen.parsedWorkSheets(workSheets),
41+
hStartCell: Gen.parsedCell(hStartCell),
42+
vStartCell: Gen.parsedCell(vStartCell),
43+
credentialsPath,
44+
})
5945
}
6046
}

src/runs/gen/gs_credentials.ts

Lines changed: 0 additions & 4 deletions
This file was deleted.

src/runs/gen/index.ts

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import {GoogleSpreadsheet, GoogleSpreadsheetWorksheet} from 'google-spreadsheet' // version: ^3.3.0
2-
import credentials from './gs_credentials'
1+
import {GoogleSpreadsheet, GoogleSpreadsheetWorksheet, ServiceAccountCredentials} from 'google-spreadsheet' // version: ^3.3.0
32
import fs from 'node:fs'
43
import path from 'node:path'
54

@@ -19,16 +18,14 @@ const compose = (...fns: { (str: string): string; (str: string): string }[]) =>
1918
}
2019
}
2120

22-
const validCredentials = (credentials: Record<string, string>) => {
23-
const {private_key, client_email} = credentials
24-
if (private_key === 'YOUR_PRIVATE_KEY' || client_email === 'YOUR_CLIENT_EMAIL') {
25-
throw new Error('Please set your credentials in src/runs/gen/gs_credentials.ts')
21+
const sheetInit = async (sheetId: string, sheetIndex: number, credentials: ServiceAccountCredentials) => {
22+
const doc = new GoogleSpreadsheet(sheetId)
23+
try {
24+
await doc.useServiceAccountAuth(credentials)
25+
} catch (error) {
26+
console.log('auth-error:', error)
2627
}
27-
}
2828

29-
const sheetInit = async (sheetId: string, sheetIndex: number) => {
30-
const doc = new GoogleSpreadsheet(sheetId)
31-
await doc.useServiceAccountAuth(credentials)
3229
await doc.loadInfo()
3330
const sheet = doc.sheetsByIndex[sheetIndex]
3431
await sheet.loadCells()
@@ -78,28 +75,29 @@ const getKeys = async (sheet: GoogleSpreadsheetWorksheet, cell: {x: number, y: n
7875
return keys
7976
}
8077

81-
/**
82-
*
83-
* @param {string} sheetId google sheet id
84-
* @param {number[]} sheetIndexs google worksheet index
85-
* @param {{x: number, y: number}} hStartCell horizontal start cell
86-
* @param {{x: number, y: number}} vStartCell vertical start cell
87-
* @returns {Promise<void>} void
88-
*/
89-
const main = async (
78+
type MainArgs = {
9079
sheetId: string,
9180
sheetIndexs: number[],
92-
hStartCell:{x: number, y: number},
93-
vStartCell:{x: number, y: number},
94-
): Promise<void> => {
95-
validCredentials(credentials)
96-
81+
hStartCell: {x: number, y: number},
82+
vStartCell: {x: number, y: number},
83+
credentialsPath: string
84+
}
85+
const main = async ({
86+
sheetId,
87+
sheetIndexs,
88+
hStartCell,
89+
vStartCell,
90+
credentialsPath,
91+
}: MainArgs): Promise<void> => {
9792
const localesJsonMap: Record<string, Record<string, string>> = {}
98-
const firstSheet = await sheetInit(sheetId, sheetIndexs[0])
93+
const resultPath = path.join(process.cwd(), credentialsPath)
94+
console.log('resultPath:', resultPath)
95+
const credentials = JSON.parse(fs.readFileSync(resultPath, 'utf-8'))
96+
const firstSheet = await sheetInit(sheetId, sheetIndexs[0], credentials)
9997
const locales = await getLocales(firstSheet, hStartCell)
10098

10199
sheetIndexs.forEach(async sheetIndex => {
102-
const sheet = await sheetInit(sheetId, sheetIndex)
100+
const sheet = await sheetInit(sheetId, sheetIndex, credentials)
103101
const keys = await getKeys(sheet, vStartCell)
104102

105103
for (let i = 0; i < locales.length; i++) {

0 commit comments

Comments
 (0)