version bump 0.10.2: infrastructure

- typescript definitions
- fixed vulnerable regexes (h/t @davisjam)
This commit is contained in:
SheetJS 2018-02-20 22:35:31 -05:00
parent 71f827c4fa
commit f6de1799c4
20 changed files with 194 additions and 34 deletions

View File

@ -2,19 +2,23 @@
"env": { "shared-node-browser":true },
"globals": {},
"parserOptions": {
"ecmaVersion": 3,
"ecmaVersion": 3
},
"plugins": [ "html", "json" ],
"extends": "eslint:recommended",
"rules": {
"comma-style": [ 2, "last" ],
"comma-dangle": [ 2, "never" ],
"curly": 0,
"no-bitwise": 0,
"no-console": 0,
"no-control-regex": 0,
"no-empty": 0,
"no-trailing-spaces": 2,
"no-use-before-define": [ 1, {
"functions":false, "classes":true, "variables":false
}],
"no-bitwise": 0,
"curly": 0,
"comma-style": [ 2, "last" ],
"no-trailing-spaces": 2,
"semi": [ 2, "always" ],
"comma-dangle": [ 2, "never" ]
"no-useless-escape": 0,
"semi": [ 2, "always" ]
}
}

View File

@ -27,3 +27,8 @@ misc/flowdeps.js
[options]
module.file_ext=.js
module.file_ext=.njs
module.ignore_non_literal_requires=true
suppress_comment= \\(.\\|\n\\)*\\$FlowIgnore
[lints]
deprecated-declare-exports=off

View File

@ -13,20 +13,27 @@ tmp
*.[pP][rR][nN]
*.[sS][lL][kK]
*.socialcalc
*.[xX][lL][sSwWcC]
*.[xX][lL][sS][xXmMbB]
*.[xX][lL][sSwWcCaAtTmM]
*.[xX][lL][sSaAtT][xXmMbB]
*.[oO][dD][sS]
*.[fF][oO][dD][sS]
*.[xX][mM][lL]
*.[uU][oO][sS]
*.[wW][kKqQbB][S1234567890]
*.[qQ][pP][wW]
*.[bB][iI][fF][fF][23458]
*.[rR][tT][fF]
*.[eE][tT][hH]
*.123
*.htm
*.html
*.sheetjs
*.exe
*.img
.gitignore
.gitattributes
.fossaignore
.spelling
.eslintrc
.jshintrc
Makefile

9
.spelling Normal file
View File

@ -0,0 +1,9 @@
# ssf.js (C) 2013-present SheetJS -- http://sheetjs.com
SheetJS
ssf
ECMA-376
xls
xlsb
npm

View File

@ -60,6 +60,9 @@ ctestserv: ## Start a test server on port 8000
## Code Checking
.PHONY: fullint
fullint: lint old-lint tslint flow mdlint ## Run all checks
.PHONY: lint
lint: $(TARGET) $(AUXTARGETS) ## Run eslint checks
@eslint --ext .js,.njs,.json,.html,.htm $(TARGET) $(AUXTARGETS) $(CMDS) $(HTMLLINT) package.json bower.json
@ -68,13 +71,18 @@ lint: $(TARGET) $(AUXTARGETS) ## Run eslint checks
.PHONY: old-lint
old-lint: $(TARGET) $(AUXTARGETS) ## Run jshint and jscs checks
@jshint --show-non-errors $(TARGET) $(AUXTARGETS)
@jshint --show-non-errors test/
@jshint --show-non-errors $(CMDS)
@jshint --show-non-errors package.json
@jshint --show-non-errors package.json test/
@jshint --show-non-errors --extract=always $(HTMLLINT)
@jscs $(TARGET) $(AUXTARGETS)
@jscs $(TARGET) $(AUXTARGETS) test/*.js
if [ -e $(CLOSURE) ]; then java -jar $(CLOSURE) $(REQS) $(FLOWTARGET) --jscomp_warning=reportUnknownTypes >/dev/null; fi
.PHONY: tslint
tslint: $(TARGET) ## Run typescript checks
#@npm install dtslint typescript
#@npm run-script dtslint
dtslint types
.PHONY: flow
flow: lint ## Run flow checker
@flow check --all --show-all-errors
@ -97,6 +105,11 @@ full_coveralls:
coveralls: ## Coverage Test + Send to coveralls.io
MINTEST=1 make full_coveralls
MDLINT=README.md
.PHONY: mdlint
mdlint: $(MDLINT) ## Check markdown documents
alex $^
mdspell -a -n -x -r --en-us $^
.PHONY: help
help:

View File

@ -1,6 +1,6 @@
# [SheetJS SSF](http://sheetjs.com)
ssf (SpreadSheet Format) is a pure-JS library to format data using ECMA-376
ssf (SpreadSheet Format) is a pure JS library to format data using ECMA-376
spreadsheet format codes (used in popular spreadsheet software packages).
@ -23,9 +23,8 @@ The browser exposes a variable `SSF`
When installed globally, npm installs a script `ssf` that renders the format
string with the given arguments. Running the script with `-h` displays help.
The script will manipulate `module.exports` if available (e.g. in a CommonJS
`require` context). This is not always desirable. To prevent the behavior,
define `DO_NOT_EXPORT_SSF`.
The script will manipulate `module.exports` if available . This is not always
desirable. To prevent the behavior, define `DO_NOT_EXPORT_SSF`.
## Usage
@ -41,7 +40,7 @@ The options argument may contain the following keys:
| Option Name | Default | Description |
| :---------- | :-----: | :--------------------------------------------------- |
| date1904 | false | Use 1904 date system if true, 1900 system if false |
| `date1904` | false | Use 1904 date system if true, 1900 system if false |
### Manipulating the Internal Format Table
@ -89,8 +88,9 @@ granted by the Apache 2.0 license are reserved by the Original Author.
## References
- [ECMA-376] Office Open XML File Formats
- [MS-XLSB] Excel (.xlsb) Binary File Format
- `ECMA-376`: Office Open XML File Formats
- `MS-XLS`: Excel Binary File Format (.xls) Structure Specification
- `MS-XLSB`: Excel (.xlsb) Binary File Format
## Badges

View File

@ -2,6 +2,7 @@
/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */
/* eslint-env node */
/* eslint no-console:0 */
/*jshint node:true */
var X = require('../');
var argv = process.argv.slice(2);
if(argv.length < 2 || argv[0] == "-h" || argv[0] == "--help") {

View File

@ -1 +1 @@
SSF.version = '0.10.1';
SSF.version = '0.10.2';

View File

@ -1,5 +1,5 @@
var cfregex = /\[[=<>]/;
var cfregex2 = /\[([=<>]*)(-?\d+\.?\d*)\]/;
var cfregex2 = /\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;
function chkcond(v, rr) {
if(rr == null) return false;
var thresh = parseFloat(rr[2]);

View File

@ -27,6 +27,7 @@ a { text-decoration: none }
<script>
/*jshint browser:true */
/*eslint-env browser */
/*eslint no-use-before-define:0 */
/*global SSF */
var F = document.getElementById('fmt');
var V = document.getElementById('val');
@ -55,8 +56,6 @@ if(F.addEventListener) {
}
update();
</script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-36810333-1']);
_gaq.push(['_trackPageview']);

View File

@ -1,6 +1,6 @@
{
"name": "ssf",
"version": "0.10.1",
"version": "0.10.2",
"author": "sheetjs",
"description": "Format data using ECMA-376 spreadsheet Format Codes",
"keywords": [ "format", "sprintf", "spreadsheet" ],
@ -8,24 +8,31 @@
"ssf": "./bin/ssf.njs"
},
"main": "./ssf",
"types": "types",
"dependencies": {
"frac":"~1.1.0"
"frac":"~1.1.2"
},
"devDependencies": {
"mocha":"~2.5.3",
"mocha": "~2.5.3",
"blanket": "~1.2.3",
"@sheetjs/uglify-js":"~2.7.3"
"@sheetjs/uglify-js":"~2.7.3",
"@types/node":"^8.0.7",
"dtslint": "^0.1.2",
"typescript": "2.2.0"
},
"repository": { "type":"git", "url":"git://github.com/SheetJS/ssf.git" },
"scripts": {
"test": "make test"
"test": "make test",
"build": "make",
"lint": "make fullint",
"dtslint": "dtslint types"
},
"config": {
"blanket": {
"pattern": "ssf.js"
}
},
"homepage": "https://oss.sheetjs.com/ssf",
"homepage": "http://sheetjs.com/opensource",
"bugs": { "url": "https://github.com/SheetJS/ssf/issues" },
"license": "Apache-2.0",
"engines": { "node": ">=0.8" }

View File

@ -4,7 +4,7 @@
/*:: declare var DO_NOT_EXPORT_SSF: any; */
var SSF/*:SSFModule*/ = ({}/*:any*/);
var make_ssf = function make_ssf(SSF/*:SSFModule*/){
SSF.version = '0.10.1';
SSF.version = '0.10.2';
function _strrev(x/*:string*/)/*:string*/ { var o = "", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }
function fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = ""; while(o.length < l) o+=c; return o; }
function pad0(v/*:any*/,d/*:number*/)/*:string*/{var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;}
@ -793,7 +793,7 @@ function eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {
}
SSF._eval = eval_fmt;
var cfregex = /\[[=<>]/;
var cfregex2 = /\[([=<>]*)(-?\d+\.?\d*)\]/;
var cfregex2 = /\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;
function chkcond(v, rr) {
if(rr == null) return false;
var thresh = parseFloat(rr[2]);

4
ssf.js
View File

@ -3,7 +3,7 @@
/*jshint -W041 */
var SSF = ({});
var make_ssf = function make_ssf(SSF){
SSF.version = '0.10.1';
SSF.version = '0.10.2';
function _strrev(x) { var o = "", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }
function fill(c,l) { var o = ""; while(o.length < l) o+=c; return o; }
function pad0(v,d){var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;}
@ -783,7 +783,7 @@ out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);
}
SSF._eval = eval_fmt;
var cfregex = /\[[=<>]/;
var cfregex2 = /\[([=<>]*)(-?\d+\.?\d*)\]/;
var cfregex2 = /\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;
function chkcond(v, rr) {
if(rr == null) return false;
var thresh = parseFloat(rr[2]);

View File

@ -1,7 +1,7 @@
/* vim: set ts=2: */
/*jshint loopfunc:true, mocha:true, node:true */
var SSF = require('../');
var fs = require('fs'), assert = require('assert');
var assert = require('assert');
describe('dateNF override', function() {
it('should override format code 14', function() {
assert.equal(SSF.format(14, 43880), "2/19/20");

5
types/.npmignore Normal file
View File

@ -0,0 +1,5 @@
Makefile
*ssf*.ts
doc.ts
write.ts
tslint.json

13
types/bin_ssf.ts Executable file
View File

@ -0,0 +1,13 @@
/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */
/* eslint-env node */
/* eslint no-console:0 */
/*jshint node:true */
/// <reference types="../node_modules/@types/node/" />
import X = require('ssf');
const argv = process.argv.slice(2);
if(argv.length < 2 || argv[0] === "-h" || argv[0] === "--help") {
console.error("usage: ssf <format> <value>");
console.error("output: format_as_string|format_as_number|");
process.exit(0);
}
console.log(X.format(argv[0],argv[1]) + "|" + X.format(argv[0],+(argv[1])) + "|");

56
types/index.d.ts vendored Normal file
View File

@ -0,0 +1,56 @@
/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */
// TypeScript Version: 2.2
/** Version string */
export const version: string;
/** Render value using format string or code */
export function format(fmt: string|number, val: any, opts?: any): string;
/** Load format string */
export function load(fmt: string, idx?: number): number;
/** Test if the format is a Date format */
export function is_date(fmt: string): boolean;
/** Format Table */
export interface SSF$Table {
[key: number]: string;
[key: string]: string;
}
/** Get format table */
export function get_table(): SSF$Table;
/** Set format table */
export function load_table(tbl: SSF$Table): void;
/** Parsed date */
export interface SSF$Date {
/** number of whole days since relevant epoch, 0 <= D */
D: number;
/** integral year portion, epoch_year <= y */
y: number;
/** integral month portion, 1 <= m <= 12 */
m: number;
/** integral day portion, subject to gregorian YMD constraints */
d: number;
/** integral day of week (0=Sunday .. 6=Saturday) 0 <= q <= 6 */
q: number;
/** number of seconds since midnight, 0 <= T < 86400 */
T: number;
/** integral number of hours since midnight, 0 <= H < 24 */
H: number;
/** integral number of minutes since the last hour, 0 <= M < 60 */
M: number;
/** integral number of seconds since the last minute, 0 <= S < 60 */
S: number;
/** sub-second part of time, 0 <= u < 1 */
u: number;
}
/** Parse numeric date code */
export function parse_date_code(v: number, opts?: any): SSF$Date;

16
types/ssf-test.ts Normal file
View File

@ -0,0 +1,16 @@
import { format, load, get_table, load_table, parse_date_code, is_date, SSF$Table, SSF$Date } from 'ssf';
const t1: string = format("General", 123.456);
const t2: string = format(0, 234.567);
const t3: string = format("@", "1234.567");
load('"This is "0.00', 70);
load('"This is "0');
const tbl: SSF$Table = get_table();
load_table(tbl);
const date: SSF$Date = parse_date_code(43150);
const sum: number = date.D + date.T + date.y + date.m + date.d + date.H + date.M + date.S + date.q + date.u;
const isdate: boolean = is_date("YYYY-MM-DD");

14
types/tsconfig.json Normal file
View File

@ -0,0 +1,14 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [ "es5" ],
"noImplicitAny": true,
"noImplicitThis": true,
"strictNullChecks": false,
"baseUrl": ".",
"paths": { "ssf": ["."] },
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
}
}

11
types/tslint.json Normal file
View File

@ -0,0 +1,11 @@
{
"extends": "dtslint/dtslint.json",
"rules": {
"whitespace": false,
"no-sparse-arrays": false,
"only-arrow-functions": false,
"no-consecutive-blank-lines": false,
"prefer-conditional-expression": false,
"one-variable-per-declaration": false
}
}