@nxtedition/types 23.1.1 → 23.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.d.ts +7 -1
- package/dist/common/index.d.ts +1 -0
- package/dist/common/index.js +1 -0
- package/dist/common/panel-property.d.ts +2 -29
- package/dist/common/render-scene.d.ts +72 -12
- package/dist/common/schema-property.d.ts +36 -4
- package/dist/common/settings.d.ts +66 -41
- package/dist/common/settings.js +18 -1
- package/dist/common/widget.d.ts +16 -0
- package/dist/common/widget.js +1 -0
- package/dist/nxtpression.d.ts +439 -139
- package/dist/records/domains/condition.d.ts +1 -1
- package/dist/records/domains/event.d.ts +4 -3
- package/dist/records/domains/index.d.ts +5 -1
- package/dist/records/domains/index.js +2 -0
- package/dist/records/domains/ingestschedule.d.ts +1 -1
- package/dist/records/domains/media.d.ts +10 -0
- package/dist/records/domains/panel.d.ts +7 -19
- package/dist/records/domains/publish/facebook.d.ts +1 -2
- package/dist/records/domains/publish/file-legacy.d.ts +1 -1
- package/dist/records/domains/render.d.ts +54 -3
- package/dist/records/domains/schema.d.ts +21 -0
- package/dist/records/domains/schema.js +1 -0
- package/dist/records/domains/search.d.ts +1 -1
- package/dist/records/domains/stream.d.ts +80 -0
- package/dist/records/domains/stream.js +1 -0
- package/dist/records/domains/template.d.ts +2 -0
- package/dist/records/exact/asset.d.ts +17 -7
- package/dist/records/exact/media.d.ts +2 -0
- package/dist/records/exact/monitor.d.ts +14 -8
- package/dist/records/index.d.ts +1 -1
- package/dist/records/utils.d.ts +5 -1
- package/dist/records/validate/assert-guard.js +9039 -5236
- package/dist/records/validate/assert.js +9011 -5200
- package/dist/records/validate/is.js +165 -115
- package/dist/records/validate/schemas.js +5065 -1812
- package/dist/records/validate/stringify.js +776 -180
- package/dist/records/validate/utils.d.ts +1 -1
- package/dist/records/validate/utils.js +2 -2
- package/dist/records/validate/validate-equals.js +11304 -6466
- package/dist/records/validate/validate.js +8164 -4980
- package/package.json +1 -1
package/dist/app.d.ts
CHANGED
|
@@ -14,7 +14,13 @@ export interface ElectronHubApi {
|
|
|
14
14
|
triggerUpdate: (latestVersion: string) => void;
|
|
15
15
|
controlDownloadItem: (id: string, action: "pause" | "resume" | "cancel") => void;
|
|
16
16
|
openInApp: (...args: unknown[]) => void;
|
|
17
|
-
installDavinciPlugin: (url: string) => Promise<
|
|
17
|
+
installDavinciPlugin: (url: string) => Promise<{
|
|
18
|
+
davinciPath: string;
|
|
19
|
+
pluginsPath: string;
|
|
20
|
+
zipSize: number;
|
|
21
|
+
} | {
|
|
22
|
+
message: string;
|
|
23
|
+
}>;
|
|
18
24
|
downloadFile: (options: DownloadFileOptions) => void;
|
|
19
25
|
showItemInFolder: (fullPath: string) => void;
|
|
20
26
|
openPath: (path: string) => void;
|
package/dist/common/index.d.ts
CHANGED
package/dist/common/index.js
CHANGED
|
@@ -1,29 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export
|
|
3
|
-
/** Specifying what type of data will be entered into the field. */
|
|
4
|
-
type: "array" | "asset" | "boolean" | "datetime" | "number" | "string" | "object" | "rpc";
|
|
5
|
-
/** User-friendly title of the property. This will be used as the field's label in the UI. */
|
|
6
|
-
title?: string;
|
|
7
|
-
description?: string;
|
|
8
|
-
domain?: string;
|
|
9
|
-
path?: string;
|
|
10
|
-
computed?: Nxtpression<Value>;
|
|
11
|
-
/** An object specifying where to index the data. Adding this will effectively make the data searchable. */
|
|
12
|
-
index?: {
|
|
13
|
-
/** A string specifying the user-friendly title of the search property. This is what users will see when creating search filters and bookmarks. */
|
|
14
|
-
label: string;
|
|
15
|
-
/** A string specifying where to store the data in the search index. Note that this should be a globally unique value in the system. Typically you'd use `{domain}.{path}` and you should prefer English in camel case */
|
|
16
|
-
path: string;
|
|
17
|
-
};
|
|
18
|
-
/** If present, indicates that the user must specify a value for the asset to be treated as valid. */
|
|
19
|
-
required?: boolean;
|
|
20
|
-
oneOf?: Array<{
|
|
21
|
-
const?: Value;
|
|
22
|
-
title?: string;
|
|
23
|
-
}>;
|
|
24
|
-
anyOf?: Array<{
|
|
25
|
-
const?: Value;
|
|
26
|
-
title?: string;
|
|
27
|
-
}>;
|
|
28
|
-
enum?: Value[];
|
|
29
|
-
}
|
|
1
|
+
import type { BaseSchemaProperty } from './schema-property.ts';
|
|
2
|
+
export type PanelProperty<Value = unknown> = BaseSchemaProperty<Value>;
|
|
@@ -6,22 +6,30 @@ export interface RenderSceneObject {
|
|
|
6
6
|
input?: {
|
|
7
7
|
type?: string;
|
|
8
8
|
file?: string | null;
|
|
9
|
+
video?: {
|
|
10
|
+
alpha?: RenderSceneAlpha | null;
|
|
11
|
+
interlaced?: RenderSceneInterlaced | null;
|
|
12
|
+
};
|
|
13
|
+
proxy?: string | null;
|
|
14
|
+
proxyManifest?: string | null;
|
|
15
|
+
proxyFile?: string | null;
|
|
16
|
+
manifest?: string | null;
|
|
9
17
|
} | null;
|
|
10
18
|
lang?: string;
|
|
11
19
|
subtitle?: string;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
style?: string | null;
|
|
15
|
-
styleOverrides?: SubtitleStyle;
|
|
16
|
-
};
|
|
17
|
-
};
|
|
20
|
+
graphics?: string;
|
|
21
|
+
subtitleTracks?: RenderSceneSubtitleTracks;
|
|
18
22
|
video?: {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
filters?: RenderSceneFilters;
|
|
24
|
+
crop?: RenderSceneCrop;
|
|
25
|
+
orientation?: number;
|
|
26
|
+
/** @deprecated Use input.video.interlaced */
|
|
27
|
+
interlaced?: RenderSceneInterlaced | null;
|
|
28
|
+
/** @deprecated Use input.video.alpha */
|
|
29
|
+
alpha?: RenderSceneAlpha | null;
|
|
30
|
+
};
|
|
31
|
+
audio?: {
|
|
32
|
+
pan?: number[][];
|
|
25
33
|
};
|
|
26
34
|
start?: number;
|
|
27
35
|
end?: number;
|
|
@@ -29,4 +37,56 @@ export interface RenderSceneObject {
|
|
|
29
37
|
language?: string;
|
|
30
38
|
pan?: number[];
|
|
31
39
|
};
|
|
40
|
+
/** @deprecated Use video.crop instead */
|
|
41
|
+
crop?: RenderSceneCrop;
|
|
42
|
+
/** @deprecated Use video.filters instead */
|
|
43
|
+
filters?: RenderSceneFilters;
|
|
44
|
+
/** @deprecated Use video.orientation instead */
|
|
45
|
+
orientation?: number;
|
|
46
|
+
/** @deprecated Use video.orientation instead */
|
|
47
|
+
rotate?: number;
|
|
48
|
+
/** @deprecated Use input.video.interlaced instead */
|
|
49
|
+
interlaced?: RenderSceneInterlaced | null;
|
|
50
|
+
/** @deprecated Use input.video.alpha instead */
|
|
51
|
+
alpha?: RenderSceneAlpha | null;
|
|
52
|
+
}
|
|
53
|
+
export interface RenderSceneCrop {
|
|
54
|
+
x?: number;
|
|
55
|
+
y?: number;
|
|
56
|
+
width?: number;
|
|
57
|
+
height?: number;
|
|
58
|
+
}
|
|
59
|
+
export type RenderSceneInterlaced = false | "tff" | "bff";
|
|
60
|
+
/** true = premultiplied alpha, 'straight' = straight alpha, null/undefined = auto */
|
|
61
|
+
export type RenderSceneAlpha = boolean | "straight";
|
|
62
|
+
export interface RenderSceneFilters {
|
|
63
|
+
eq?: {
|
|
64
|
+
brightness?: number;
|
|
65
|
+
contrast?: number;
|
|
66
|
+
gamma?: number;
|
|
67
|
+
saturation?: number;
|
|
68
|
+
};
|
|
69
|
+
hue?: {
|
|
70
|
+
h?: number;
|
|
71
|
+
s?: number;
|
|
72
|
+
b?: number;
|
|
73
|
+
};
|
|
74
|
+
colorbalance?: {
|
|
75
|
+
rs?: number;
|
|
76
|
+
gs?: number;
|
|
77
|
+
bs?: number;
|
|
78
|
+
rm?: number;
|
|
79
|
+
gm?: number;
|
|
80
|
+
bm?: number;
|
|
81
|
+
rh?: number;
|
|
82
|
+
gh?: number;
|
|
83
|
+
bh?: number;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
export type RenderSceneSubtitleTracks = {
|
|
87
|
+
[trackId: string]: RenderSceneSubtitleTrack;
|
|
88
|
+
};
|
|
89
|
+
export interface RenderSceneSubtitleTrack {
|
|
90
|
+
style?: string | null;
|
|
91
|
+
styleOverrides?: SubtitleStyle;
|
|
32
92
|
}
|
|
@@ -1,5 +1,37 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
1
|
+
import type { Nxtpression } from './nxtpression.ts';
|
|
2
|
+
import type { WidgetOptions, WidgetType } from './widget.ts';
|
|
3
|
+
export interface BaseSchemaProperty<Value = unknown> {
|
|
4
|
+
domain?: string;
|
|
5
|
+
path?: string;
|
|
6
|
+
/** Specifying what type of data will be entered into the field. */
|
|
7
|
+
type?: "array" | "asset" | "boolean" | "datetime" | "number" | "string" | "object" | "rpc" | undefined;
|
|
8
|
+
/** User-friendly title of the property. This will be used as the field's label in the UI. */
|
|
9
|
+
title?: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
/** If present, indicates that the user must specify a value for the asset to be treated as valid. */
|
|
12
|
+
required?: boolean;
|
|
13
|
+
oneOf?: Array<BaseSchemaProperty>;
|
|
14
|
+
anyOf?: Array<BaseSchemaProperty>;
|
|
15
|
+
enum?: ReadonlyArray<Value>;
|
|
16
|
+
widget?: WidgetType | WidgetOptions;
|
|
17
|
+
placeholder?: string;
|
|
18
|
+
helpText?: string;
|
|
19
|
+
invalid?: boolean;
|
|
20
|
+
emptyValue?: Value;
|
|
21
|
+
minItems?: number;
|
|
22
|
+
maxItems?: number;
|
|
23
|
+
items?: BaseSchemaProperty<Value>;
|
|
24
|
+
properties?: Record<string, BaseSchemaProperty<unknown>>;
|
|
25
|
+
computed?: Nxtpression<Value>;
|
|
26
|
+
/** An object specifying where to index the data. Adding this will effectively make the data searchable. */
|
|
27
|
+
index?: {
|
|
28
|
+
/** A string specifying the user-friendly title of the search property. This is what users will see when creating search filters and bookmarks. */
|
|
29
|
+
label: string;
|
|
30
|
+
/** A string specifying where to store the data in the search index. Note that this should be a globally unique value in the system. Typically you'd use `{domain}.{path}` and you should prefer English in camel case */
|
|
31
|
+
path: string;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export interface SchemaProperty<Value = unknown> extends BaseSchemaProperty<Value> {
|
|
3
35
|
recordName?: Nxtpression<string, {
|
|
4
36
|
id: string;
|
|
5
37
|
}>;
|
|
@@ -7,6 +39,6 @@ export interface SchemaProperty extends PanelProperty {
|
|
|
7
39
|
id: string;
|
|
8
40
|
value: unknown;
|
|
9
41
|
}>;
|
|
10
|
-
default?:
|
|
11
|
-
const?:
|
|
42
|
+
default?: Value;
|
|
43
|
+
const?: Value;
|
|
12
44
|
}
|
|
@@ -9,6 +9,18 @@ export interface Settings {
|
|
|
9
9
|
overrideUserContact?: boolean;
|
|
10
10
|
overrideUserLogin?: boolean;
|
|
11
11
|
};
|
|
12
|
+
graphics?: {
|
|
13
|
+
width?: number;
|
|
14
|
+
height?: number;
|
|
15
|
+
};
|
|
16
|
+
googleWhitelist?: Array<{
|
|
17
|
+
domain?: string;
|
|
18
|
+
}>;
|
|
19
|
+
googleUserRoles?: string[];
|
|
20
|
+
azureWhitelist?: Array<{
|
|
21
|
+
domain?: string;
|
|
22
|
+
}>;
|
|
23
|
+
azureUserRoles?: string[];
|
|
12
24
|
module?: {
|
|
13
25
|
editor?: string;
|
|
14
26
|
tabs?: ModuleTabs;
|
|
@@ -30,10 +42,10 @@ export interface Settings {
|
|
|
30
42
|
map?: {
|
|
31
43
|
clustering?: boolean;
|
|
32
44
|
zoom?: number;
|
|
33
|
-
center?:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
45
|
+
center?: [
|
|
46
|
+
number,
|
|
47
|
+
number
|
|
48
|
+
];
|
|
37
49
|
};
|
|
38
50
|
createMenu?: {
|
|
39
51
|
sortOrder?: string[];
|
|
@@ -118,44 +130,20 @@ export interface Settings {
|
|
|
118
130
|
countFloatedDuration?: boolean;
|
|
119
131
|
};
|
|
120
132
|
history?: boolean;
|
|
121
|
-
keymap?:
|
|
122
|
-
display?: {
|
|
123
|
-
[actionKey: string]: KeymapSetting;
|
|
124
|
-
};
|
|
125
|
-
browser?: {
|
|
126
|
-
[actionKey: string]: KeymapSetting;
|
|
127
|
-
};
|
|
128
|
-
gallery?: {
|
|
129
|
-
[actionKey: string]: KeymapSetting;
|
|
130
|
-
};
|
|
131
|
-
global?: {
|
|
132
|
-
[actionKey: string]: KeymapSetting;
|
|
133
|
-
};
|
|
134
|
-
player?: {
|
|
135
|
-
[actionKey: string]: KeymapSetting;
|
|
136
|
-
};
|
|
137
|
-
script?: {
|
|
138
|
-
[actionKey: string]: KeymapSetting;
|
|
139
|
-
};
|
|
140
|
-
codeEditor?: {
|
|
141
|
-
[actionKey: string]: KeymapSetting;
|
|
142
|
-
};
|
|
143
|
-
bookmarks?: {
|
|
144
|
-
[actionKey: string]: KeymapSetting;
|
|
145
|
-
};
|
|
146
|
-
edit?: {
|
|
147
|
-
[actionKey: string]: KeymapSetting;
|
|
148
|
-
};
|
|
149
|
-
rundown?: {
|
|
150
|
-
[actionKey: string]: KeymapSetting;
|
|
151
|
-
};
|
|
152
|
-
segment?: {
|
|
153
|
-
[actionKey: string]: KeymapSetting;
|
|
154
|
-
};
|
|
155
|
-
};
|
|
133
|
+
keymap?: SettingsKeymap;
|
|
156
134
|
media?: {
|
|
135
|
+
volume?: number;
|
|
136
|
+
muted?: boolean;
|
|
137
|
+
graphics?: boolean;
|
|
138
|
+
waveform?: boolean;
|
|
157
139
|
defaultFrameRate?: number;
|
|
140
|
+
dropFrame?: boolean;
|
|
158
141
|
placeholder?: string;
|
|
142
|
+
warnSubclipDuration?: number;
|
|
143
|
+
displayAspectRatioPresets?: Array<{
|
|
144
|
+
label?: string;
|
|
145
|
+
value?: string;
|
|
146
|
+
}>;
|
|
159
147
|
guide?: {
|
|
160
148
|
mask?: boolean;
|
|
161
149
|
actionSafe?: boolean;
|
|
@@ -302,7 +290,23 @@ export interface Settings {
|
|
|
302
290
|
}>;
|
|
303
291
|
plugins?: {
|
|
304
292
|
adobe?: {
|
|
293
|
+
videoBin?: string;
|
|
294
|
+
imageBin?: string;
|
|
295
|
+
audioBin?: string;
|
|
296
|
+
timelineBin?: string;
|
|
297
|
+
clipBin?: string;
|
|
298
|
+
downloadPath?: string;
|
|
299
|
+
renderPath?: string;
|
|
300
|
+
renderPresetPath?: string;
|
|
301
|
+
videoRenderPreset?: string;
|
|
302
|
+
imageRenderPreset?: string;
|
|
303
|
+
audioRenderPreset?: string;
|
|
304
|
+
forceRender?: boolean;
|
|
305
305
|
useProxies?: boolean;
|
|
306
|
+
deleteIntermediateFiles?: boolean;
|
|
307
|
+
bodymovin?: {
|
|
308
|
+
template?: string;
|
|
309
|
+
};
|
|
306
310
|
};
|
|
307
311
|
rive?: {
|
|
308
312
|
template?: string;
|
|
@@ -312,6 +316,7 @@ export interface Settings {
|
|
|
312
316
|
debug?: boolean;
|
|
313
317
|
featurePreview?: {
|
|
314
318
|
collections?: boolean;
|
|
319
|
+
aiMetadata?: boolean;
|
|
315
320
|
semanticSearch?: boolean;
|
|
316
321
|
ameRemoteRendering?: boolean;
|
|
317
322
|
};
|
|
@@ -333,8 +338,11 @@ export interface Settings {
|
|
|
333
338
|
hideInAssetMenu?: boolean;
|
|
334
339
|
assetRoute?: boolean;
|
|
335
340
|
devWarnings?: boolean;
|
|
341
|
+
downloadFiles?: boolean;
|
|
342
|
+
supportPortal?: boolean;
|
|
336
343
|
multiplexWebSockets?: boolean;
|
|
337
344
|
systemHealth?: boolean;
|
|
345
|
+
systemHealthIgnore?: boolean;
|
|
338
346
|
};
|
|
339
347
|
notifications?: {
|
|
340
348
|
events?: {
|
|
@@ -374,6 +382,14 @@ export interface Settings {
|
|
|
374
382
|
shotbox?: {
|
|
375
383
|
layout?: string;
|
|
376
384
|
};
|
|
385
|
+
performance?: {
|
|
386
|
+
/** List of message identifiers to ignore in overall health aggregation (format: "serviceName:messageText") */
|
|
387
|
+
ignoredMessages?: string[];
|
|
388
|
+
};
|
|
389
|
+
app?: {
|
|
390
|
+
enableUpdate?: boolean;
|
|
391
|
+
autoUpdate?: boolean;
|
|
392
|
+
};
|
|
377
393
|
}
|
|
378
394
|
export type SettingsPaths = Paths<Settings>;
|
|
379
395
|
interface ModuleTabs {
|
|
@@ -388,10 +404,19 @@ interface ModuleTabsSettingsValue {
|
|
|
388
404
|
interface SettingsPanelStoreTab extends ModuleTabsSettingsValue {
|
|
389
405
|
activeSectionIndex?: number;
|
|
390
406
|
}
|
|
391
|
-
|
|
407
|
+
export type SettingsKeymap = Record<string, SettingsKeymapScope>;
|
|
408
|
+
export interface SettingsKeymapEntry {
|
|
392
409
|
title?: string;
|
|
393
|
-
sequence?: string
|
|
410
|
+
sequence?: string | (string | [
|
|
411
|
+
string,
|
|
412
|
+
unknown
|
|
413
|
+
])[] | null | undefined;
|
|
414
|
+
schema?: Record<string, any>;
|
|
415
|
+
stopCallback?: boolean;
|
|
394
416
|
}
|
|
417
|
+
export declare const isSettingsKeymapEntry: (input: unknown) => input is SettingsKeymapEntry;
|
|
418
|
+
export type SettingsKeymapScope = Record<string, SettingsKeymapEntry>;
|
|
419
|
+
export declare const isSettingsKeymapScope: (input: unknown) => input is SettingsKeymapScope;
|
|
395
420
|
export interface AudioMappingPreset {
|
|
396
421
|
id: string;
|
|
397
422
|
title: string;
|
package/dist/common/settings.js
CHANGED
|
@@ -1 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
import typia from 'typia';
|
|
2
|
+
export const isSettingsKeymapEntry = (() => { const _io0 = input => (undefined === input.title || "string" === typeof input.title) && (null === input.sequence || undefined === input.sequence || "string" === typeof input.sequence || Array.isArray(input.sequence) && input.sequence.every(elem => null !== elem && undefined !== elem && ("string" === typeof elem || Array.isArray(elem) && (elem.length === 2 && "string" === typeof elem[0] && true)))) && (undefined === input.schema || "object" === typeof input.schema && null !== input.schema && false === Array.isArray(input.schema) && _io1(input.schema)) && (undefined === input.stopCallback || "boolean" === typeof input.stopCallback); const _io1 = input => Object.keys(input).every(key => {
|
|
3
|
+
const value = input[key];
|
|
4
|
+
if (undefined === value)
|
|
5
|
+
return true;
|
|
6
|
+
return true;
|
|
7
|
+
}); return input => "object" === typeof input && null !== input && false === Array.isArray(input) && _io0(input); })();
|
|
8
|
+
export const isSettingsKeymapScope = (() => { const _io0 = input => Object.keys(input).every(key => {
|
|
9
|
+
const value = input[key];
|
|
10
|
+
if (undefined === value)
|
|
11
|
+
return true;
|
|
12
|
+
return "object" === typeof value && null !== value && false === Array.isArray(value) && _io1(value);
|
|
13
|
+
}); const _io1 = input => (undefined === input.title || "string" === typeof input.title) && (null === input.sequence || undefined === input.sequence || "string" === typeof input.sequence || Array.isArray(input.sequence) && input.sequence.every(elem => null !== elem && undefined !== elem && ("string" === typeof elem || Array.isArray(elem) && (elem.length === 2 && "string" === typeof elem[0] && true)))) && (undefined === input.schema || "object" === typeof input.schema && null !== input.schema && false === Array.isArray(input.schema) && _io2(input.schema)) && (undefined === input.stopCallback || "boolean" === typeof input.stopCallback); const _io2 = input => Object.keys(input).every(key => {
|
|
14
|
+
const value = input[key];
|
|
15
|
+
if (undefined === value)
|
|
16
|
+
return true;
|
|
17
|
+
return true;
|
|
18
|
+
}); return input => "object" === typeof input && null !== input && false === Array.isArray(input) && _io0(input); })();
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type WidgetType = string;
|
|
2
|
+
export interface WidgetOptions {
|
|
3
|
+
type?: WidgetType;
|
|
4
|
+
readOnly?: boolean;
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
}
|
|
7
|
+
export type WidgetLayout = string | WidgetLayoutDivider | WidgetLayoutItem | WidgetLayout[];
|
|
8
|
+
export interface WidgetLayoutItem {
|
|
9
|
+
property: string;
|
|
10
|
+
width?: string | number;
|
|
11
|
+
widget?: WidgetType | WidgetOptions;
|
|
12
|
+
}
|
|
13
|
+
export interface WidgetLayoutDivider {
|
|
14
|
+
type: "divider";
|
|
15
|
+
title?: string;
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|