Skip to content
Merged
276 changes: 276 additions & 0 deletions package-lock.json

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,10 @@
"pathToQueryFile": {
"type": "string",
"description": "%extension.pqtest.taskDefinitions.properties.pathToQueryFile.description%"
},
"credentialTemplate": {
"type": "object",
"description": "%extension.pqtest.taskDefinitions.properties.credentialTemplate.description%"
}
}
}
Expand Down Expand Up @@ -352,6 +356,7 @@
"@types/glob": "^8.0.0",
"@types/gulp": "^4.0.9",
"@types/mocha": "^9.1.1",
"@types/sinon": "^10.0.13",
"@types/node": "^16.11.65",
"@types/vscode": "^1.62.0",
"@typescript-eslint/eslint-plugin": "^5.40.0",
Expand All @@ -360,6 +365,7 @@
"@vscode/debugadapter-testsupport": "^1.57.0",
"@vscode/test-electron": "^1.6.2",
"chai": "^4.3.6",
"sinon": "^14.0.0",
"eslint": "^8.25.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-license-header": "^0.4.0",
Expand Down
1 change: 1 addition & 0 deletions package.nls.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"extension.pqtest.taskDefinitions.properties.additionalArgs.description": "Additional commandline arguments for the operation",
"extension.pqtest.taskDefinitions.properties.pathToConnector.description": "Path to the connector file (--extension)",
"extension.pqtest.taskDefinitions.properties.pathToQueryFile.description": "Path to the query file (--queryFile)",
"extension.pqtest.taskDefinitions.properties.credentialTemplate.description": "Credential template object.",
"extension.pqtest.explorer.name": "Power query SDK",
"extension.pqtest.welcome.contents": "In order to use extension features, you need to create an Power query extension project.\n[Create an extension project](command:powerquery.sdk.tools.CreateNewProjectCommand)\nTo learn more about how to create an extension, [read our docs](https://aka.ms/PowerQuerySDKDocs).",
"extension.pqtest.debugger.properties.program.description": "Absolute path to a power query file.",
Expand Down
1 change: 1 addition & 0 deletions src/common/PowerQueryTask.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ export interface PQTestTask extends PowerQueryTask {
readonly pathToConnector?: string;
readonly pathToQueryFile?: string;
readonly stdinStr?: string;
readonly credentialTemplate?: object;
}

export interface PowerQueryTaskDefinition extends PQTestTask, vscode.TaskDefinition {}
22 changes: 22 additions & 0 deletions src/common/errors.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* Copyright (c) Microsoft Corporation.
*
* Licensed under the MIT license found in the
* LICENSE file in the root of this projects source tree.
*/

export class BaseError extends Error {
constructor(message: string) {
super(message);
}

/**
* Capture current stack trace of the caller
*/
captureStackTrace(): string | undefined {
const container: Error = new Error();
this.stack = container.stack;

return this.stack;
}
}
24 changes: 24 additions & 0 deletions src/common/iterables/FibonacciNumbers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/**
* Copyright (c) Microsoft Corporation.
*
* Licensed under the MIT license found in the
* LICENSE file in the root of this projects source tree.
*/

import { NumberIterator } from "./NumberIterator";

export const fibonacciNumbers: () => NumberIterator = () => {
let curVal: number = 1;
let nextVal: number = 1;

return new NumberIterator(() => {
const value: number = curVal;
curVal = nextVal;
nextVal += value;

return {
done: false,
value,
};
});
};
69 changes: 69 additions & 0 deletions src/common/iterables/NumberIterator.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/**
* Copyright (c) Microsoft Corporation.
*
* Licensed under the MIT license found in the
* LICENSE file in the root of this projects source tree.
*/

export const DONE: IteratorReturnResult<undefined> = { done: true, value: undefined };

export type NumberIteratorResult = IteratorResult<number, undefined>;
export type IterableNumbers = () => NumberIteratorResult;
export type NumberMapper = (para: number) => number;
export type NumberGenerator = () => NumberIterator;

const toMsMapper: NumberMapper = (x: number) => Math.floor(x * 1e3);

export class NumberIterator implements Iterator<number, undefined, undefined> {
next: IterableNumbers;

constructor(_next: IterableNumbers) {
this.next = _next;
}

[Symbol.iterator](): Iterator<number, undefined, undefined> {
return this;
}

map(fn: NumberMapper): NumberIterator {
return new NumberIterator(() => {
const cursor: NumberIteratorResult = this.next();

if (cursor.done) {
return cursor;
}

return {
done: false,
value: fn(cursor.value),
};
});
}

addNoise(factor: number = 0.1): NumberIterator {
return this.map((value: number) => value * (1 + (Math.random() - 0.5) * factor));
}

toMs(): NumberIterator {
return this.map(toMsMapper);
}

clamp(min: number, max: number): NumberIterator {
// eslint-disable-next-line no-nested-ternary
return this.map((value: number) => (value < min ? min : value > max ? max : value));
}

take(n: number): NumberIterator {
let i: number = 0;

return new NumberIterator(() => {
if (i < n) {
++i;

return this.next();
}

return DONE;
});
}
}
Loading