///
///
///
///
///
///
///
///
///
declare namespace pxt {
function aiTrackEvent(id: string, data?: any, measures?: any): void;
function aiTrackException(err: any, kind: string, props: any): void;
function setInteractiveConsent(enabled: boolean): void;
}
declare namespace pxt.analytics {
enum ConsoleTickOptions {
Off = 0,
Short = 1,
Verbose = 2
}
let consoleTicks: ConsoleTickOptions;
function addDefaultProperties(props: Map): void;
function enable(lang: string): void;
function trackPerformanceReport(): void;
}
declare namespace pxt {
let appTarget: TargetBundle;
let appTargetVariant: string;
let hwVariant: string;
let hwName: string;
}
declare namespace pxt.AudioContextManager {
function mute(mute: boolean): void;
function stop(): void;
function frequency(): number;
function tone(frequency: number): void;
}
declare namespace pxt.auth {
type ApiResult = {
resp: T;
statusCode: number;
success: boolean;
err: any;
};
type UserProfile = {
id?: string;
idp?: {
provider?: pxt.IdentityProviderId;
username?: string;
displayName?: string;
picture?: {
mimeType?: string;
width?: number;
height?: number;
encoded?: string;
dataUrl?: string;
};
pictureUrl?: string;
};
};
type UserSkillmapState = {
mapProgress: any;
completedTags: any;
};
type UserBadgeState = {
badges: Badge[];
};
/**
* Mapping of target id to preferred color theme id.
*/
type ColorThemeIdsState = {
[targetId: string]: string;
};
type SetPrefResult = {
success: boolean;
res: UserPreferences;
};
/**
* User preference state that should be synced with the cloud.
*/
type UserPreferences = {
language?: string;
highContrast?: boolean;
accessibleBlocks?: boolean;
colorThemeIds?: ColorThemeIdsState;
reader?: string;
skillmap?: UserSkillmapState;
badges?: UserBadgeState;
email?: boolean;
};
const DEFAULT_USER_PREFERENCES: () => UserPreferences;
/**
* Cloud-synced user state.
*/
type UserState = {
profile?: UserProfile;
preferences?: UserPreferences;
};
function client(): AuthClient;
let cachedHasAuthToken: boolean;
function getAuthTokenAsync(): Promise;
function hasAuthTokenAsync(): Promise;
let cachedUserState: Readonly;
function getUserStateAsync(): Promise>;
function getAuthHeadersAsync(authToken?: string): Promise>;
abstract class AuthClient {
constructor();
initAsync(): Promise;
protected abstract onSignedIn(): Promise;
protected abstract onSignedOut(): Promise;
protected abstract onSignInFailed(): Promise;
protected abstract onUserProfileChanged(): Promise;
protected abstract onUserPreferencesChanged(diff: ts.pxtc.jsonPatch.PatchOperation[]): Promise;
protected abstract onProfileDeleted(userId: string): Promise;
protected abstract onApiError(err: any): Promise;
protected abstract onStateCleared(): Promise;
/**
* Starts the process of authenticating the user against the given identity
* provider. Upon success the backend will write an http-only session cookie
* to the response, containing the authorization token. This cookie is not
* accessible in code, but will be included in all subsequent http requests.
* @param idp The id of the identity provider.
* @param persistent Whether or not to remember this login across sessions.
* @param callbackState The URL hash and params to return to after the auth
* flow completes.
*/
loginAsync(idp: pxt.IdentityProviderId, persistent: boolean, callbackState?: CallbackState): Promise;
/**
* Sign out the user and clear the auth token cookie.
*/
logoutAsync(continuationHash?: string): Promise;
/**
* Sign out the user and clear the auth token cookie.
*/
static staticLogoutAsync(continuationHash?: string): Promise;
deleteProfileAsync(): Promise;
private initialUserPreferences_;
initialUserPreferencesAsync(): Promise;
userProfileAsync(): Promise;
userPreferencesAsync(): Promise;
private initialAuthCheck_;
/**
* Checks to see if we're already logged in by trying to fetch user info from
* the backend. If we have a valid auth token cookie, it will succeed.
*/
authCheckAsync(): Promise;
loggedInAsync(): Promise;
updateUserProfileAsync(opts: {
username?: string;
avatarUrl?: string;
}): Promise;
private patchQueue;
patchUserPreferencesAsync(patchOps: ts.pxtc.jsonPatch.PatchOperation | ts.pxtc.jsonPatch.PatchOperation[], opts?: {
immediate?: boolean;
filter?: (op: ts.pxtc.jsonPatch.PatchOperation) => boolean;
}): Promise;
private hasUserIdAsync;
private fetchUserAsync;
private setUserProfileAsync;
private setUserPreferencesAsync;
private fetchUserPreferencesAsync;
/**
* Updates user profile state and writes it to local storage.
*/
private transformUserProfileAsync;
/**
* Updates user preference state and writes it to local storage.
*/
protected transformUserPreferencesAsync(preferences: UserPreferences): Promise;
/**
* Clear local auth state then call the onStateCleared callback.
*/
private clearAuthStateAsync;
apiAsync(url: string, data?: any, method?: string, authToken?: string): Promise>;
static staticApiAsync(url: string, data?: any, method?: string, authToken?: string): Promise>;
}
type CallbackState = {
hash?: string;
params?: pxt.Map;
};
function loginCallbackAsync(qs: pxt.Map): Promise;
function identityProviders(): pxt.AppCloudProvider[];
function identityProvider(id: pxt.IdentityProviderId): pxt.AppCloudProvider;
function hasIdentity(): boolean;
function enableAuth(enabled?: boolean): void;
function userName(user: pxt.auth.UserProfile): string;
function identityProviderId(user: pxt.auth.UserProfile): pxt.IdentityProviderId | undefined;
function firstName(user: pxt.auth.UserProfile): string;
function userInitials(user: pxt.auth.UserProfile): string;
function generateUserProfilePicDataUrl(profile: pxt.auth.UserProfile): void;
/**
* Checks only the ID and sourceURL
*/
function badgeEquals(badgeA: pxt.auth.Badge, badgeB: pxt.auth.Badge): boolean;
function hasBadge(preferences: pxt.auth.UserBadgeState, badge: pxt.auth.Badge): boolean;
}
declare namespace pxt {
interface TelemetryEventOptions {
interactiveConsent: boolean;
}
/**
* Track an event.
*/
let tickEvent: (id: string, data?: Map, opts?: TelemetryEventOptions) => void;
}
declare namespace pxt {
interface Logger {
info(...args: any[]): void;
log(...args: any[]): void;
debug(...args: any[]): void;
error(...args: any[]): void;
warn(...args: any[]): void;
setLogLevel(level: LogLevel): void;
getLogLevel(): LogLevel;
}
enum LogLevel {
Debug = 0,
Info = 1,
Log = 1,
Warning = 2,
Error = 3
}
class ConsoleLogger implements Logger {
protected logLevel: LogLevel;
constructor();
setLogLevel(level: LogLevel): void;
getLogLevel(): LogLevel;
info(...args: any[]): void;
log(...args: any[]): void;
debug(...args: any[]): void;
error(...args: any[]): void;
warn(...args: any[]): void;
protected shouldLog(level: LogLevel): boolean;
}
function info(...args: any[]): void;
function log(...args: any[]): void;
function debug(...args: any[]): void;
function error(...args: any[]): void;
function warn(...args: any[]): void;
function setLogger(impl: Logger): void;
function setLogLevel(level: LogLevel): void;
}
declare namespace ts.pxtc {
let __dummy: number;
}
import pxtc = ts.pxtc;
declare namespace ts.pxtc.Util {
function assert(cond: boolean, msg?: string): void;
function flatClone(obj: T): T;
function clone(v: T): T;
function htmlEscape(_input: string): string;
function htmlUnescape(_input: string): string;
function jsStringQuote(s: string): string;
function jsStringLiteral(s: string): string;
function initials(username: string): string;
function enableLiveLocalizationUpdates(): void;
function liveLocalizationEnabled(): boolean;
/**
* Returns the current user language, prepended by "live-" if in live mode
*/
function localeInfo(): string;
/**
* Returns current user language iSO-code. Default is `en`.
*/
function userLanguage(): string;
function normalizeLanguageCode(code: string): string[];
function setUserLanguage(localizeLang: string): void;
function isUserLanguageRtl(): boolean;
const TRANSLATION_LOCALE = "pxt";
function isTranslationMode(): boolean;
function _localize(s: string): string;
function getLocalizedStrings(): pxt.Map;
function setLocalizedStrings(strs: pxt.Map): void;
function translationsCache(): pxt.Map>;
function fmt_va(f: string, args: any[]): string;
function fmt(f: string, ...args: any[]): string;
function dumpLocStats(): void;
function lf_va(format: string, args: any[]): string;
function lf(format: string, ...args: any[]): string;
/**
* Similar to lf but the string do not get extracted into the loc file.
*/
function rlf(format: string, ...args: any[]): string;
/**
* Same as lf except the strings are not replaced in translation mode. This is used
* exclusively for blockly JSON block definitions as the crowdin in-context translation
* script doesn't handle the SVG text fields. Instead, they are translated via a context
* menu item on the block.
*/
function blf(format: string): string;
function lookup(m: pxt.Map, key: string): T;
function isoTime(time: number): string;
function userError(msg: string): never;
function deq(a: any, b: any): string;
function deepEqual(a: any, b: any): boolean;
}
declare const lf: typeof pxtc.U.lf;
declare namespace ts.pxtc {
/**
* atob replacement
* @param s
*/
let decodeBase64: (s: string) => string;
/**
* bota replacement
* @param s
*/
let encodeBase64: (s: string) => string;
}
declare namespace ts.pxtc.Util {
export class CancellationToken {
private pending;
private cancelled;
private resolve;
private deferred;
private progressHandler;
startOperation(): void;
isRunning(): boolean;
onProgress(progressHandler: (completed: number, total: number) => void): void;
reportProgress(completed: number, total: number): void;
cancel(): void;
cancelAsync(): Promise;
isCancelled(): boolean;
throwIfCancelled(): void;
resolveCancel(): void;
}
export function codalHash16(s: string): number;
export function bufferSerial(buffers: pxt.Map, data?: string, source?: string, maxBufLen?: number): void;
export function blobReadAsDataURL(blob: Blob): Promise;
export function fileReadAsBufferAsync(f: File): Promise;
export function fileReadAsTextAsync(f: File): Promise;
export function sanitizeFileName(name: string): string;
export function repeatMap(n: number, fn: (index: number) => T): T[];
export function listsEqual(a: T[], b: T[]): boolean;
export function oops(msg?: string): Error;
export function reversed(arr: T[]): T[];
export function arrayEquals(a: U[], b: U[], compare?: (c: U, d: U) => boolean): boolean;
export function iterMap(m: pxt.Map, f: (k: string, v: T) => void): void;
export function mapMap(m: pxt.Map, f: (k: string, v: T) => S): pxt.Map;
export function values(m: pxt.Map): T[];
export function pushRange(trg: T[], src: ArrayLike): void;
export function concatArrayLike(arrays: ArrayLike>): T[];
export function concat(arrays: T[][]): T[];
export function memcpy(trg: Uint8Array, trgOff: number, src: ArrayLike, srcOff?: number, len?: number): void;
export function uint8ArrayConcat(chunks: Uint8Array[]): Uint8Array;
export function jsonTryParse(s: string): any;
export function jsonMergeFrom(trg: any, src: any): void;
export function jsonCopyFrom(trg: T, src: T): void;
export function jsonFlatten(v: any): pxt.Map;
export function jsonUnFlatten(v: pxt.Map): any;
export function strcmp(a: string, b: string): 0 | 1 | -1;
export function stringMapEq(a: pxt.Map, b: pxt.Map): boolean;
export function endsWith(str: string, suffix: string): boolean;
export function startsWith(str: string, prefix: string): boolean;
export function contains(str: string, contains: string): boolean;
export function replaceAll(str: string, old: string, new_: string): string;
export function snakify(s: string): string;
export function sortObjectFields(o: T): T;
export function chopArray(arr: T[], chunkSize: number): T[][];
export function unique(arr: T[], f: (t: T) => string): T[];
export function groupBy(arr: T[], f: (t: T) => string): pxt.Map;
export function toDictionary(arr: T[], f: (t: T) => string): pxt.Map;
export function toSet(arr: T[], f: (t: T) => string): pxt.Map;
export function deepCopy(src: any): any;
export interface ArrayLike {
[index: number]: T;
length: number;
}
export function toArray(a: ArrayLike | ReadonlyArray): T[];
export function indexOfMatching(arr: T[], f: (t: T) => boolean): number;
export function nextTick(f: () => void): void;
export function delay(duration: number, value: T | Promise): Promise;
export function delay(duration: number): Promise;
export function promiseMapAll(values: T[], mapper: (obj: T) => Promise): Promise;
export function promiseMapAllSeries(values: T[], mapper: (obj: T) => Promise): Promise;
export function promisePoolAsync(maxConcurrent: number, inputValues: T[], handler: (input: T) => Promise): Promise;
export function memoizeString(createNew: (id: string) => T): (id: string) => T;
export function promiseTimeout(ms: number, promise: T | Promise, msg?: string): Promise;
export interface DeferredPromise {
resolve: (value: T) => void;
reject: (reason: any) => void;
promise: Promise;
}
export function defer(): DeferredPromise;
export function memoize(getId: (v: S) => string, createNew: (v: S) => T): (id: S) => T;
export function debounce(func: (...args: any[]) => any, wait: number, immediate?: boolean): any;
export class AdaptiveDebouncer {
func: () => void;
minDelay: number;
maxDelay: number;
slowdownFactor: number;
private lastPoke;
private recentGaps;
private timeout;
private wrapped;
constructor(func: () => void, minDelay?: number, maxDelay?: number, slowdownFactor?: number);
poke(): void;
trigger(): void;
}
export function throttle(func: (...args: any[]) => any, wait: number, immediate?: boolean): any;
export function randomPermute(arr: T[]): void;
export function randomPick(arr: T[]): T;
export function timeSince(time: number): string;
export function unicodeToChar(text: string): string;
export function escapeForRegex(str: string): string;
export function stripUrlProtocol(str: string): string;
export function normalizePath(path: string): string;
export function pathJoin(a: string, b: string): string;
export let isNodeJS: boolean;
export interface HttpRequestOptions {
url: string;
method?: string;
data?: any;
headers?: pxt.Map;
allowHttpErrors?: boolean;
allowGzipPost?: boolean;
responseArrayBuffer?: boolean;
forceLiveEndpoint?: boolean;
successCodes?: number[];
withCredentials?: boolean;
}
export interface HttpResponse {
statusCode: number;
headers: pxt.Map;
buffer?: any;
text?: string;
json?: any;
}
export function requestAsync(options: HttpRequestOptions): Promise;
export function httpGetTextAsync(url: string): Promise;
export function httpGetJsonAsync(url: string): Promise;
export function httpPostJsonAsync(url: string, data: any): Promise;
export function stringToUint8Array(input: string): Uint8Array;
export function uint8ArrayToString(input: ArrayLike): string;
export function fromUTF8(binstr: string): string;
export function toUTF8(str: string, cesu8?: boolean): string;
export function toHex(bytes: ArrayLike): string;
export function fromHex(hex: string): Uint8Array;
export class PromiseQueue {
promises: pxt.Map<(() => Promise)[]>;
enqueue(id: string, f: () => Promise): Promise;
}
export class PromiseBuffer {
private waiting;
private available;
drain(): void;
pushError(v: Error): void;
push(v: T): void;
shiftAsync(timeout?: number): Promise;
}
export function now(): number;
export function nowSeconds(): number;
export function timeout(ms: number): Promise;
/**
* Utility function to run an action with exponential backoff until a condition is met or a timeout occurs.
* @param action - The main action to run.
* @param isComplete - A function that checks if the result of the action indicates completion.
* @param initialDelayMs - The starting delay to use between the initial attempt and any retry.
* @param maxDelayMs - The maximum delay between retries.
* @param timeoutMs - The total timeout for the operation.
* @param timeoutErrorMsg - The error message to throw if the operation times out.
* @param backoffFactor - The factor by which to increase the delay after each retry (default is 1.5).
*/
export function runWithBackoffAsync(action: () => Promise, isComplete: (result: T) => boolean, initialDelayMs: number, maxDelayMs: number, timeoutMs: number, timeoutErrorMsg: string, backoffFactor?: number): Promise;
export let cpuUs: () => number;
export function getMime(filename: string): "text/plain" | "text/html" | "text/css" | "application/javascript" | "image/jpeg" | "image/png" | "image/x-icon" | "text/cache-manifest" | "application/manifest+json" | "application/json" | "image/svg+xml" | "application/vnd.ms-fontobject" | "font/ttf" | "application/font-woff" | "application/font-woff2" | "text/markdown" | "application/xml" | "audio/m4a" | "audio/mp3" | "application/wasm" | "application/octet-stream";
export function randomUint32(): number;
export function guidGen(): string;
export function downloadLiveTranslationsAsync(lang: string, filename: string, etag?: string): Promise>;
export const pxtLangCookieId = "PXT_LANG";
export const langCookieExpirationDays = 30;
export interface Language {
englishName: string;
localizedName: string;
}
export const allLanguages: pxt.Map;
export function isLocaleEnabled(code: string): boolean;
interface LocalizationUpdateOptions {
targetId: string;
baseUrl: string;
code: string;
force?: boolean;
}
export function updateLocalizationAsync(opts: LocalizationUpdateOptions): Promise;
export enum TranslationsKind {
Editor = 0,
Sim = 1,
Apis = 2,
SkillMap = 3
}
export function downloadTranslationsAsync(targetId: string, baseUrl: string, code: string, live: boolean, translationKind?: TranslationsKind): Promise>;
export let httpRequestCoreAsync: (options: HttpRequestOptions) => Promise;
export let sha256: (hashData: string) => string;
export let getRandomBuf: (buf: Uint8Array) => void;
export function capitalize(n: string): string;
export function uncapitalize(n: string): string;
export function camelCaseToLowercaseWithSpaces(n: string): string;
export function snakeCaseToLowercaseWithSpaces(n: string): string;
export function range(len: number): number[];
export function multipartPostAsync(uri: string, data?: any, filename?: string, filecontents?: string): Promise;
export function toDataUri(data: string, mimetype?: string): string;
export const imageMagic = 1496611453;
export const imageHeaderSize = 36;
export function encodeBlobAsync(canvas: HTMLCanvasElement, blob: Uint8Array): HTMLCanvasElement;
export function decodeBlobAsync(dataURL: string): Promise;
export function parseQueryString(qs: string): pxt.Map;
export function stringifyQueryString(url: string, qs: any): string;
export function cloneTargetBundle(target: pxt.TargetBundle): pxt.TargetBundle;
export function cloneApis(byQName: pxt.Map): pxt.Map;
export function cloneSymbolInfo(sym: pxtc.SymbolInfo): pxtc.SymbolInfo;
export function toUTF8Array(s: string): Uint8Array;
export function fromUTF8Array(s: Uint8Array): string;
export function getHomeUrl(): string;
export function isExperienceSupported(experienceId: string): boolean;
export function ocvEnabled(): string;
export function bresenhamLine(x0: number, y0: number, x1: number, y1: number, handler: (x: number, y: number) => void): void;
/**
* Check if the specified feature is enabled for the user (based on pxtarget configuration and region).
*/
export function isFeatureEnabled(featureKey: string): boolean;
/**
* Remove potentially sensitive info from the given data to avoid logging it.
* Currently only supports string data.
*/
export function cleanData(data: string): string;
export function cleanData(data: pxt.Map): pxt.Map;
export {};
}
declare namespace ts.pxtc.BrowserImpl {
function sha256buffer(buf: Uint8Array): string;
function sha256string(s: string): string;
}
declare namespace ts.pxtc.jsonPatch {
type AddOperation = {
op: 'add';
path: (string | number)[];
value: string | number | boolean | object;
};
type ReplaceOperation = {
op: 'replace';
path: (string | number)[];
value: string | number | boolean | object;
};
type RemoveOperation = {
op: 'remove';
path: (string | number)[];
};
type PatchOperation = AddOperation | ReplaceOperation | RemoveOperation;
/**
* Returns the diff of two objects as a set of change operations, following the
* "JSON Patch" format: https://datatracker.ietf.org/doc/html/rfc6902 (with a
* small difference to the way paths are encoded).
*/
function diff(oldObj: any, newObj: any): PatchOperation[];
/**
* Applies a set of JSON Patch operations to the object.
*/
function patchInPlace(obj: any, ops: PatchOperation[]): void;
function opsAreEqual(a: PatchOperation, b: PatchOperation): boolean;
}
declare namespace ts.pxtc.jsonPatch.tests {
function diffTests(): void;
function patchTests(): void;
}
declare namespace pxt.perf {
type EventSource = {
subscribe(listener: (ev: T) => void): () => void;
};
function isEnabled(): boolean;
let perfReportLogged: boolean;
function report(): {
milestones: {
[index: string]: number;
};
durations: {
[index: string]: number;
};
} | undefined;
function recordMilestone(msg: string, params?: Map): void;
function measureStart(name: string): void;
function measureEnd(name: string, params?: Map): void;
let measurementThresholdMs: number;
const stats: {
milestones: EventSource<{
milestone: string;
time: number;
params?: Map;
}>;
durations: EventSource<{
name: string;
start: number;
duration: number;
params?: Map;
}>;
};
}
declare namespace pxt {
export import U = pxtc.Util;
export import Util = pxtc.Util;
interface TCPIO {
onData: (v: Uint8Array) => void;
onError: (e: Error) => void;
connectAsync(): Promise;
sendPacketAsync(pkt: Uint8Array): Promise;
error(msg: string): any;
disconnectAsync(): Promise;
}
let mkTCPSocket: (host: string, port: number) => TCPIO;
function setAppTarget(trg: TargetBundle): void;
function setBundledApiInfo(inf: Map): void;
function getBundledApiInfo(): Map;
function savedAppTheme(): AppTheme;
function setCompileSwitch(name: string, value: boolean): void;
function setCompileSwitches(names: string): void;
function bundledSvg(id: string): string;
function replaceStringsInJsonBlob(blobPart: any, matcher: RegExp, matchHandler: (matchingString: string) => string): any;
function reloadAppTargetVariant(temporary?: boolean): void;
function setAppTargetVariant(variant: string, opts?: {
force?: boolean;
temporary?: boolean;
}): void;
let onAppTargetChanged: () => void;
function setHwVariant(variant: string, name?: string): void;
function hasHwVariants(): boolean;
function getHwVariants(): PackageConfig[];
function getActiveHwVariant(): string;
interface PxtOptions {
debug?: boolean;
light?: boolean;
wsPort?: number;
}
let options: PxtOptions;
let reportException: (err: any, data?: Map) => void;
let reportError: (cat: string, msg: string, data?: Map) => void;
interface WebConfig {
relprefix: string;
workerjs: string;
monacoworkerjs: string;
gifworkerjs: string;
serviceworkerjs: string;
typeScriptWorkerJs: string;
pxtVersion: string;
pxtRelId: string;
pxtCdnUrl: string;
commitCdnUrl: string;
blobCdnUrl: string;
cdnUrl: string;
targetUrl: string;
targetVersion: string;
targetRelId: string;
targetId: string;
simUrl: string;
simserviceworkerUrl: string;
simworkerconfigUrl: string;
partsUrl?: string;
runUrl?: string;
docsUrl?: string;
multiUrl?: string;
asseteditorUrl?: string;
skillmapUrl?: string;
authcodeUrl?: string;
multiplayerUrl?: string;
kioskUrl?: string;
teachertoolUrl?: string;
isStatic?: boolean;
verprefix?: string;
ocv?: OcvConfig;
}
interface OcvConfig {
appId: number;
iframeEndpoint: string;
}
function localWebConfig(): WebConfig;
let webConfig: WebConfig;
function getOnlineCdnUrl(): string;
function setupWebConfig(cfg: WebConfig): void;
interface Host {
readFile(pkg: Package, filename: string, skipAdditionalFiles?: boolean): string;
writeFile(pkg: Package, filename: string, contents: string, force?: boolean): void;
downloadPackageAsync(pkg: Package, deps?: string[]): Promise;
getHexInfoAsync(extInfo: pxtc.ExtensionInfo): Promise;
cacheStoreAsync(id: string, val: string): Promise;
cacheGetAsync(id: string): Promise;
}
interface FsFile {
name: string;
mtime: number;
content?: string;
prevContent?: string;
}
interface FsPkg {
path: string;
config: pxt.PackageConfig;
header: pxt.workspace.Header;
files: FsFile[];
icon?: string;
isDeleted?: boolean;
}
interface FsPkgs {
pkgs: FsPkg[];
}
interface ICompilationOptions {
}
function getEmbeddedScript(id: string): Map;
function targetConfigAsync(): Promise;
function packagesConfigAsync(): Promise;
const CONFIG_NAME = "pxt.json";
const SIMSTATE_JSON = ".simstate.json";
const SERIAL_EDITOR_FILE = "serial.txt";
const README_FILE = "README.md";
const GITIGNORE_FILE = ".gitignore";
const ASSETS_FILE = "assets.json";
const CLOUD_ID = "pxt/";
const BLOCKS_PROJECT_NAME = "blocksprj";
const JAVASCRIPT_PROJECT_NAME = "tsprj";
const PYTHON_PROJECT_NAME = "pyprj";
const MAIN_BLOCKS = "main.blocks";
const MAIN_TS = "main.ts";
const MAIN_PY = "main.py";
const DEFAULT_GROUP_NAME = "other";
const TILEMAP_CODE = "tilemap.g.ts";
const TILEMAP_JRES = "tilemap.g.jres";
const IMAGES_CODE = "images.g.ts";
const IMAGES_JRES = "images.g.jres";
const TUTORIAL_CODE_START = "_onCodeStart.ts";
const TUTORIAL_CODE_STOP = "_onCodeStop.ts";
const TUTORIAL_INFO_FILE = "tutorial-info-cache.json";
const TUTORIAL_CUSTOM_TS = "tutorial.custom.ts";
const BREAKPOINT_TABLET = 991;
const PALETTES_FILE = "_palettes.json";
const HISTORY_FILE = "_history";
const MAX_DESCRIPTION_LENGTH = 5000;
function outputName(trg?: pxtc.CompileTarget): "binary.uf2" | "binary.bin" | "binary.pxt64" | "binary.elf" | "binary.hex";
function isOutputText(trg?: pxtc.CompileTarget): boolean;
}
declare namespace pxt.blocks {
let showBlockIdInTooltip: boolean;
interface PxtBlockly {
}
interface BlocklyModule {
}
let requirePxtBlockly: () => PxtBlockly;
let requireBlockly: () => BlocklyModule;
let registerFieldEditor: (selector: string, proto: any, validator?: any) => void;
const MATH_FUNCTIONS: {
unary: string[];
binary: string[];
infix: string[];
};
const ROUNDING_FUNCTIONS: string[];
interface BlockParameter {
actualName: string;
type?: string;
definitionName: string;
definitionIndex?: number;
shadowBlockId?: string;
defaultValue?: string;
isOptional?: boolean;
fieldEditor?: string;
fieldOptions?: Map;
shadowOptions?: Map;
range?: {
min: number;
max: number;
};
}
interface BlockCompileInfo {
parameters: ReadonlyArray;
actualNameToParam: Map;
definitionNameToParam: Map;
handlerArgs?: HandlerArg[];
thisParameter?: BlockParameter;
}
interface HandlerArg {
name: string;
type: string;
inBlockDef: boolean;
localizationKey: string;
}
const builtinFunctionInfo: pxt.Map<{
params: string[];
blockId: string;
}>;
function normalizeBlock(b: string, err?: (msg: string) => void): string;
function compileInfo(fn: pxtc.SymbolInfo): BlockCompileInfo;
function hasHandler(fn: pxtc.SymbolInfo): boolean;
function getHelpUrl(fn: pxtc.SymbolInfo): string;
/**
* Returns which Blockly block type to use for an argument reporter based
* on the specified TypeScript type.
* @param varType The variable's TypeScript type
* @return The Blockly block type of the reporter to be used
*/
function reporterTypeForArgType(varType: string): string;
function defaultIconForArgType(typeName?: string): "calculator" | "text width" | "random" | "list" | "align justify";
interface FieldDescription {
n: string;
pre?: string;
p?: string;
ni: number;
}
function parseFields(b: string): FieldDescription[];
interface BlockDefinition {
name: string;
category: string;
url: string;
tooltip?: string | Map;
operators?: Map;
block?: Map;
blockTextSearch?: string;
tooltipSearch?: string;
translationIds?: string[];
}
function blockDefinitions(): Map;
function getBlockDefinition(blockId: string): BlockDefinition;
}
declare namespace pxt.BrowserUtils {
export function isDocumentVisible(): boolean;
export function isIFrame(): boolean;
export function hasNavigator(): boolean;
export function hasWindow(): boolean;
export function isWindows(): boolean;
export function isWindows10(): boolean;
export function isMobile(): boolean;
export function isIOS(): boolean;
export function isAndroid(): boolean;
export function isMac(): boolean;
export function isLinux(): boolean;
export function isARM(): boolean;
export function isEdge(): boolean;
export function isChromiumEdge(): boolean;
export function isIE(): boolean;
export function isChrome(): boolean;
export function isSafari(): boolean;
export function isFirefox(): boolean;
export function isOpera(): boolean;
export function isMidori(): boolean;
export function isEpiphany(): boolean;
export function isTouchEnabled(): boolean;
export function isPxtElectron(): boolean;
export function isIpcRenderer(): boolean;
export function isElectron(): boolean;
export let isWinRT: () => boolean;
export function isLocalHost(ignoreFlags?: boolean): boolean;
export function isLocalHostDev(): boolean;
export function isSkillmapEditor(): boolean;
export function isTabletSize(): boolean;
export function isComputerSize(): boolean;
export function isInGame(): boolean;
export function hasFileAccess(): boolean;
export function noSharedLocalStorage(): boolean;
export function useOldTutorialLayout(): boolean;
export function hasPointerEvents(): boolean;
export function os(): string;
export function browser(): string;
export function browserVersion(): string;
export function isBrowserSupported(): boolean;
export function devicePixelRatio(): number;
export function browserDownloadBinText(text: string, name: string, opt?: BrowserDownloadOptions): string;
export function browserDownloadText(text: string, name: string, opt?: BrowserDownloadOptions): string;
export function isBrowserDownloadInSameWindow(): boolean;
export function isBrowserDownloadWithinUserContext(): boolean;
export function browserDownloadDataUri(uri: string, name: string, userContextWindow?: Window): void;
export function browserDownloadUInt8Array(buf: Uint8Array, name: string, opt?: BrowserDownloadOptions): string;
export function toDownloadDataUri(b64: string, contentType: string): string;
export interface BrowserDownloadOptions {
contentType?: string;
userContextWindow?: Window;
onError?: (err: any) => void;
maintainObjectURL?: boolean;
}
export function browserDownloadBase64(b64: string, name: string, opt?: BrowserDownloadOptions): string;
export function loadImageAsync(data: string): Promise;
export function loadCanvasAsync(url: string): Promise;
export function scaleImageData(img: ImageData, scale: number): ImageData;
export function imageDataToPNG(img: ImageData, scale?: number): string;
export function encodeToPngAsync(uri: string, options?: {
width?: number;
height?: number;
pixelDensity?: number;
maxSize?: number;
text?: string;
}): Promise;
export function resolveCdnUrl(path: string): string;
export function loadStyleAsync(path: string, rtl?: boolean): Promise;
export function loadScriptAsync(path: string): Promise;
export function loadAjaxAsync(url: string): Promise;
export function loadBlocklyAsync(): Promise;
export function patchCdn(url: string): string;
export function initTheme(): void;
/**
* Utility method to change the hash.
* Pass keepHistory to retain an entry of the change in the browser history.
*/
export function changeHash(hash: string, keepHistory?: boolean): void;
/**
* Simple utility method to join urls.
*/
export function urlJoin(urlPath1: string, urlPath2: string): string;
/**
* Simple utility method to join multiple urls.
*/
export function joinURLs(...parts: string[]): string;
export function storageEstimateAsync(): Promise<{
quota?: number;
usage?: number;
}>;
export const scheduleStorageCleanup: any;
export function stressTranslationsAsync(): Promise;
export interface ITranslationDbEntry {
id?: string;
etag: string;
time: number;
strings?: pxt.Map;
md?: string;
}
export interface ITranslationDb {
getAsync(lang: string, filename: string): Promise;
setAsync(lang: string, filename: string, etag: string, strings?: pxt.Map, md?: string): Promise;
clearAsync(): Promise;
}
export type IDBUpgradeHandler = (ev: IDBVersionChangeEvent, request: IDBRequest) => void;
export class IDBWrapper {
private name;
private version;
private upgradeHandler?;
private quotaExceededHandler?;
private skipErrorLog;
private _db;
constructor(name: string, version: number, upgradeHandler?: IDBUpgradeHandler, quotaExceededHandler?: () => void, skipErrorLog?: boolean);
private throwIfNotOpened;
private errorHandler;
private getObjectStore;
static deleteDatabaseAsync(name: string): Promise;
openAsync(): Promise;
getAsync(storeName: string, id: string): Promise;
getAllAsync(storeName: string): Promise;
setAsync(storeName: string, data: any): Promise;
deleteAsync(storeName: string, id: string): Promise;
deleteAllAsync(storeName: string): Promise;
getObjectStoreWrapper(storeName: string): IDBObjectStoreWrapper;
}
export class IDBObjectStoreWrapper {
protected db: IDBWrapper;
protected storeName: string;
constructor(db: IDBWrapper, storeName: string);
getAsync(id: string): Promise;
getAllAsync(): Promise;
setAsync(data: T): Promise;
deleteAsync(id: string): Promise;
deleteAllAsync(): Promise;
}
export function translationDbAsync(): Promise;
export function clearTranslationDbAsync(): Promise;
export function getTutorialCodeHash(code: string[]): string;
interface TutorialInfoIndexedDbEntry {
id: string;
time: number;
hash: string;
blocks: Map;
snippets: Map