Skip to content

Commit

Permalink
Merge branch 'master' into horz-scale-as-numbers
Browse files Browse the repository at this point in the history
  • Loading branch information
eugene-korobko committed Jul 4, 2023
2 parents 1523310 + ddcad5f commit f80b81e
Show file tree
Hide file tree
Showing 112 changed files with 7,252 additions and 577 deletions.
42 changes: 11 additions & 31 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,13 @@ jobs:
- store_test_results:
path: test-results/

type-tests:
executor: node16-executor
steps:
- checkout-with-deps
- run: npm run tsc-verify
- run: npm run type-tests

dts-changes:
executor: node16-executor
steps:
Expand Down Expand Up @@ -298,31 +305,6 @@ jobs:
paths:
- website

deploy-docusaurus-website:
executor: node16-executor
environment:
USE_SSH: "true"
# We should be able to remove GIT_USER when we have upgraded to a Docusaurus version > 2.0.0-beta.9
GIT_USER: "tvrobot"
CUSTOM_COMMIT_MESSAGE: "[skip ci] Deploy website based on $CIRCLE_SHA1"
steps:
- checkout-with-deps
- attach_workspace:
at: ./
- run:
name: "Setting up git user"
command: |
git config --global user.name "TradingView"
git config --global user.email "[email protected]"
- add_ssh_keys:
fingerprints:
- "cb:bc:16:a1:03:fb:b5:fb:69:4b:68:4d:33:a9:54:8c"
- run:
name: "Deploy website"
command: |
cd website
npm run deploy -- --skip-build
workflows:
version: 2

Expand Down Expand Up @@ -359,6 +341,10 @@ workflows:
filters: *default-filters
requires:
- build
- type-tests:
filters: *default-filters
requires:
- build
- dts-changes:
filters: *merge-based-filters
requires:
Expand Down Expand Up @@ -408,9 +394,3 @@ workflows:
requires:
- install-deps
- install-deps-website
- deploy-docusaurus-website:
filters:
branches:
only: master
requires:
- build-docusaurus-website
2 changes: 1 addition & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ function getNamingConventionRules(additionalDefaultFormats = []) {
format: ['PascalCase'],
filter: {
match: true,
regex: '^(Area|Baseline|Bar|Candlestick|Histogram|Line)$',
regex: '^(Area|Baseline|Bar|Candlestick|Histogram|Line|Custom)$',
},
},
];
Expand Down
48 changes: 48 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Documentation Website Deployment

on:
push:
branches:
- master
paths:
- '.github/workflows/deploy.yml'
- 'src/**'
- 'website/**'

jobs:
deploy:
runs-on: ubuntu-22.04
if: ${{ github.ref == 'refs/heads/master' }}
permissions:
contents: write
pages: write
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
steps:
- uses: actions/checkout@v3

- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: '16'

- name: Install library dependencies
run: npm install
- name: Build library
run: npm run build:prod
- name: Install website dependencies
working-directory: ./website
run: npm install
- name: Build documentation website
working-directory: ./website
run: npm run build

- name: Deploy
uses: peaceiris/actions-gh-pages@v3
if: ${{ github.ref == 'refs/heads/master' }}
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./website/build
user_name: 'TradingView'
user_email: '[email protected]'
commit_message: '[skip ci] Deploy website on ${{ github.event.head_commit.id }}'
8 changes: 4 additions & 4 deletions .size-limit.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,21 @@ module.exports = [
{
name: 'CJS',
path: 'dist/lightweight-charts.production.cjs',
limit: '45.00 KB',
limit: '46.94 KB',
},
{
name: 'ESM',
path: 'dist/lightweight-charts.production.mjs',
limit: '44.95 KB',
limit: '46.86 KB',
},
{
name: 'Standalone-ESM',
path: 'dist/lightweight-charts.standalone.production.mjs',
limit: '46.65 KB',
limit: '48.56 KB',
},
{
name: 'Standalone',
path: 'dist/lightweight-charts.standalone.production.js',
limit: '46.70 KB',
limit: '48.61 KB',
},
];
47 changes: 24 additions & 23 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,23 +54,24 @@
"fancy-canvas": "2.1.0"
},
"devDependencies": {
"@rollup/plugin-node-resolve": "~15.0.1",
"@rollup/plugin-node-resolve": "~15.0.2",
"@rollup/plugin-replace": "~5.0.2",
"@size-limit/file": "~8.1.2",
"@types/chai": "~4.3.4",
"@types/glob": "~8.0.1",
"@rollup/plugin-terser": "~0.4.3",
"@size-limit/file": "~8.2.4",
"@types/chai": "~4.3.5",
"@types/glob": "~8.1.0",
"@types/mocha": "~10.0.1",
"@types/node": "~16.18.9",
"@types/pixelmatch": "~5.2.4",
"@types/pngjs": "~6.0.1",
"@typescript-eslint/eslint-plugin": "~5.50.0",
"@typescript-eslint/eslint-plugin-tslint": "~5.50.0",
"@typescript-eslint/parser": "~5.50.0",
"@typescript-eslint/eslint-plugin": "~5.59.6",
"@typescript-eslint/eslint-plugin-tslint": "~5.59.6",
"@typescript-eslint/parser": "~5.59.6",
"bytes": "~3.1.2",
"chai": "~4.3.7",
"chai-exclude": "~2.1.0",
"cross-env": "~7.0.3",
"dts-bundle-generator": "~7.2.0",
"dts-bundle-generator": "~8.0.1",
"eslint": "~7.32.0",
"eslint-plugin-deprecation": "~1.3.3",
"eslint-plugin-import": "~2.27.5",
Expand All @@ -82,30 +83,29 @@
"eslint-plugin-tsdoc": "~0.2.17",
"eslint-plugin-unicorn": "~40.1.0",
"express": "~4.18.2",
"glob": "~8.1.0",
"glob": "~10.2.5",
"markdown-it": "~13.0.1",
"markdown-it-anchor": "~8.6.6",
"markdownlint-cli": "~0.33.0",
"memlab": "~1.1.37",
"markdown-it-anchor": "~8.6.7",
"markdownlint-cli": "~0.34.0",
"memlab": "~1.1.39",
"mocha": "~10.2.0",
"npm-run-all": "~4.1.5",
"pixelmatch": "~5.3.0",
"pngjs": "~6.0.0",
"puppeteer": "~19.6.3",
"rimraf": "~4.1.2",
"rollup": "~3.14.0",
"rollup-plugin-terser": "~7.0.2",
"size-limit": "~8.1.2",
"pngjs": "~7.0.0",
"puppeteer": "~20.2.1",
"rimraf": "~5.0.1",
"rollup": "~3.22.0",
"size-limit": "~8.2.4",
"ts-node": "~10.9.1",
"ts-transformer-properties-rename": "~0.14.0",
"ts-transformer-properties-rename": "~0.16.0",
"ts-transformer-strip-const-enums": "~1.0.1",
"tslib": "2.5.0",
"tslib": "2.5.2",
"tslint": "6.1.3",
"tslint-eslint-rules": "~5.4.0",
"tslint-microsoft-contrib": "~6.2.0",
"ttypescript": "~1.5.15",
"typescript": "4.9.5",
"yargs": "~17.6.2"
"yargs": "~17.7.2"
},
"scripts": {
"postinstall": "npm run install-hooks",
Expand All @@ -129,7 +129,8 @@
"prepare-release": "npm-run-all clean build:release && npm run prepare-package-json-for-release",
"prepare-package-json-for-release": "node ./scripts/clean-package-json.js",
"size-limit": "size-limit",
"verify": "npm-run-all clean -p build:prod check-markdown-links -p lint check-dts-docs tsc-verify test size-limit",
"test": "mocha tests/unittests/**/*.spec.ts"
"verify": "npm-run-all clean -p build:prod check-markdown-links -p lint check-dts-docs tsc-verify test size-limit -p type-tests",
"test": "mocha tests/unittests/**/*.spec.ts",
"type-tests": "tsc -p ./tests/type-checks/tsconfig.composite.json --noEmit"
}
}
2 changes: 1 addition & 1 deletion rollup.config.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const terser = require('rollup-plugin-terser').terser;
const nodeResolve = require('@rollup/plugin-node-resolve').default;
const replace = require('@rollup/plugin-replace');
const terser = require('@rollup/plugin-terser').default;
const packageJson = require('./package.json');

function getDevBuildMetadata() {
Expand Down
60 changes: 51 additions & 9 deletions src/api/chart-api.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import { ChartWidget, MouseEventParamsImpl, MouseEventParamsImplSupplier } from '../gui/chart-widget';

import { assert, ensureDefined } from '../helpers/assertions';
import { assert, ensure, ensureDefined } from '../helpers/assertions';
import { Delegate } from '../helpers/delegate';
import { warn } from '../helpers/logger';
import { clone, DeepPartial, isBoolean, merge } from '../helpers/strict-type-checks';

import { ChartOptionsImpl, ChartOptionsInternal } from '../model/chart-model';
import { DataUpdatesConsumer, isFulfilledData, SeriesDataItemTypeMap } from '../model/data-consumer';
import { DataUpdatesConsumer, isFulfilledData, SeriesDataItemTypeMap, WhitespaceData } from '../model/data-consumer';
import { DataLayer, DataUpdateResponse, SeriesChanges } from '../model/data-layer';
import { CustomData, ICustomSeriesPaneView } from '../model/icustom-series';
import { IHorzScaleBehavior } from '../model/ihorz-scale-behavior';
import { Series } from '../model/series';
import { SeriesPlotRow } from '../model/series-data';
Expand All @@ -16,13 +17,16 @@ import {
BarSeriesPartialOptions,
BaselineSeriesPartialOptions,
CandlestickSeriesPartialOptions,
CustomSeriesOptions,
CustomSeriesPartialOptions,
fillUpDownCandlesticksColors,
HistogramSeriesPartialOptions,
LineSeriesPartialOptions,
precisionByMinMove,
PriceFormat,
PriceFormatBuiltIn,
SeriesOptionsMap,
SeriesPartialOptions,
SeriesPartialOptionsMap,
SeriesStyleOptionsMap,
SeriesType,
Expand All @@ -40,6 +44,7 @@ import {
barStyleDefaults,
baselineStyleDefaults,
candlestickStyleDefaults,
customStyleDefaults,
histogramStyleDefaults,
lineStyleDefaults,
seriesOptionsDefaults,
Expand Down Expand Up @@ -176,6 +181,27 @@ export class ChartApi<HorzScaleItem> implements IChartApiBase<HorzScaleItem>, Da
this._chartWidget.resize(width, height, forceRepaint);
}

public addCustomSeries<
TData extends CustomData<HorzScaleItem>,
TOptions extends CustomSeriesOptions,
TPartialOptions extends CustomSeriesPartialOptions = SeriesPartialOptions<TOptions>
>(
customPaneView: ICustomSeriesPaneView<HorzScaleItem, TData, TOptions>,
options?: SeriesPartialOptions<TOptions>
): ISeriesApi<'Custom', HorzScaleItem, TData, TOptions, TPartialOptions> {
const paneView = ensure(customPaneView);
const defaults = {
...customStyleDefaults,
...paneView.defaultOptions(),
};
return this._addSeriesImpl<'Custom', TData, TOptions, TPartialOptions>(
'Custom',
defaults,
options,
paneView
);
}

public addAreaSeries(options?: AreaSeriesPartialOptions): ISeriesApi<'Area', HorzScaleItem> {
return this._addSeriesImpl('Area', areaStyleDefaults, options);
}
Expand Down Expand Up @@ -263,17 +289,27 @@ export class ChartApi<HorzScaleItem> implements IChartApiBase<HorzScaleItem>, Da
return this._chartWidget.autoSizeActive();
}

private _addSeriesImpl<TSeries extends SeriesType>(
public chartElement(): HTMLDivElement {
return this._chartWidget.element();
}

private _addSeriesImpl<
TSeries extends SeriesType,
TData extends WhitespaceData<HorzScaleItem> = SeriesDataItemTypeMap<HorzScaleItem>[TSeries],
TOptions extends SeriesOptionsMap[TSeries] = SeriesOptionsMap[TSeries],
TPartialOptions extends SeriesPartialOptionsMap[TSeries] = SeriesPartialOptionsMap[TSeries]
>(
type: TSeries,
styleDefaults: SeriesStyleOptionsMap[TSeries],
options: SeriesPartialOptionsMap[TSeries] = {}
): ISeriesApi<TSeries, HorzScaleItem> {
options: SeriesPartialOptionsMap[TSeries] = {},
customPaneView?: ICustomSeriesPaneView<HorzScaleItem>
): ISeriesApi<TSeries, HorzScaleItem, TData, TOptions, TPartialOptions> {
patchPriceFormat(options.priceFormat);

const strictOptions = merge(clone(seriesOptionsDefaults), clone(styleDefaults), options) as SeriesOptionsMap[TSeries];
const series = this._chartWidget.model().createSeries(type, strictOptions);
const series = this._chartWidget.model().createSeries(type, strictOptions, customPaneView);

const res = new SeriesApi<TSeries, HorzScaleItem>(series, this, this, this._horzScaleBehavior);
const res = new SeriesApi<TSeries, HorzScaleItem, TData, TOptions, TPartialOptions>(series, this, this, this, this._horzScaleBehavior);
this._seriesMap.set(res, series);
this._seriesMapReversed.set(series, res);

Expand All @@ -296,8 +332,14 @@ export class ChartApi<HorzScaleItem> implements IChartApiBase<HorzScaleItem>, Da
private _convertMouseParams(param: MouseEventParamsImpl): MouseEventParams<HorzScaleItem> {
const seriesData: MouseEventParams<HorzScaleItem>['seriesData'] = new Map();
param.seriesData.forEach((plotRow: SeriesPlotRow<SeriesType>, series: Series<SeriesType>) => {
const data = getSeriesDataCreator<SeriesType, HorzScaleItem>(series.seriesType())(plotRow);
assert(isFulfilledData(data));
const seriesType = series.seriesType();
const data = getSeriesDataCreator<SeriesType, HorzScaleItem>(seriesType)(plotRow);
if (seriesType !== 'Custom') {
assert(isFulfilledData(data));
} else {
const customWhitespaceChecker = series.customSeriesWhitespaceCheck();
assert(!customWhitespaceChecker || customWhitespaceChecker(data) === false);
}
seriesData.set(this._mapSeriesToApi(series), data);
});

Expand Down
Loading

0 comments on commit f80b81e

Please sign in to comment.