cmk-checklist
Advanced tools
Comparing version 0.90.2 to 0.90.3
@@ -28,3 +28,3 @@ export declare type Encoding = 'Shift_JIS' | 'ISO-2022-JP' | 'EUC-JP' | 'UTF-8'; | ||
circleNameYomi: string; | ||
penName: string; | ||
penName?: string; | ||
bookName?: string; | ||
@@ -50,3 +50,3 @@ url?: string; | ||
circleNameYomi: string; | ||
penName: string; | ||
penName?: string; | ||
memo?: string; | ||
@@ -73,5 +73,7 @@ colorNumber?: number; | ||
colors: ChecklistColor[]; | ||
constructor(header: ChecklistHeader, circles?: ChecklistCircle[] | null, unknowns?: ChecklistUnknown[] | null, colors?: ChecklistColor[] | null); | ||
constructor(); | ||
constructor(comiketNumber: number); | ||
constructor(header: ChecklistHeader, circle?: ChecklistCircle[], unknowns?: ChecklistUnknown[], colors?: ChecklistColor[]); | ||
getComiketNumber(): number | null; | ||
setComiketNumber(num: number): void; | ||
} |
"use strict"; | ||
const main_1 = require('./main'); | ||
class Checklist { | ||
constructor(header, circles, unknowns, colors) { | ||
this.header = header; | ||
this.circles = circles || []; | ||
this.unknowns = unknowns || []; | ||
this.colors = colors || []; | ||
constructor(p1, p2, p3, p4) { | ||
if (!p1 || typeof p1 === 'number') { | ||
const comiketNumber = p1 || main_1.CompliantComiketNumber; | ||
this.header = { | ||
eventName: 'ComicMarket' + comiketNumber, | ||
encoding: 'UTF-8', | ||
programSignature: 'cmk-checklist ' + main_1.Version, | ||
}; | ||
this.circles = []; | ||
this.unknowns = []; | ||
this.colors = []; | ||
} | ||
else { | ||
this.header = p1; | ||
this.circles = p2 || []; | ||
this.unknowns = p3 || []; | ||
this.colors = p4 || []; | ||
} | ||
} | ||
@@ -9,0 +23,0 @@ getComiketNumber() { |
@@ -36,5 +36,3 @@ "use strict"; | ||
if (typeof input === 'string') { | ||
if (detected === 'UNICODE' || detected == 'ASCII') { | ||
resolve(ret); | ||
} | ||
resolve(ret); | ||
} | ||
@@ -140,3 +138,2 @@ if (detected === 'ASCII') { | ||
let circleNameYomi = readAsStr(row[11]); | ||
const penName = readAsStr(row[12]); | ||
let spaceNumberSub = readAsNum(row[21]); | ||
@@ -150,3 +147,3 @@ if (serialNumber === undefined) { | ||
if (circleNameYomi === undefined) { | ||
throw new Error(`Circle name yomigana is not defined(row: ${rowNumber})`); | ||
throw new Error(`Circle name yomigana is not defined (row: ${rowNumber})`); | ||
} | ||
@@ -156,5 +153,2 @@ else { | ||
} | ||
if (penName === undefined) { | ||
throw new Error(`Pen name is not defined (row: ${rowNumber})`); | ||
} | ||
if (week && ['日', '月', '火', '水', '木', '金', '土'].indexOf(week) < 0) { | ||
@@ -181,3 +175,3 @@ week = undefined; | ||
circleNameYomi: circleNameYomi, | ||
penName: penName, | ||
penName: readAsStr(row[12]), | ||
bookName: readAsStr(row[13]), | ||
@@ -207,3 +201,2 @@ url: readAsStr(row[14]), | ||
let circleNameYomi = readAsStr(row[2]); | ||
const penName = readAsStr(row[3]); | ||
if (circleName === undefined) { | ||
@@ -213,3 +206,3 @@ throw new Error(`Circle name is not defined (row: ${rowNumber})`); | ||
if (circleNameYomi === undefined) { | ||
throw new Error(`Circle name yomigana is not defined(row: ${rowNumber})`); | ||
throw new Error(`Circle name yomigana is not defined (row: ${rowNumber})`); | ||
} | ||
@@ -219,9 +212,6 @@ else { | ||
} | ||
if (penName === undefined) { | ||
throw new Error(`Pen name is not defined (row: ${rowNumber})`); | ||
} | ||
return { | ||
circleName: circleName, | ||
circleNameYomi: circleNameYomi, | ||
penName: penName, | ||
penName: readAsStr(row[3]), | ||
memo: readAsStr(row[4]), | ||
@@ -228,0 +218,0 @@ colorNumber: readAsNum(row[5]), |
/// <reference types="node" /> | ||
import { Checklist, Encoding } from './checklist'; | ||
export declare const Version: string; | ||
export declare const CompliantComiketNumber: number; | ||
export { Checklist } from './checklist'; | ||
export declare function parseChecklistCSV(input: string | Uint8Array | Buffer): Promise<string[][]>; | ||
@@ -5,0 +7,0 @@ export declare function parseChecklistCSV(input: string | Uint8Array | Buffer, callback: (error?: Error, cells?: string[][]) => void): void; |
"use strict"; | ||
const lib = require('./lib'); | ||
exports.Version = require('./../package.json').version; | ||
exports.CompliantComiketNumber = require('./../package.json').compliantComiketNumber; | ||
var checklist_1 = require('./checklist'); | ||
exports.Checklist = checklist_1.Checklist; | ||
function parseChecklistCSV(input, callback) { | ||
@@ -5,0 +8,0 @@ if (!callback) { |
{ | ||
"name": "cmk-checklist", | ||
"version": "0.90.2", | ||
"version": "0.90.3", | ||
"compliantComiketNumber": 90, | ||
@@ -5,0 +5,0 @@ "description": "Read/Write CSV files for Comiket catalog checklist", |
@@ -7,2 +7,77 @@ # cmk-checklist | ||
## installation | ||
``` | ||
npm install cmk-checklist | ||
``` | ||
## Usage | ||
### read | ||
```javascript | ||
const checklist = require('cmk-checklist'); | ||
const fs = require('fs'); | ||
// checklist.csvを読み込み | ||
const file = fs.readFileSync('./checklist.csv'); | ||
checklist.read(file).then((result) => { | ||
console.log(result.header.eventName); | ||
}).catch((error) => { | ||
console.log(error); | ||
}); | ||
// Async/Await形式で読み込み | ||
async function read() { | ||
const result = await checklist.read(file); | ||
console.log(result.header.eventName); | ||
}); | ||
// Callbackを設定 | ||
checklist.read(file, (err, result) => { | ||
if (err) console.log(err); | ||
else console.log(result.header.eventName); | ||
}); | ||
``` | ||
### write | ||
```javascript | ||
const checklist = require('cmk-checklist'); | ||
const fs = require('fs'); | ||
async function write() { | ||
// 既存のチェックリストを読み込み | ||
const file = fs.readFileSync('./checklist.csv'); | ||
let checklist = await checklist.read(file); | ||
// チェックリストを新規作成 | ||
checklist = new checklist.Checklist(); | ||
// コミケ開催番号を指定して作成 | ||
checklist = new checklist.Checklist(90); | ||
// サークルを追加 | ||
checklist.circles.append({ | ||
serialNumber: 129936, | ||
colorNumber: 1, | ||
pageNumber: 831, | ||
cutIndex: 21, | ||
week: '金', | ||
area: '西', | ||
block: 'れ', | ||
spaceNumber: 19, | ||
spaceNumberSub: 'a', | ||
genreCode: 112, | ||
circleName: 'apricot+', | ||
circleNameYomi: 'アプリコットプラス', | ||
penName: '蒼樹うめ', | ||
}); | ||
// チェックリストを書き込み | ||
const output = await checklist.write(checklist); | ||
fs.writeFileSync('./output.csv', new Buffer(output)); | ||
} | ||
``` | ||
## license | ||
@@ -9,0 +84,0 @@ |
@@ -0,1 +1,3 @@ | ||
import {Version, CompliantComiketNumber} from './main'; | ||
export type Encoding = 'Shift_JIS' | 'ISO-2022-JP' | 'EUC-JP' | 'UTF-8'; | ||
@@ -33,3 +35,3 @@ | ||
circleNameYomi: string; | ||
penName: string; | ||
penName?: string; | ||
bookName?: string; | ||
@@ -56,3 +58,3 @@ url?: string; | ||
circleNameYomi: string; | ||
penName: string; | ||
penName?: string; | ||
memo?: string; | ||
@@ -82,12 +84,28 @@ colorNumber?: number; | ||
constructor(); | ||
constructor(comiketNumber: number); | ||
constructor(header: ChecklistHeader, circle?: ChecklistCircle[], unknowns?: ChecklistUnknown[], colors?: ChecklistColor[]); | ||
constructor( | ||
header: ChecklistHeader, | ||
circles?: ChecklistCircle[] | null, | ||
unknowns?: ChecklistUnknown[] | null, | ||
colors?: ChecklistColor[] | null | ||
p1?: ChecklistHeader | number, | ||
p2?: ChecklistCircle[], | ||
p3?: ChecklistUnknown[], | ||
p4?: ChecklistColor[] | ||
) { | ||
this.header = header; | ||
this.circles = circles || []; | ||
this.unknowns = unknowns || []; | ||
this.colors = colors || []; | ||
if (!p1 || typeof p1 === 'number') { | ||
const comiketNumber = p1 || CompliantComiketNumber; | ||
this.header = { | ||
eventName: 'ComicMarket' + comiketNumber, | ||
encoding: 'UTF-8', | ||
programSignature: 'cmk-checklist ' + Version, | ||
}; | ||
this.circles = []; | ||
this.unknowns = []; | ||
this.colors = []; | ||
} | ||
else { | ||
this.header = p1; | ||
this.circles = p2 || []; | ||
this.unknowns = p3 || []; | ||
this.colors = p4 || []; | ||
} | ||
} | ||
@@ -94,0 +112,0 @@ |
@@ -33,5 +33,3 @@ import * as parse from 'csv-parse'; | ||
if (typeof input === 'string') { | ||
if (detected === 'UNICODE' || detected == 'ASCII') { | ||
resolve(ret); | ||
} | ||
resolve(ret); | ||
} | ||
@@ -140,3 +138,2 @@ if (detected === 'ASCII') { | ||
let circleNameYomi = readAsStr(row[11]); | ||
const penName = readAsStr(row[12]); | ||
let spaceNumberSub = readAsNum(row[21]); | ||
@@ -150,9 +147,6 @@ if (serialNumber === undefined) { | ||
if (circleNameYomi === undefined) { | ||
throw new Error(`Circle name yomigana is not defined(row: ${rowNumber})`); | ||
throw new Error(`Circle name yomigana is not defined (row: ${rowNumber})`); | ||
} else { | ||
circleNameYomi = Encoding.toZenkanaCase(circleNameYomi); | ||
} | ||
if (penName === undefined) { | ||
throw new Error(`Pen name is not defined (row: ${rowNumber})`); | ||
} | ||
if (week && ['日', '月', '火', '水', '木', '金', '土'].indexOf(week) < 0) { | ||
@@ -180,3 +174,3 @@ week = undefined; | ||
circleNameYomi: circleNameYomi, | ||
penName: penName, | ||
penName: readAsStr(row[12]), | ||
bookName: readAsStr(row[13]), | ||
@@ -208,3 +202,2 @@ url: readAsStr(row[14]), | ||
let circleNameYomi = readAsStr(row[2]); | ||
const penName = readAsStr(row[3]); | ||
if (circleName === undefined) { | ||
@@ -214,9 +207,6 @@ throw new Error(`Circle name is not defined (row: ${rowNumber})`); | ||
if (circleNameYomi === undefined) { | ||
throw new Error(`Circle name yomigana is not defined(row: ${rowNumber})`); | ||
throw new Error(`Circle name yomigana is not defined (row: ${rowNumber})`); | ||
} else { | ||
circleNameYomi = Encoding.toZenkanaCase(circleNameYomi); | ||
} | ||
if (penName === undefined) { | ||
throw new Error(`Pen name is not defined (row: ${rowNumber})`); | ||
} | ||
@@ -226,3 +216,3 @@ return { | ||
circleNameYomi: circleNameYomi, | ||
penName: penName, | ||
penName: readAsStr(row[3]), | ||
memo: readAsStr(row[4]), | ||
@@ -229,0 +219,0 @@ colorNumber: readAsNum(row[5]), |
import * as lib from './lib'; | ||
import {Checklist, Encoding} from './checklist'; | ||
export const Version: string = require('./../package.json').version; | ||
export const CompliantComiketNumber: number = require('./../package.json').compliantComiketNumber; | ||
export {Checklist} from './checklist'; | ||
export function parseChecklistCSV(input: string | Uint8Array | Buffer): Promise<string[][]> | ||
@@ -7,0 +10,0 @@ export function parseChecklistCSV(input: string | Uint8Array | Buffer, callback: (error?: Error, cells?: string[][]) => void): void; |
@@ -0,1 +1,4 @@ | ||
/// <reference path="./../node_modules/typescript/lib/lib.es6.d.ts" /> | ||
/// <reference path="./../node_modules/@types/mocha/index.d.ts" /> | ||
import * as assert from 'power-assert'; | ||
@@ -180,2 +183,37 @@ import * as fs from 'fs'; | ||
it('should fail on missing required column', () => { | ||
const header = 'Header,ComicMarketCD-ROMCatalog,ComicMarket90,UTF-8,Web 1.90.1\n'; | ||
const str1 = header + `Circle,212965,0,,,×,×,×,XX,100,"name","yomi","","","","","","",,,"",0,"","","",""`; | ||
const str2 = header + `Circle,,0,,,×,×,×,XX,100,"name","yomi","","","","","","",,,"",0,"","","",""`; | ||
const str3 = header + `Circle,212965,0,,,×,×,×,XX,100,,"yomi","","","","","","",,,"",0,"","","",""`; | ||
const str4 = header + `Circle,212965,0,,,×,×,×,XX,100,"name",,"","","","","","",,,"",0,"","","",""`; | ||
const str5 = header + `UnKnown,"name","yomi","","",0,"","","",""`; | ||
const str6 = header + `UnKnown,,"yomi","","",0,"","","",""`; | ||
const str7 = header + `UnKnown,"name",,"","",0,"","","",""`; | ||
return Promise.all([ | ||
index.read(str1).then((result) => { | ||
assert.equal(result.circles[0].serialNumber, 212965); | ||
}), | ||
index.read(str2).then(assert.fail, (error) => { | ||
assert.equal(error.message, 'Circle serial number is not defined (row: 2)'); | ||
}), | ||
index.read(str3).then(assert.fail, (error) => { | ||
assert.equal(error.message, 'Circle name is not defined (row: 2)'); | ||
}), | ||
index.read(str4).then(assert.fail, (error) => { | ||
assert.equal(error.message, 'Circle name yomigana is not defined (row: 2)'); | ||
}), | ||
index.read(str5).then((result) => { | ||
assert.equal(result.unknowns[0].colorNumber, 0); | ||
}), | ||
index.read(str6).then(assert.fail, (error) => { | ||
assert.equal(error.message, 'Circle name is not defined (row: 2)'); | ||
}), | ||
index.read(str7).then(assert.fail, (error) => { | ||
assert.equal(error.message, 'Circle name yomigana is not defined (row: 2)'); | ||
}), | ||
]); | ||
}); | ||
it('should convert zenkaku to hankaku', () => { | ||
@@ -182,0 +220,0 @@ const header = 'Header,ComicMarketCD-ROMCatalog,ComicMarket90,UTF-8,Web 1.90.1\n'; |
53773
1340
89