12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import type { Document } from './bson';
- /** @public */
- export interface CodeExtended {
- $code: string | Function;
- $scope?: Document;
- }
- /**
- * A class representation of the BSON Code type.
- * @public
- * @category BSONType
- */
- export class Code {
- _bsontype!: 'Code';
- code!: string | Function;
- scope?: Document;
- /**
- * @param code - a string or function.
- * @param scope - an optional scope for the function.
- */
- constructor(code: string | Function, scope?: Document) {
- if (!(this instanceof Code)) return new Code(code, scope);
- this.code = code;
- this.scope = scope;
- }
- toJSON(): { code: string | Function; scope?: Document } {
- return { code: this.code, scope: this.scope };
- }
- /** @internal */
- toExtendedJSON(): CodeExtended {
- if (this.scope) {
- return { $code: this.code, $scope: this.scope };
- }
- return { $code: this.code };
- }
- /** @internal */
- static fromExtendedJSON(doc: CodeExtended): Code {
- return new Code(doc.$code, doc.$scope);
- }
- /** @internal */
- [Symbol.for('nodejs.util.inspect.custom')](): string {
- return this.inspect();
- }
- inspect(): string {
- const codeJson = this.toJSON();
- return `new Code("${String(codeJson.code)}"${
- codeJson.scope ? `, ${JSON.stringify(codeJson.scope)}` : ''
- })`;
- }
- }
- Object.defineProperty(Code.prototype, '_bsontype', { value: 'Code' });
|