mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-20 17:14:11 +00:00
dd2eadc86e
Summary: - Upgrades to build-related packages: - Upgrade typescript, related libraries and typings. - Upgrade webpack, eslint; add tsc-watch, node-dev, eslint_d. - Build organization changes: - Build webpack from original typescript, transpiling only; with errors still reported by a background tsc watching process. - Typescript-related changes: - Reduce imports of AWS dependencies (very noticeable speedup) - Avoid auto-loading global @types - Client code is now built with isolatedModules flag (for safe transpilation) - Use allowJs to avoid copying JS files manually. - Linting changes - Enhance Arcanist ESLintLinter to run before/after commands, and set up to use eslint_d - Update eslint config, and include .eslintignore to avoid linting generated files. - Include a bunch of eslint-prompted and eslint-generated fixes - Add no-unused-expression rule to eslint, and fix a few warnings about it - Other items: - Refactor cssInput to avoid circular dependency - Remove a bit of unused code, libraries, dependencies Test Plan: No behavior changes, all existing tests pass. There are 30 tests fewer reported because `test_gpath.py` was removed (it's been unused for years) Reviewers: paulfitz Reviewed By: paulfitz Subscribers: paulfitz Differential Revision: https://phab.getgrist.com/D3498
59 lines
2.6 KiB
TypeScript
59 lines
2.6 KiB
TypeScript
import {BasicType, createCheckers, ICheckerSuite} from 'ts-interface-checker';
|
|
import CustomSectionAPITI from './CustomSectionAPI-ti';
|
|
import FileParserAPITI from './FileParserAPI-ti';
|
|
import GristAPITI from './GristAPI-ti';
|
|
import GristTableTI from './GristTable-ti';
|
|
import ImportSourceAPITI from './ImportSourceAPI-ti';
|
|
import InternalImportSourceAPITI from './InternalImportSourceAPI-ti';
|
|
import RenderOptionsTI from './RenderOptions-ti';
|
|
import StorageAPITI from './StorageAPI-ti';
|
|
import WidgetAPITI from './WidgetAPI-ti';
|
|
|
|
/**
|
|
* The ts-interface-checker type suites are all exported with the "TI" suffix.
|
|
*/
|
|
export {
|
|
CustomSectionAPITI, FileParserAPITI, GristAPITI, GristTableTI, ImportSourceAPITI,
|
|
InternalImportSourceAPITI, RenderOptionsTI, StorageAPITI, WidgetAPITI};
|
|
|
|
const allTypes = [
|
|
CustomSectionAPITI, FileParserAPITI, GristAPITI, GristTableTI, ImportSourceAPITI,
|
|
InternalImportSourceAPITI, RenderOptionsTI, StorageAPITI, WidgetAPITI,
|
|
];
|
|
|
|
// Ensure Buffer can be handled if mentioned in the interface descriptions, even if not supported
|
|
// in the current environment (i.e. browser).
|
|
if (typeof Buffer === 'undefined') {
|
|
allTypes.push({Buffer: new BasicType((v) => false, "Buffer is not supported")});
|
|
}
|
|
|
|
function checkDuplicates(types: Array<{[key: string]: object}>) {
|
|
const seen = new Set<string>();
|
|
for (const t of types) {
|
|
for (const key of Object.keys(t)) {
|
|
if (seen.has(key)) { throw new Error(`TypeCheckers: Duplicate type name ${key}`); }
|
|
seen.add(key);
|
|
// Uncomment the line below to generate updated list of included types.
|
|
// console.log(`'${key}' |`);
|
|
}
|
|
}
|
|
}
|
|
|
|
checkDuplicates(allTypes);
|
|
|
|
/**
|
|
* We also create and export a global checker object that includes all of the types above.
|
|
*/
|
|
export const checkers = createCheckers(...allTypes) as (
|
|
// The following Pick typecast ensures that Typescript can only use correct properties of the
|
|
// checkers object (e.g. checkers.GristAPI will compile, but checkers.GristApi will not).
|
|
// TODO: The restrictive type of ICheckerSuite should be generated automatically. (Currently
|
|
// generated by commenting out console.log() in checkDuplicates() above.)
|
|
Pick<ICheckerSuite,
|
|
'CustomSectionAPI' | 'EditOptionsAPI' | 'ParseFileAPI' | 'ParseOptions' | 'ParseOptionSchema' |
|
|
'FileSource' | 'ParseFileResult' | 'ComponentKind' | 'GristAPI' | 'GristDocAPI' | 'GristTable' |
|
|
'GristTables' | 'GristColumn' | 'GristView' | 'ImportSourceAPI' | 'ImportProcessorAPI' | 'FileContent' |
|
|
'FileListItem' | 'URL' | 'ImportSource' | 'InternalImportSourceAPI' | 'RenderTarget' |
|
|
'RenderOptions' | 'Storage' | 'WidgetAPI'
|
|
>);
|