@fluidframework/core-interfaces
Advanced tools
Comparing version 2.0.0-dev.5.3.2.178189 to 2.0.0-dev.6.4.0.191258
@@ -7,3 +7,3 @@ /*! | ||
module.exports = { | ||
extends: [require.resolve("@fluidframework/eslint-config-fluid/minimal"), "prettier"], | ||
extends: [require.resolve("@fluidframework/eslint-config-fluid"), "prettier"], | ||
parserOptions: { | ||
@@ -10,0 +10,0 @@ project: ["./tsconfig.json", "./src/test/tsconfig.json"], |
# @fluidframework/core-interfaces | ||
## 2.0.0-internal.6.3.0 | ||
### Minor Changes | ||
- Cleaning up duplicate or misnamed telemetry types ([#17149](https://github.com/microsoft/FluidFramework/issues/17149)) [f9236942fa](https://github.com/microsoft/FluidFramework/commits/f9236942faf03cde860bfcbc7c28f8fbd81d3868) | ||
We have two sets of telemetry-related interfaces: | ||
- The "Base" ones | ||
- These have a very bare API surface | ||
- They are used on public API surfaces to transmit logs across layers | ||
- The internal ones | ||
- These have a richer API surface (multiple log functions with different categories, | ||
support for logging flat arrays and objects) | ||
- They are used for instrumenting our code, and then normalize and pass off the logs via the Base interface | ||
There are two problems with the given state of the world: | ||
1. The "Base" ones were not named consistently, so the distinction was not as apparent as it could be | ||
2. The internal ones were copied to `@fluidframework/telemetry-utils` and futher extended, but the original duplicates remain. | ||
This change addresses these by adding "Base" to the name of each base type, and deprecating the old duplicate internal types. | ||
Additionally, the following types were adjusted: | ||
- `TelemetryEventCategory` is moving from `@fluidframework/core-interfaces` to `@fluidframework/telemetry-utils` | ||
- Several types modeling "tagged" telemetry properties are deprecated in favor of a generic type `Tagged<V>` | ||
## 2.0.0-internal.6.2.0 | ||
### Minor Changes | ||
- Remove use of @fluidframework/common-definitions ([#16638](https://github.com/microsoft/FluidFramework/issues/16638)) [a8c81509c9](https://github.com/microsoft/FluidFramework/commits/a8c81509c9bf09cfb2092ebcf7265205f9eb6dbf) | ||
The **@fluidframework/common-definitions** package is being deprecated, so the following interfaces and types are now | ||
imported from the **@fluidframework/core-interfaces** package: | ||
- interface IDisposable | ||
- interface IErrorEvent | ||
- interface IErrorEvent | ||
- interface IEvent | ||
- interface IEventProvider | ||
- interface ILoggingError | ||
- interface ITaggedTelemetryPropertyType | ||
- interface ITelemetryBaseEvent | ||
- interface ITelemetryBaseLogger | ||
- interface ITelemetryErrorEvent | ||
- interface ITelemetryGenericEvent | ||
- interface ITelemetryLogger | ||
- interface ITelemetryPerformanceEvent | ||
- interface ITelemetryProperties | ||
- type ExtendEventProvider | ||
- type IEventThisPlaceHolder | ||
- type IEventTransformer | ||
- type ReplaceIEventThisPlaceHolder | ||
- type ReplaceIEventThisPlaceHolder | ||
- type TelemetryEventCategory | ||
- type TelemetryEventPropertyType | ||
## 2.0.0-internal.6.1.0 | ||
Dependency updates only. | ||
## 2.0.0-internal.6.0.0 | ||
### Major Changes | ||
- Upgraded typescript transpilation target to ES2020 [8abce8cdb4](https://github.com/microsoft/FluidFramework/commits/8abce8cdb4e2832fb6405fb44e393bef03d5648a) | ||
Upgraded typescript transpilation target to ES2020. This is done in order to decrease the bundle sizes of Fluid Framework packages. This has provided size improvements across the board for ex. Loader, Driver, Runtime etc. Reduced bundle sizes helps to load lesser code in apps and hence also helps to improve the perf.If any app wants to target any older versions of browsers with which this target version is not compatible, then they can use packages like babel to transpile to a older target. | ||
## 2.0.0-internal.5.4.0 | ||
Dependency updates only. | ||
## 2.0.0-internal.5.3.0 | ||
@@ -4,0 +79,0 @@ |
@@ -70,3 +70,3 @@ /*! | ||
*/ | ||
export declare const isFluidPackage: (pkg: any) => pkg is Readonly<IFluidPackage>; | ||
export declare const isFluidPackage: (pkg: unknown) => pkg is Readonly<IFluidPackage>; | ||
/** | ||
@@ -73,0 +73,0 @@ * Package manager configuration. Provides a key value mapping of config values. |
@@ -16,4 +16,7 @@ "use strict"; | ||
*/ | ||
const isFluidPackage = (pkg) => typeof pkg === "object" && typeof (pkg === null || pkg === void 0 ? void 0 : pkg.name) === "string" && typeof (pkg === null || pkg === void 0 ? void 0 : pkg.fluid) === "object"; | ||
const isFluidPackage = (pkg) => typeof pkg === "object" && | ||
typeof pkg?.name === "string" && | ||
typeof pkg?.fluid === "object"; | ||
exports.isFluidPackage = isFluidPackage; | ||
// eslint-disable-next-line jsdoc/require-description | ||
/** | ||
@@ -26,5 +29,5 @@ * @deprecated in favor of {@link @fluidframework/container-definitions#isFluidCodeDetails} | ||
return (typeof maybeCodeDetails === "object" && | ||
(typeof (maybeCodeDetails === null || maybeCodeDetails === void 0 ? void 0 : maybeCodeDetails.package) === "string" || | ||
(0, exports.isFluidPackage)(maybeCodeDetails === null || maybeCodeDetails === void 0 ? void 0 : maybeCodeDetails.package)) && | ||
((maybeCodeDetails === null || maybeCodeDetails === void 0 ? void 0 : maybeCodeDetails.config) === undefined || typeof (maybeCodeDetails === null || maybeCodeDetails === void 0 ? void 0 : maybeCodeDetails.config) === "object")); | ||
(typeof maybeCodeDetails?.package === "string" || | ||
(0, exports.isFluidPackage)(maybeCodeDetails?.package)) && | ||
(maybeCodeDetails?.config === undefined || typeof maybeCodeDetails?.config === "object")); | ||
}; | ||
@@ -31,0 +34,0 @@ exports.isFluidCodeDetails = isFluidCodeDetails; |
@@ -5,9 +5,19 @@ /*! | ||
*/ | ||
export type { IDisposable } from "./disposable"; | ||
export { FluidErrorTypes, IErrorBase, IGenericError, IUsageError, IThrottlingWarning, } from "./error"; | ||
export type { ExtendEventProvider, IErrorEvent, IEvent, IEventProvider, IEventThisPlaceHolder, IEventTransformer, ReplaceIEventThisPlaceHolder, TransformedEvent, } from "./events"; | ||
export { IFluidLoadable, IProvideFluidLoadable, IFluidRunnable, IProvideFluidRunnable, } from "./fluidLoadable"; | ||
export { IFluidPackageEnvironment, IFluidPackage, isFluidPackage, IFluidCodeDetailsConfig, IFluidCodeDetails, isFluidCodeDetails, IFluidCodeDetailsComparer, IProvideFluidCodeDetailsComparer, } from "./fluidPackage"; | ||
export { IRequest, IRequestHeader, IResponse, IProvideFluidRouter, IFluidRouter, } from "./fluidRouter"; | ||
export { IFluidHandleContext, IProvideFluidHandleContext, IFluidHandle, IProvideFluidHandle, } from "./handles"; | ||
export { IFluidPackageEnvironment, IFluidPackage, isFluidPackage, IFluidCodeDetailsConfig, IFluidCodeDetails, isFluidCodeDetails, IFluidCodeDetailsComparer, IProvideFluidCodeDetailsComparer, } from "./fluidPackage"; | ||
export type { ILoggingError, ITaggedTelemetryPropertyType, // deprecated | ||
ITelemetryBaseEvent, ITelemetryBaseLogger, ITelemetryBaseProperties, ITelemetryErrorEvent, // deprecated | ||
ITelemetryGenericEvent, // deprecated | ||
ITelemetryLogger, // deprecated | ||
ITelemetryPerformanceEvent, // deprecated | ||
ITelemetryProperties, // deprecated | ||
Tagged, TelemetryEventCategory, // deprecated | ||
TelemetryBaseEventPropertyType, TelemetryEventPropertyType, } from "./logger"; | ||
export { LogLevel } from "./logger"; | ||
export { FluidObjectProviderKeys, FluidObject, FluidObjectKeys } from "./provider"; | ||
export type { IDisposable } from "./disposable"; | ||
export type { ILoggingError, ITaggedTelemetryPropertyType, ITelemetryBaseEvent, ITelemetryBaseLogger, ITelemetryErrorEvent, ITelemetryGenericEvent, ITelemetryLogger, ITelemetryPerformanceEvent, ITelemetryProperties, TelemetryEventCategory, TelemetryEventPropertyType, } from "./logger"; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -7,6 +7,12 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.IFluidCodeDetailsComparer = exports.isFluidCodeDetails = exports.isFluidPackage = exports.IFluidHandle = exports.IFluidHandleContext = exports.IFluidRouter = exports.IFluidRunnable = exports.IFluidLoadable = void 0; | ||
exports.LogLevel = exports.IFluidHandle = exports.IFluidHandleContext = exports.IFluidRouter = exports.IFluidCodeDetailsComparer = exports.isFluidCodeDetails = exports.isFluidPackage = exports.IFluidRunnable = exports.IFluidLoadable = exports.FluidErrorTypes = void 0; | ||
var error_1 = require("./error"); | ||
Object.defineProperty(exports, "FluidErrorTypes", { enumerable: true, get: function () { return error_1.FluidErrorTypes; } }); | ||
var fluidLoadable_1 = require("./fluidLoadable"); | ||
Object.defineProperty(exports, "IFluidLoadable", { enumerable: true, get: function () { return fluidLoadable_1.IFluidLoadable; } }); | ||
Object.defineProperty(exports, "IFluidRunnable", { enumerable: true, get: function () { return fluidLoadable_1.IFluidRunnable; } }); | ||
var fluidPackage_1 = require("./fluidPackage"); | ||
Object.defineProperty(exports, "isFluidPackage", { enumerable: true, get: function () { return fluidPackage_1.isFluidPackage; } }); | ||
Object.defineProperty(exports, "isFluidCodeDetails", { enumerable: true, get: function () { return fluidPackage_1.isFluidCodeDetails; } }); | ||
Object.defineProperty(exports, "IFluidCodeDetailsComparer", { enumerable: true, get: function () { return fluidPackage_1.IFluidCodeDetailsComparer; } }); | ||
// Typescript forgets the index signature when customers augment IRequestHeader if we export *. | ||
@@ -20,6 +26,4 @@ // So we export the explicit members as a workaround: | ||
Object.defineProperty(exports, "IFluidHandle", { enumerable: true, get: function () { return handles_1.IFluidHandle; } }); | ||
var fluidPackage_1 = require("./fluidPackage"); | ||
Object.defineProperty(exports, "isFluidPackage", { enumerable: true, get: function () { return fluidPackage_1.isFluidPackage; } }); | ||
Object.defineProperty(exports, "isFluidCodeDetails", { enumerable: true, get: function () { return fluidPackage_1.isFluidCodeDetails; } }); | ||
Object.defineProperty(exports, "IFluidCodeDetailsComparer", { enumerable: true, get: function () { return fluidPackage_1.IFluidCodeDetailsComparer; } }); | ||
var logger_1 = require("./logger"); | ||
Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return logger_1.LogLevel; } }); | ||
//# sourceMappingURL=index.js.map |
@@ -7,2 +7,4 @@ /*! | ||
* Examples of known categories, however category can be any string for extensibility. | ||
* | ||
* @deprecated Moved to \@fluidframework/telemetry-utils package | ||
*/ | ||
@@ -17,8 +19,25 @@ export declare type TelemetryEventCategory = "generic" | "error" | "performance"; | ||
*/ | ||
export declare type TelemetryBaseEventPropertyType = TelemetryEventPropertyType; | ||
/** | ||
* {@inheritDoc TelemetryBaseEventPropertyType} | ||
* | ||
* @deprecated Renamed to {@link TelemetryBaseEventPropertyType} | ||
*/ | ||
export declare type TelemetryEventPropertyType = string | number | boolean | undefined; | ||
/** | ||
* A property to be logged to telemetry containing both the value and a tag. Tags are generic strings that can be used | ||
* to mark pieces of information that should be organized or handled differently by loggers in various first or third | ||
* A property to be logged to telemetry may require a tag indicating the value may contain sensitive data. | ||
* This type wraps a value of the given type V in an object along with a string tag (type can be further specified as T). | ||
* | ||
* This indicates that the value should be organized or handled differently by loggers in various first or third | ||
* party scenarios. For example, tags are used to mark data that should not be stored in logs for privacy reasons. | ||
*/ | ||
export interface Tagged<V, T extends string = string> { | ||
value: V; | ||
tag: T; | ||
} | ||
/** | ||
* @see {@link Tagged} for info on tagging | ||
* | ||
* @deprecated Use Tagged\<TelemetryBaseEventPropertyType\> | ||
*/ | ||
export interface ITaggedTelemetryPropertyType { | ||
@@ -31,4 +50,10 @@ value: TelemetryEventPropertyType; | ||
*/ | ||
export declare type ITelemetryBaseProperties = ITelemetryProperties; | ||
/** | ||
* {@inheritDoc ITelemetryBaseProperties} | ||
* | ||
* @deprecated Renamed to {@link ITelemetryBaseProperties} | ||
*/ | ||
export interface ITelemetryProperties { | ||
[index: string]: TelemetryEventPropertyType | ITaggedTelemetryPropertyType; | ||
[index: string]: TelemetryEventPropertyType | Tagged<TelemetryEventPropertyType>; | ||
} | ||
@@ -41,3 +66,3 @@ /** | ||
*/ | ||
export interface ITelemetryBaseEvent extends ITelemetryProperties { | ||
export interface ITelemetryBaseEvent extends ITelemetryBaseProperties { | ||
category: string; | ||
@@ -47,2 +72,14 @@ eventName: string; | ||
/** | ||
* Specify levels of the logs. | ||
*/ | ||
export declare const LogLevel: { | ||
readonly verbose: 10; | ||
readonly default: 20; | ||
readonly error: 30; | ||
}; | ||
/** | ||
* Specify a level to the log to filter out logs based on the level. | ||
*/ | ||
export declare type LogLevel = typeof LogLevel[keyof typeof LogLevel]; | ||
/** | ||
* Interface to output telemetry events. | ||
@@ -52,3 +89,4 @@ * Implemented by hosting app / loader | ||
export interface ITelemetryBaseLogger { | ||
send(event: ITelemetryBaseEvent): void; | ||
send(event: ITelemetryBaseEvent, logLevel?: LogLevel): void; | ||
minLogLevel?: LogLevel; | ||
} | ||
@@ -58,2 +96,5 @@ /** | ||
* Maps to category = "generic" | ||
* | ||
* @deprecated For internal use within FluidFramework, use ITelemetryGenericEventExt in \@fluidframework/telemetry-utils. | ||
* No replacement intended for FluidFramework consumers. | ||
*/ | ||
@@ -67,2 +108,5 @@ export interface ITelemetryGenericEvent extends ITelemetryProperties { | ||
* Maps to category = "error" | ||
* | ||
* @deprecated For internal use within FluidFramework, use ITelemetryErrorEventExt in \@fluidframework/telemetry-utils. | ||
* No replacement intended for FluidFramework consumers. | ||
*/ | ||
@@ -75,2 +119,5 @@ export interface ITelemetryErrorEvent extends ITelemetryProperties { | ||
* Maps to category = "performance" | ||
* | ||
* @deprecated For internal use within FluidFramework, use ITelemetryPerformanceEventExt in \@fluidframework/telemetry-utils. | ||
* No replacement intended for FluidFramework consumers. | ||
*/ | ||
@@ -87,3 +134,3 @@ export interface ITelemetryPerformanceEvent extends ITelemetryGenericEvent { | ||
*/ | ||
getTelemetryProperties(): ITelemetryProperties; | ||
getTelemetryProperties(): ITelemetryBaseProperties; | ||
} | ||
@@ -94,2 +141,5 @@ /** | ||
* Creates sub-logger that appends properties to all events | ||
* | ||
* @deprecated For internal use within FluidFramework, use ITelemetryLoggerExt in \@fluidframework/telemetry-utils. | ||
* No replacement intended for FluidFramework consumers. | ||
*/ | ||
@@ -101,4 +151,5 @@ export interface ITelemetryLogger extends ITelemetryBaseLogger { | ||
* @param event - Telemetry event to send over | ||
* @param logLevel - optional level of the log. | ||
*/ | ||
send(event: ITelemetryBaseEvent): void; | ||
send(event: ITelemetryBaseEvent, logLevel?: LogLevel): void; | ||
/** | ||
@@ -108,7 +159,9 @@ * Send information telemetry event | ||
* @param error - optional error object to log | ||
* @param logLevel - optional level of the log. | ||
*/ | ||
sendTelemetryEvent(event: ITelemetryGenericEvent, error?: any): void; | ||
sendTelemetryEvent(event: ITelemetryGenericEvent, error?: any, logLevel?: typeof LogLevel.verbose | typeof LogLevel.default): void; | ||
/** | ||
* Send error telemetry event | ||
* @param event - Event to send | ||
* @param error - optional error object to log | ||
*/ | ||
@@ -119,5 +172,7 @@ sendErrorEvent(event: ITelemetryErrorEvent, error?: any): void; | ||
* @param event - Event to send | ||
* @param error - optional error object to log | ||
* @param logLevel - optional level of the log. | ||
*/ | ||
sendPerformanceEvent(event: ITelemetryPerformanceEvent, error?: any): void; | ||
sendPerformanceEvent(event: ITelemetryPerformanceEvent, error?: any, logLevel?: typeof LogLevel.verbose | typeof LogLevel.default): void; | ||
} | ||
//# sourceMappingURL=logger.d.ts.map |
@@ -7,2 +7,11 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.LogLevel = void 0; | ||
/** | ||
* Specify levels of the logs. | ||
*/ | ||
exports.LogLevel = { | ||
verbose: 10, | ||
default: 20, | ||
error: 30, // To log errors. | ||
}; | ||
//# sourceMappingURL=logger.js.map |
@@ -6,4 +6,6 @@ /*! | ||
/** | ||
* This utility type is meant for internal use by {@link FluidObject} | ||
* Produces a valid FluidObject key given a type and a property. | ||
* | ||
* @remarks | ||
* | ||
* A valid FluidObject key is a property that exists on the incoming type | ||
@@ -13,3 +15,6 @@ * as well as on the type of the property itself. For example: `IProvideFoo.IFoo.IFoo` | ||
* | ||
* This utility type is meant for internal use by {@link FluidObject} | ||
* | ||
* @example | ||
* | ||
* ```typescript | ||
@@ -23,6 +28,5 @@ * interface IProvideFoo{ | ||
* ``` | ||
* | ||
* This pattern enables discovery, and delegation in a standard way which is central | ||
* to FluidObject pattern | ||
* | ||
* @internal | ||
* to FluidObject pattern. | ||
*/ | ||
@@ -39,3 +43,5 @@ export declare type FluidObjectProviderKeys<T, TProp extends keyof T = keyof T> = string extends TProp ? never : number extends TProp ? never : TProp extends keyof Required<T>[TProp] ? Required<T>[TProp] extends Required<Required<T>[TProp]>[TProp] ? TProp : never : never; | ||
* @example | ||
* For example, if we have an interface like below | ||
* | ||
* For example, if we have an interface like the following: | ||
* | ||
* ```typescript | ||
@@ -42,0 +48,0 @@ * interface IProvideFoo{ |
@@ -70,3 +70,3 @@ /*! | ||
*/ | ||
export declare const isFluidPackage: (pkg: any) => pkg is Readonly<IFluidPackage>; | ||
export declare const isFluidPackage: (pkg: unknown) => pkg is Readonly<IFluidPackage>; | ||
/** | ||
@@ -73,0 +73,0 @@ * Package manager configuration. Provides a key value mapping of config values. |
@@ -13,3 +13,6 @@ /*! | ||
*/ | ||
export const isFluidPackage = (pkg) => typeof pkg === "object" && typeof (pkg === null || pkg === void 0 ? void 0 : pkg.name) === "string" && typeof (pkg === null || pkg === void 0 ? void 0 : pkg.fluid) === "object"; | ||
export const isFluidPackage = (pkg) => typeof pkg === "object" && | ||
typeof pkg?.name === "string" && | ||
typeof pkg?.fluid === "object"; | ||
// eslint-disable-next-line jsdoc/require-description | ||
/** | ||
@@ -22,5 +25,5 @@ * @deprecated in favor of {@link @fluidframework/container-definitions#isFluidCodeDetails} | ||
return (typeof maybeCodeDetails === "object" && | ||
(typeof (maybeCodeDetails === null || maybeCodeDetails === void 0 ? void 0 : maybeCodeDetails.package) === "string" || | ||
isFluidPackage(maybeCodeDetails === null || maybeCodeDetails === void 0 ? void 0 : maybeCodeDetails.package)) && | ||
((maybeCodeDetails === null || maybeCodeDetails === void 0 ? void 0 : maybeCodeDetails.config) === undefined || typeof (maybeCodeDetails === null || maybeCodeDetails === void 0 ? void 0 : maybeCodeDetails.config) === "object")); | ||
(typeof maybeCodeDetails?.package === "string" || | ||
isFluidPackage(maybeCodeDetails?.package)) && | ||
(maybeCodeDetails?.config === undefined || typeof maybeCodeDetails?.config === "object")); | ||
}; | ||
@@ -27,0 +30,0 @@ /** |
@@ -5,9 +5,19 @@ /*! | ||
*/ | ||
export type { IDisposable } from "./disposable"; | ||
export { FluidErrorTypes, IErrorBase, IGenericError, IUsageError, IThrottlingWarning, } from "./error"; | ||
export type { ExtendEventProvider, IErrorEvent, IEvent, IEventProvider, IEventThisPlaceHolder, IEventTransformer, ReplaceIEventThisPlaceHolder, TransformedEvent, } from "./events"; | ||
export { IFluidLoadable, IProvideFluidLoadable, IFluidRunnable, IProvideFluidRunnable, } from "./fluidLoadable"; | ||
export { IFluidPackageEnvironment, IFluidPackage, isFluidPackage, IFluidCodeDetailsConfig, IFluidCodeDetails, isFluidCodeDetails, IFluidCodeDetailsComparer, IProvideFluidCodeDetailsComparer, } from "./fluidPackage"; | ||
export { IRequest, IRequestHeader, IResponse, IProvideFluidRouter, IFluidRouter, } from "./fluidRouter"; | ||
export { IFluidHandleContext, IProvideFluidHandleContext, IFluidHandle, IProvideFluidHandle, } from "./handles"; | ||
export { IFluidPackageEnvironment, IFluidPackage, isFluidPackage, IFluidCodeDetailsConfig, IFluidCodeDetails, isFluidCodeDetails, IFluidCodeDetailsComparer, IProvideFluidCodeDetailsComparer, } from "./fluidPackage"; | ||
export type { ILoggingError, ITaggedTelemetryPropertyType, // deprecated | ||
ITelemetryBaseEvent, ITelemetryBaseLogger, ITelemetryBaseProperties, ITelemetryErrorEvent, // deprecated | ||
ITelemetryGenericEvent, // deprecated | ||
ITelemetryLogger, // deprecated | ||
ITelemetryPerformanceEvent, // deprecated | ||
ITelemetryProperties, // deprecated | ||
Tagged, TelemetryEventCategory, // deprecated | ||
TelemetryBaseEventPropertyType, TelemetryEventPropertyType, } from "./logger"; | ||
export { LogLevel } from "./logger"; | ||
export { FluidObjectProviderKeys, FluidObject, FluidObjectKeys } from "./provider"; | ||
export type { IDisposable } from "./disposable"; | ||
export type { ILoggingError, ITaggedTelemetryPropertyType, ITelemetryBaseEvent, ITelemetryBaseLogger, ITelemetryErrorEvent, ITelemetryGenericEvent, ITelemetryLogger, ITelemetryPerformanceEvent, ITelemetryProperties, TelemetryEventCategory, TelemetryEventPropertyType, } from "./logger"; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -5,3 +5,5 @@ /*! | ||
*/ | ||
export { FluidErrorTypes, } from "./error"; | ||
export { IFluidLoadable, IFluidRunnable, } from "./fluidLoadable"; | ||
export { isFluidPackage, isFluidCodeDetails, IFluidCodeDetailsComparer, } from "./fluidPackage"; | ||
// Typescript forgets the index signature when customers augment IRequestHeader if we export *. | ||
@@ -12,3 +14,3 @@ // So we export the explicit members as a workaround: | ||
export { IFluidHandleContext, IFluidHandle, } from "./handles"; | ||
export { isFluidPackage, isFluidCodeDetails, IFluidCodeDetailsComparer, } from "./fluidPackage"; | ||
export { LogLevel } from "./logger"; | ||
//# sourceMappingURL=index.js.map |
@@ -7,2 +7,4 @@ /*! | ||
* Examples of known categories, however category can be any string for extensibility. | ||
* | ||
* @deprecated Moved to \@fluidframework/telemetry-utils package | ||
*/ | ||
@@ -17,8 +19,25 @@ export declare type TelemetryEventCategory = "generic" | "error" | "performance"; | ||
*/ | ||
export declare type TelemetryBaseEventPropertyType = TelemetryEventPropertyType; | ||
/** | ||
* {@inheritDoc TelemetryBaseEventPropertyType} | ||
* | ||
* @deprecated Renamed to {@link TelemetryBaseEventPropertyType} | ||
*/ | ||
export declare type TelemetryEventPropertyType = string | number | boolean | undefined; | ||
/** | ||
* A property to be logged to telemetry containing both the value and a tag. Tags are generic strings that can be used | ||
* to mark pieces of information that should be organized or handled differently by loggers in various first or third | ||
* A property to be logged to telemetry may require a tag indicating the value may contain sensitive data. | ||
* This type wraps a value of the given type V in an object along with a string tag (type can be further specified as T). | ||
* | ||
* This indicates that the value should be organized or handled differently by loggers in various first or third | ||
* party scenarios. For example, tags are used to mark data that should not be stored in logs for privacy reasons. | ||
*/ | ||
export interface Tagged<V, T extends string = string> { | ||
value: V; | ||
tag: T; | ||
} | ||
/** | ||
* @see {@link Tagged} for info on tagging | ||
* | ||
* @deprecated Use Tagged\<TelemetryBaseEventPropertyType\> | ||
*/ | ||
export interface ITaggedTelemetryPropertyType { | ||
@@ -31,4 +50,10 @@ value: TelemetryEventPropertyType; | ||
*/ | ||
export declare type ITelemetryBaseProperties = ITelemetryProperties; | ||
/** | ||
* {@inheritDoc ITelemetryBaseProperties} | ||
* | ||
* @deprecated Renamed to {@link ITelemetryBaseProperties} | ||
*/ | ||
export interface ITelemetryProperties { | ||
[index: string]: TelemetryEventPropertyType | ITaggedTelemetryPropertyType; | ||
[index: string]: TelemetryEventPropertyType | Tagged<TelemetryEventPropertyType>; | ||
} | ||
@@ -41,3 +66,3 @@ /** | ||
*/ | ||
export interface ITelemetryBaseEvent extends ITelemetryProperties { | ||
export interface ITelemetryBaseEvent extends ITelemetryBaseProperties { | ||
category: string; | ||
@@ -47,2 +72,14 @@ eventName: string; | ||
/** | ||
* Specify levels of the logs. | ||
*/ | ||
export declare const LogLevel: { | ||
readonly verbose: 10; | ||
readonly default: 20; | ||
readonly error: 30; | ||
}; | ||
/** | ||
* Specify a level to the log to filter out logs based on the level. | ||
*/ | ||
export declare type LogLevel = typeof LogLevel[keyof typeof LogLevel]; | ||
/** | ||
* Interface to output telemetry events. | ||
@@ -52,3 +89,4 @@ * Implemented by hosting app / loader | ||
export interface ITelemetryBaseLogger { | ||
send(event: ITelemetryBaseEvent): void; | ||
send(event: ITelemetryBaseEvent, logLevel?: LogLevel): void; | ||
minLogLevel?: LogLevel; | ||
} | ||
@@ -58,2 +96,5 @@ /** | ||
* Maps to category = "generic" | ||
* | ||
* @deprecated For internal use within FluidFramework, use ITelemetryGenericEventExt in \@fluidframework/telemetry-utils. | ||
* No replacement intended for FluidFramework consumers. | ||
*/ | ||
@@ -67,2 +108,5 @@ export interface ITelemetryGenericEvent extends ITelemetryProperties { | ||
* Maps to category = "error" | ||
* | ||
* @deprecated For internal use within FluidFramework, use ITelemetryErrorEventExt in \@fluidframework/telemetry-utils. | ||
* No replacement intended for FluidFramework consumers. | ||
*/ | ||
@@ -75,2 +119,5 @@ export interface ITelemetryErrorEvent extends ITelemetryProperties { | ||
* Maps to category = "performance" | ||
* | ||
* @deprecated For internal use within FluidFramework, use ITelemetryPerformanceEventExt in \@fluidframework/telemetry-utils. | ||
* No replacement intended for FluidFramework consumers. | ||
*/ | ||
@@ -87,3 +134,3 @@ export interface ITelemetryPerformanceEvent extends ITelemetryGenericEvent { | ||
*/ | ||
getTelemetryProperties(): ITelemetryProperties; | ||
getTelemetryProperties(): ITelemetryBaseProperties; | ||
} | ||
@@ -94,2 +141,5 @@ /** | ||
* Creates sub-logger that appends properties to all events | ||
* | ||
* @deprecated For internal use within FluidFramework, use ITelemetryLoggerExt in \@fluidframework/telemetry-utils. | ||
* No replacement intended for FluidFramework consumers. | ||
*/ | ||
@@ -101,4 +151,5 @@ export interface ITelemetryLogger extends ITelemetryBaseLogger { | ||
* @param event - Telemetry event to send over | ||
* @param logLevel - optional level of the log. | ||
*/ | ||
send(event: ITelemetryBaseEvent): void; | ||
send(event: ITelemetryBaseEvent, logLevel?: LogLevel): void; | ||
/** | ||
@@ -108,7 +159,9 @@ * Send information telemetry event | ||
* @param error - optional error object to log | ||
* @param logLevel - optional level of the log. | ||
*/ | ||
sendTelemetryEvent(event: ITelemetryGenericEvent, error?: any): void; | ||
sendTelemetryEvent(event: ITelemetryGenericEvent, error?: any, logLevel?: typeof LogLevel.verbose | typeof LogLevel.default): void; | ||
/** | ||
* Send error telemetry event | ||
* @param event - Event to send | ||
* @param error - optional error object to log | ||
*/ | ||
@@ -119,5 +172,7 @@ sendErrorEvent(event: ITelemetryErrorEvent, error?: any): void; | ||
* @param event - Event to send | ||
* @param error - optional error object to log | ||
* @param logLevel - optional level of the log. | ||
*/ | ||
sendPerformanceEvent(event: ITelemetryPerformanceEvent, error?: any): void; | ||
sendPerformanceEvent(event: ITelemetryPerformanceEvent, error?: any, logLevel?: typeof LogLevel.verbose | typeof LogLevel.default): void; | ||
} | ||
//# sourceMappingURL=logger.d.ts.map |
@@ -5,3 +5,10 @@ /*! | ||
*/ | ||
export {}; | ||
/** | ||
* Specify levels of the logs. | ||
*/ | ||
export const LogLevel = { | ||
verbose: 10, | ||
default: 20, | ||
error: 30, // To log errors. | ||
}; | ||
//# sourceMappingURL=logger.js.map |
@@ -6,4 +6,6 @@ /*! | ||
/** | ||
* This utility type is meant for internal use by {@link FluidObject} | ||
* Produces a valid FluidObject key given a type and a property. | ||
* | ||
* @remarks | ||
* | ||
* A valid FluidObject key is a property that exists on the incoming type | ||
@@ -13,3 +15,6 @@ * as well as on the type of the property itself. For example: `IProvideFoo.IFoo.IFoo` | ||
* | ||
* This utility type is meant for internal use by {@link FluidObject} | ||
* | ||
* @example | ||
* | ||
* ```typescript | ||
@@ -23,6 +28,5 @@ * interface IProvideFoo{ | ||
* ``` | ||
* | ||
* This pattern enables discovery, and delegation in a standard way which is central | ||
* to FluidObject pattern | ||
* | ||
* @internal | ||
* to FluidObject pattern. | ||
*/ | ||
@@ -39,3 +43,5 @@ export declare type FluidObjectProviderKeys<T, TProp extends keyof T = keyof T> = string extends TProp ? never : number extends TProp ? never : TProp extends keyof Required<T>[TProp] ? Required<T>[TProp] extends Required<Required<T>[TProp]>[TProp] ? TProp : never : never; | ||
* @example | ||
* For example, if we have an interface like below | ||
* | ||
* For example, if we have an interface like the following: | ||
* | ||
* ```typescript | ||
@@ -42,0 +48,0 @@ * interface IProvideFoo{ |
{ | ||
"name": "@fluidframework/core-interfaces", | ||
"version": "2.0.0-dev.5.3.2.178189", | ||
"version": "2.0.0-dev.6.4.0.191258", | ||
"description": "Fluid object interfaces", | ||
@@ -18,10 +18,9 @@ "homepage": "https://fluidframework.com", | ||
"devDependencies": { | ||
"@fluid-tools/build-cli": "^0.21.0", | ||
"@fluidframework/build-common": "^1.2.0", | ||
"@fluidframework/build-tools": "^0.21.0", | ||
"@fluidframework/core-interfaces-previous": "npm:@fluidframework/core-interfaces@2.0.0-internal.5.2.0", | ||
"@fluidframework/eslint-config-fluid": "^2.0.0", | ||
"@fluid-tools/build-cli": "^0.22.0", | ||
"@fluidframework/build-common": "^2.0.0", | ||
"@fluidframework/build-tools": "^0.22.0", | ||
"@fluidframework/core-interfaces-previous": "npm:@fluidframework/core-interfaces@2.0.0-internal.6.3.0", | ||
"@fluidframework/eslint-config-fluid": "^2.1.0", | ||
"@microsoft/api-extractor": "^7.34.4", | ||
"@types/node": "^14.18.38", | ||
"concurrently": "^7.6.0", | ||
"@types/node": "^16.18.38", | ||
"copyfiles": "^2.4.1", | ||
@@ -47,3 +46,3 @@ "eslint": "~8.6.0", | ||
"ci:test:coverage": "echo No test for this package", | ||
"clean": "rimraf dist lib *.tsbuildinfo *.build.log", | ||
"clean": "rimraf --glob 'dist' 'lib' '*.tsbuildinfo' '*.build.log' '_api-extractor-temp'", | ||
"eslint": "eslint --format stylish src", | ||
@@ -50,0 +49,0 @@ "eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout", |
@@ -18,5 +18,6 @@ # @fluidframework/core-interfaces | ||
Note that when depending on a library version of the form 2.0.0-internal.x.y.z, called the Fluid internal version | ||
scheme, you must use a `>= <` dependency range. Standard `^` and `~` ranges will not work as expected. See the | ||
[@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md) | ||
Note that when depending on a library version of the form `2.0.0-internal.x.y.z`, called the Fluid internal version scheme, | ||
you must use a `>= <` dependency range (such as `>=2.0.0-internal.x.y.z <2.0.0-internal.w.0.0` where `w` is `x+1`). | ||
Standard `^` and `~` ranges will not work as expected. | ||
See the [@fluid-tools/version-tools](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/version-tools/README.md) | ||
package for more information including tools to convert between version schemes. | ||
@@ -23,0 +24,0 @@ |
@@ -27,4 +27,6 @@ /*! | ||
export interface IFluidRunnable { | ||
// TODO: Use `unknown` instead (API-Breaking) | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
run(...args: any[]): Promise<void>; | ||
stop(reason?: string): void; | ||
} |
@@ -76,4 +76,6 @@ /*! | ||
*/ | ||
export const isFluidPackage = (pkg: any): pkg is Readonly<IFluidPackage> => | ||
typeof pkg === "object" && typeof pkg?.name === "string" && typeof pkg?.fluid === "object"; | ||
export const isFluidPackage = (pkg: unknown): pkg is Readonly<IFluidPackage> => | ||
typeof pkg === "object" && | ||
typeof (pkg as Partial<IFluidPackage>)?.name === "string" && | ||
typeof (pkg as Partial<IFluidPackage>)?.fluid === "object"; | ||
@@ -109,2 +111,3 @@ /** | ||
// eslint-disable-next-line jsdoc/require-description | ||
/** | ||
@@ -111,0 +114,0 @@ * @deprecated in favor of {@link @fluidframework/container-definitions#isFluidCodeDetails} |
@@ -7,2 +7,4 @@ /*! | ||
export interface IRequestHeader { | ||
// TODO: Use `unknown` instead (API-Breaking) | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
[index: string]: any; | ||
@@ -19,3 +21,7 @@ } | ||
status: number; | ||
// TODO: Use `unknown` instead (API-Breaking) | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
value: any; | ||
// TODO: Use `unknown` instead (API-Breaking) | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
headers?: { [key: string]: any }; | ||
@@ -22,0 +28,0 @@ stack?: string; |
@@ -6,3 +6,24 @@ /*! | ||
export type { IDisposable } from "./disposable"; | ||
export { | ||
FluidErrorTypes, | ||
IErrorBase, | ||
IGenericError, | ||
IUsageError, | ||
IThrottlingWarning, | ||
} from "./error"; | ||
export type { | ||
ExtendEventProvider, | ||
IErrorEvent, | ||
IEvent, | ||
IEventProvider, | ||
IEventThisPlaceHolder, | ||
IEventTransformer, | ||
ReplaceIEventThisPlaceHolder, | ||
TransformedEvent, | ||
} from "./events"; | ||
export { | ||
IFluidLoadable, | ||
@@ -14,2 +35,13 @@ IProvideFluidLoadable, | ||
export { | ||
IFluidPackageEnvironment, | ||
IFluidPackage, | ||
isFluidPackage, | ||
IFluidCodeDetailsConfig, | ||
IFluidCodeDetails, | ||
isFluidCodeDetails, | ||
IFluidCodeDetailsComparer, | ||
IProvideFluidCodeDetailsComparer, | ||
} from "./fluidPackage"; | ||
// Typescript forgets the index signature when customers augment IRequestHeader if we export *. | ||
@@ -33,27 +65,19 @@ // So we export the explicit members as a workaround: | ||
export { | ||
IFluidPackageEnvironment, | ||
IFluidPackage, | ||
isFluidPackage, | ||
IFluidCodeDetailsConfig, | ||
IFluidCodeDetails, | ||
isFluidCodeDetails, | ||
IFluidCodeDetailsComparer, | ||
IProvideFluidCodeDetailsComparer, | ||
} from "./fluidPackage"; | ||
export { FluidObjectProviderKeys, FluidObject, FluidObjectKeys } from "./provider"; | ||
export type { IDisposable } from "./disposable"; | ||
export type { | ||
ILoggingError, | ||
ITaggedTelemetryPropertyType, | ||
ITaggedTelemetryPropertyType, // deprecated | ||
ITelemetryBaseEvent, | ||
ITelemetryBaseLogger, | ||
ITelemetryErrorEvent, | ||
ITelemetryGenericEvent, | ||
ITelemetryLogger, | ||
ITelemetryPerformanceEvent, | ||
ITelemetryProperties, | ||
TelemetryEventCategory, | ||
TelemetryEventPropertyType, | ||
ITelemetryBaseProperties, | ||
ITelemetryErrorEvent, // deprecated | ||
ITelemetryGenericEvent, // deprecated | ||
ITelemetryLogger, // deprecated | ||
ITelemetryPerformanceEvent, // deprecated | ||
ITelemetryProperties, // deprecated | ||
Tagged, | ||
TelemetryEventCategory, // deprecated | ||
TelemetryBaseEventPropertyType, | ||
TelemetryEventPropertyType, // deprecated | ||
} from "./logger"; | ||
export { LogLevel } from "./logger"; | ||
export { FluidObjectProviderKeys, FluidObject, FluidObjectKeys } from "./provider"; |
@@ -8,2 +8,4 @@ /*! | ||
* Examples of known categories, however category can be any string for extensibility. | ||
* | ||
* @deprecated Moved to \@fluidframework/telemetry-utils package | ||
*/ | ||
@@ -19,9 +21,28 @@ export type TelemetryEventCategory = "generic" | "error" | "performance"; | ||
*/ | ||
export type TelemetryBaseEventPropertyType = TelemetryEventPropertyType; | ||
/** | ||
* {@inheritDoc TelemetryBaseEventPropertyType} | ||
* | ||
* @deprecated Renamed to {@link TelemetryBaseEventPropertyType} | ||
*/ | ||
export type TelemetryEventPropertyType = string | number | boolean | undefined; | ||
/** | ||
* A property to be logged to telemetry containing both the value and a tag. Tags are generic strings that can be used | ||
* to mark pieces of information that should be organized or handled differently by loggers in various first or third | ||
* A property to be logged to telemetry may require a tag indicating the value may contain sensitive data. | ||
* This type wraps a value of the given type V in an object along with a string tag (type can be further specified as T). | ||
* | ||
* This indicates that the value should be organized or handled differently by loggers in various first or third | ||
* party scenarios. For example, tags are used to mark data that should not be stored in logs for privacy reasons. | ||
*/ | ||
export interface Tagged<V, T extends string = string> { | ||
value: V; | ||
tag: T; | ||
} | ||
/** | ||
* @see {@link Tagged} for info on tagging | ||
* | ||
* @deprecated Use Tagged\<TelemetryBaseEventPropertyType\> | ||
*/ | ||
export interface ITaggedTelemetryPropertyType { | ||
@@ -35,4 +56,11 @@ value: TelemetryEventPropertyType; | ||
*/ | ||
export type ITelemetryBaseProperties = ITelemetryProperties; | ||
/** | ||
* {@inheritDoc ITelemetryBaseProperties} | ||
* | ||
* @deprecated Renamed to {@link ITelemetryBaseProperties} | ||
*/ | ||
export interface ITelemetryProperties { | ||
[index: string]: TelemetryEventPropertyType | ITaggedTelemetryPropertyType; | ||
[index: string]: TelemetryEventPropertyType | Tagged<TelemetryEventPropertyType>; | ||
} | ||
@@ -46,3 +74,3 @@ | ||
*/ | ||
export interface ITelemetryBaseEvent extends ITelemetryProperties { | ||
export interface ITelemetryBaseEvent extends ITelemetryBaseProperties { | ||
category: string; | ||
@@ -53,2 +81,16 @@ eventName: string; | ||
/** | ||
* Specify levels of the logs. | ||
*/ | ||
export const LogLevel = { | ||
verbose: 10, // To log any verbose event for example when you are debugging something. | ||
default: 20, // Default log level | ||
error: 30, // To log errors. | ||
} as const; | ||
/** | ||
* Specify a level to the log to filter out logs based on the level. | ||
*/ | ||
export type LogLevel = typeof LogLevel[keyof typeof LogLevel]; | ||
/** | ||
* Interface to output telemetry events. | ||
@@ -58,3 +100,5 @@ * Implemented by hosting app / loader | ||
export interface ITelemetryBaseLogger { | ||
send(event: ITelemetryBaseEvent): void; | ||
send(event: ITelemetryBaseEvent, logLevel?: LogLevel): void; | ||
minLogLevel?: LogLevel; | ||
} | ||
@@ -65,2 +109,5 @@ | ||
* Maps to category = "generic" | ||
* | ||
* @deprecated For internal use within FluidFramework, use ITelemetryGenericEventExt in \@fluidframework/telemetry-utils. | ||
* No replacement intended for FluidFramework consumers. | ||
*/ | ||
@@ -75,2 +122,5 @@ export interface ITelemetryGenericEvent extends ITelemetryProperties { | ||
* Maps to category = "error" | ||
* | ||
* @deprecated For internal use within FluidFramework, use ITelemetryErrorEventExt in \@fluidframework/telemetry-utils. | ||
* No replacement intended for FluidFramework consumers. | ||
*/ | ||
@@ -84,2 +134,5 @@ export interface ITelemetryErrorEvent extends ITelemetryProperties { | ||
* Maps to category = "performance" | ||
* | ||
* @deprecated For internal use within FluidFramework, use ITelemetryPerformanceEventExt in \@fluidframework/telemetry-utils. | ||
* No replacement intended for FluidFramework consumers. | ||
*/ | ||
@@ -97,3 +150,3 @@ export interface ITelemetryPerformanceEvent extends ITelemetryGenericEvent { | ||
*/ | ||
getTelemetryProperties(): ITelemetryProperties; | ||
getTelemetryProperties(): ITelemetryBaseProperties; | ||
} | ||
@@ -105,2 +158,5 @@ | ||
* Creates sub-logger that appends properties to all events | ||
* | ||
* @deprecated For internal use within FluidFramework, use ITelemetryLoggerExt in \@fluidframework/telemetry-utils. | ||
* No replacement intended for FluidFramework consumers. | ||
*/ | ||
@@ -112,4 +168,5 @@ export interface ITelemetryLogger extends ITelemetryBaseLogger { | ||
* @param event - Telemetry event to send over | ||
* @param logLevel - optional level of the log. | ||
*/ | ||
send(event: ITelemetryBaseEvent): void; | ||
send(event: ITelemetryBaseEvent, logLevel?: LogLevel): void; | ||
@@ -120,5 +177,11 @@ /** | ||
* @param error - optional error object to log | ||
* @param logLevel - optional level of the log. | ||
*/ | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
sendTelemetryEvent(event: ITelemetryGenericEvent, error?: any): void; | ||
sendTelemetryEvent( | ||
event: ITelemetryGenericEvent, | ||
// TODO: Use `unknown` instead (API-Breaking) | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
error?: any, | ||
logLevel?: typeof LogLevel.verbose | typeof LogLevel.default, | ||
): void; | ||
@@ -128,2 +191,3 @@ /** | ||
* @param event - Event to send | ||
* @param error - optional error object to log | ||
*/ | ||
@@ -136,5 +200,12 @@ // eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
* @param event - Event to send | ||
* @param error - optional error object to log | ||
* @param logLevel - optional level of the log. | ||
*/ | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
sendPerformanceEvent(event: ITelemetryPerformanceEvent, error?: any): void; | ||
sendPerformanceEvent( | ||
event: ITelemetryPerformanceEvent, | ||
// TODO: Use `unknown` instead (API-Breaking) | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
error?: any, | ||
logLevel?: typeof LogLevel.verbose | typeof LogLevel.default, | ||
): void; | ||
} |
@@ -7,4 +7,6 @@ /*! | ||
/** | ||
* This utility type is meant for internal use by {@link FluidObject} | ||
* Produces a valid FluidObject key given a type and a property. | ||
* | ||
* @remarks | ||
* | ||
* A valid FluidObject key is a property that exists on the incoming type | ||
@@ -14,3 +16,6 @@ * as well as on the type of the property itself. For example: `IProvideFoo.IFoo.IFoo` | ||
* | ||
* This utility type is meant for internal use by {@link FluidObject} | ||
* | ||
* @example | ||
* | ||
* ```typescript | ||
@@ -24,6 +29,5 @@ * interface IProvideFoo{ | ||
* ``` | ||
* | ||
* This pattern enables discovery, and delegation in a standard way which is central | ||
* to FluidObject pattern | ||
* | ||
* @internal | ||
* to FluidObject pattern. | ||
*/ | ||
@@ -49,3 +53,5 @@ export type FluidObjectProviderKeys<T, TProp extends keyof T = keyof T> = string extends TProp | ||
* @example | ||
* For example, if we have an interface like below | ||
* | ||
* For example, if we have an interface like the following: | ||
* | ||
* ```typescript | ||
@@ -52,0 +58,0 @@ * interface IProvideFoo{ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
310773
12
101
3305
27