pxt-core
Version:
Microsoft MakeCode provides Blocks / JavaScript / Python tools and editors
1,076 lines (980 loc) • 62.4 kB
TypeScript
/// <reference path="pxtpackage.d.ts" />
/// <reference path="pxtparts.d.ts" />
/// <reference path="pxtelectron.d.ts" />
declare namespace pxt {
// targetconfig.json
type GalleryShuffle = "daily";
interface GalleryProps {
url: string;
experimentName?: string;
locales?: string[];
shuffle?: GalleryShuffle;
// pings this url to determine if the gallery is available
// value @random@ will be expanded to a random string
// looks for 200, 403 error codes
testUrl?: string;
// requires youtube acces
youTube?: boolean;
}
interface TargetConfig {
packages?: PackagesConfig;
shareLinks?: ShareConfig;
skillMap?: SkillMapConfig;
multiplayer?: MultiplayerConfig;
// common galleries
galleries?: pxt.Map<string | GalleryProps>;
// localized galleries
localizedGalleries?: pxt.Map<pxt.Map<string>>;
windowsStoreLink?: string;
// localized options on download dialog; name, description, url, imageUrl, variant used.
hardwareOptions?: CodeCard[];
// release manifest for the electron app
electronManifest?: pxt.electron.ElectronManifest;
profileNotification?: ProfileNotification;
kiosk?: KioskConfig;
teachertool?: TeacherToolConfig;
}
interface PackagesConfig {
approvedOrgs?: string[];
releases?: pxt.Map<string[]>; // per major version list of approved company/project#tag
bannedOrgs?: string[];
bannedRepos?: string[];
allowUnapproved?: boolean;
approvedRepoLib?: pxt.Map<RepoData>;
builtinExtensionsLib?: pxt.Map<RepoData>;
// list of trusted custom editor extension urls
// that can bypass consent and send/receive messages
approvedEditorExtensionUrls?: string[];
}
interface RepoData {
preferred?: boolean;
tags?: string[];
// format:
// "acme-corp/pxt-widget": "min:v0.1.2" - auto-upgrade to that version
// "acme-corp/pxt-widget": "dv:foo,bar" - add "disablesVariant": ["foo", "bar"] to pxt.json
upgrades?: string[];
// This repo's simulator extension configuration
simx?: SimulatorExtensionConfig;
// if true, this repo will not be shown in extension search results
hidden?: boolean;
}
interface SimulatorExtensionConfig {
aspectRatio?: number; // Aspect ratio for the iframe. Default: 1.22.
permanent?: boolean; // If true, don't recycle the iframe between runs. Default: true.
devUrl?: string; // URL to load for local development. Pass `simxdev` on URL to enable. Default: undefined.
index?: string; // The path to the simulator extension's entry point within the repo. Default: "index.html".
// backend-only options
sha?: string; // The commit to checkout (must exist in the branch/ref). Required.
repo?: string; // Actual repo to load simulator extension from. Defaults to key of parent in `approvedRepoLib` map.
ref?: string; // The branch of the repo to sync. Default: "gh-pages".
}
interface ShareConfig {
approved?: string[];
}
interface SkillMapConfig {
defaultPath?: string;
pathAliases?: pxt.Map<string>; // map in the format "alias": "path"
}
interface MultiplayerConfig {
games?: MultiplayerGameCard[];
}
interface MultiplayerGameCard {
shareId: string;
title: string;
subtitle: string;
image?: string;
}
interface KioskConfig {
games: KioskGame[];
}
interface KioskGame {
id: string;
name: string;
description: string;
highScoreMode: string;
}
interface TeacherToolConfig {
showSharePageEvalButton?: boolean; // show the "Evaluate" button on the share page
defaultChecklistUrl?: string; // default checklist to use when a project is loaded without a checklist already active
carousels?: TeacherToolCarouselConfig[];
}
interface TeacherToolCarouselConfig {
title: string;
cardsUrl: string;
}
interface AppTarget {
id: string; // has to match ^[a-z]+$; used in URLs and domain names
platformid?: string; // eg "codal"; used when search for gh packages ("for PXT/codal"); defaults to id
nickname?: string; // friendly id used when generating files, folders, etc... id is used instead if missing
name: string; // long name
description?: string; // description
thumbnailName?: string; // name imprited on thumbnails when using saveAsPNG
corepkg: string;
title?: string;
cloud?: AppCloud;
simulator?: AppSimulator;
blocksprj: ProjectTemplate;
tsprj: ProjectTemplate;
runtime?: RuntimeOptions;
compile: ts.pxtc.CompileTarget;
serial?: AppSerial;
appTheme: AppTheme;
compileService?: TargetCompileService;
ignoreDocsErrors?: boolean;
uploadApiStringsBranchRx?: string; // regular expression to match branches that should upload api strings
uploadDocs?: boolean; // enable uploading to crowdin on master or v* builds
variants?: Map<AppTarget>; // patches on top of the current AppTarget for different chip variants
multiVariants?: string[];
disabledVariants?: string[];
alwaysMultiVariant?: boolean;
queryVariants?: Map<AppTarget>; // patches on top of the current AppTarget using query url regex
unsupportedBrowsers?: BrowserOptions[]; // list of unsupported browsers for a specific target (eg IE11 in arcade). check browserutils.js browser() function for strings
checkdocsdirs?: string[]; // list of /docs subfolders for checkdocs, irrespective of SUMMARY.md
cacheusedblocksdirs?: string[]; // list of /docs subfolders for parsing and caching used block ids (for tutorial loading)
blockIdMap?: Map<string[]>; // list of target-specific blocks that are "synonyms" (eg. "agentturnright" and "minecraftAgentTurn")
defaultBadges?: pxt.auth.Badge[];
noSimShims?: boolean; // skip check for simshims and only build from cpp / user level typescript.
}
interface BrowserOptions {
id: string;
}
interface ProjectTemplate {
id: string;
config: PackageConfig;
files: pxt.Map<string>;
}
interface BlockToolboxDefinition {
namespace: string;
type: string;
gap?: number;
weight?: number;
fields?: pxt.Map<string>;
}
interface BlockOptions {
category?: string; // category in toolbox where the block should appear (defaults to "Loops")
group?: string; // group in toolbox category where the block should appear (defaults to none)
color?: string; // defaults to the color of the "Loops" category
weight?: number; // defaults to 0
namespace?: string; // namespace where the block's function lives (defaults to none)
callName?: string; // name of the block's function if changed in target
}
interface FunctionEditorTypeInfo {
typeName?: string; // The actual type that gets emitted to ts
label?: string; // A user-friendly label for the type, e.g. "text" for the string type
icon?: string; // The className of a semantic icon, e.g. "calculator", "text width", etc
defaultName?: string; // The default argument name to use in the function declaration for this type
}
interface RuntimeOptions {
mathBlocks?: boolean;
textBlocks?: boolean;
listsBlocks?: boolean;
variablesBlocks?: boolean;
functionBlocks?: boolean;
functionsOptions?: {
extraFunctionEditorTypes?: FunctionEditorTypeInfo[];
};
logicBlocks?: boolean;
loopsBlocks?: boolean;
onStartNamespace?: string; // default = loops
onStartColor?: string;
onStartGroup?: string;
onStartWeight?: number;
onStartUnDeletable?: boolean;
pauseUntilBlock?: BlockOptions;
breakBlock?: boolean;
continueBlock?: boolean;
extraBlocks?: BlockToolboxDefinition[]; // deprecated
assetExtensions?: string[];
palette?: string[];
paletteNames?: string[]; // human readable names for palette colors
tilesetFieldEditorIdentity?: string; // The qualified name of the API used with the field_tileset field editor. Currently, only for pxt-arcade
screenSize?: Size;
bannedCategories?: string[]; // a list of categories to exclude blocks from
}
interface AppSerial {
useHF2?: boolean;
noDeploy?: boolean;
useEditor?: boolean;
vendorId?: string; // used by node-serial
productId?: string; // used by node-serial
nameFilter?: string; // regex to match devices
rawHID?: boolean;
log?: boolean; // pipe messages to log
editorTheme?: SerialTheme;
}
interface SerialTheme {
graphBackground?: string;
gridFillStyle?: string;
gridStrokeStyle?: string;
strokeColor?: string;
lineColors?: string[];
}
interface AppCloud {
// specify the desired api root, https://makecode.com/api/
apiRoot?: string;
workspaces?: boolean;
packages?: boolean;
sharing?: boolean; // uses cloud-based anonymous sharing
thumbnails?: boolean; // attach screenshots/thumbnail to published scripts
importing?: boolean; // import url dialog
embedding?: boolean;
showBadges?: boolean; // show badges in user profile
githubPackages?: boolean; // allow searching github for packages
noGithubProxy?: boolean;
maxFileSize?: number; // maximum file size in bytes
warnFileSize?: number; // warn aboutfile size in bytes
cloudProviders?: pxt.Map<AppCloudProvider>;
}
type IdentityProviderId = "makecode" | "microsoft" | "google" | "github" | "clever";
interface AppCloudProvider {
id: IdentityProviderId;
name?: string;
icon?: string;
client_id?: string;
redirect?: boolean; // Whether or not to popup or redirect the oauth. Default to popup
identity?: boolean; // Whether or not this provider can be used for top-level login
order?: number; // Sort order
}
interface AppSimulator {
autoRun?: boolean; // enable autoRun in regular mode, not light mode
autoRunLight?: boolean; // force autorun in light mode
stopOnChange?: boolean;
emptyRunCode?: string; // when non-empty and autoRun is disabled, this code is run upon simulator first start
hideRestart?: boolean;
hideRun?: boolean;
// moved to theme
// moved to theme
// debugger?: boolean;
hideFullscreen?: boolean;
streams?: boolean;
aspectRatio?: number; // width / height
boardDefinition?: pxsim.BoardDefinition;
dynamicBoardDefinition?: boolean; // if true, boardDefinition comes from board package
parts?: boolean; // parts enabled?
// moved to theme
// instructions?: boolean;
partsAspectRatio?: number; // aspect ratio of the simulator when parts are displayed
headless?: boolean; // whether simulator should still run while collapsed
trustedUrls?: string[]; // URLs that are allowed in simulator modal messages
invalidatedClass?: string; // CSS class to be applied to the sim iFrame when it needs to be updated (defaults to sepia filter)
stoppedClass?: string; // CSS class to be applied to the sim iFrame when it isn't running (defaults to grayscale filter)
keymap?: boolean; // when non-empty and autoRun is disabled, this code is run upon simulator first start
// a map of allowed simulator channel to URL to handle specific control messages
// DEPRECATED. Use `simx` in targetconfig.json approvedRepoLib instead.
messageSimulators?: pxt.Map<{
// the URL to load the simulator, $PARENT_ORIGIN$ will be replaced by the parent
// origin to validate messages
url: string;
// url when localhost developer mode is enabled, add localhostmessagesims=1 to enable this mode
localHostUrl?: string;
aspectRatio?: number;
// don't recycle the iframe between runs
permanent?: boolean;
}>;
// This is for testing new simulator extensions before adding them to targetconfig.json.
// DO NOT SHIP SIMULATOR EXTENSIONS HERE. Add them to targetconfig.json/approvedRepoLib instead.
testSimulatorExtensions?: pxt.Map<SimulatorExtensionConfig>;
}
interface TargetCompileService {
yottaTarget?: string; // bbc-microbit-classic-gcc
yottaBinary?: string; // defaults to "pxt-microbit-app-combined.hex"
yottaCorePackage?: string; // pxt-microbit-core
yottaConfig?: any; // additional config
yottaConfigCompatibility?: boolean; // enforce emitting backward compatible yotta config entries (YOTTA_CFG_)
platformioIni?: string[];
codalTarget?: string | {
name: string; // "codal-arduino-uno"
url: string; // "https://github.com/lancaster-university/codal-arduino-uno"
branch: string; // "master"
type: string; // "git"
branches?: pxt.Map<string>; // overrides repo url -> commit sha
};
codalBinary?: string;
codalDefinitions?: any;
dockerImage?: string;
dockerArgs?: string[];
githubCorePackage?: string; // microsoft/pxt-microbit-core
gittag: string;
serviceId: string;
buildEngine?: string; // default is yotta, set to platformio
skipCloudBuild?: boolean;
}
interface FeatureFlag {
includeRegions?: string[];
excludeRegions?: string[];
}
interface AppTheme {
id?: string;
name?: string;
title?: string;
description?: string;
twitter?: string;
defaultLocale?: string;
logoWide?: boolean; // the portrait logo is not square, but wide
logoUrl?: string;
logo?: string;
hideMenubarLogo?: boolean; // if true, partner logo won't be shown in the top-left corner (menu bar)
portraitLogo?: string;
highContrastLogo?: string;
highContrastPortraitLogo?: string;
rightLogo?: string;
docsLogo?: string;
docsHeader?: string;
organization?: string;
organizationText?: string;
organizationShortText?: string;
organizationUrl?: string;
organizationLogo?: string;
organizationWideLogo?: string;
homeUrl?: string;
shareUrl?: string;
embedUrl?: string;
// betaUrl?: string; deprecated, beta button automatically shows up in experiments dialog
docMenu?: DocMenuEntry[];
TOC?: TOCMenuEntry[];
hideSideDocs?: boolean;
homeScreenHero?: string | CodeCard; // home screen hero image or codecard
homeScreenHeroGallery?: string; // path to markdown file containing the gallery to display on homescreen
sideDoc?: string; // deprecated
hasReferenceDocs?: boolean; // if true: the monaco editor will add an option in the context menu to load the reference docs
feedbackUrl?: string; // is set: a feedback link will show in the settings menu
boardName?: string; // official branded name for the board or product
boardNickname?: string; // common nickname to use for the board or product
driveDisplayName?: string; // name of the drive as it shows in the explorer
privacyUrl?: string;
termsOfUseUrl?: string;
contactUrl?: string;
accentColor?: string; // used in PWA manifest as theme color
backgroundColor?: string; // use in PWA manifest as background color
cardLogo?: string;
thumbLogo?: string;
appLogo?: string;
htmlDocIncludes?: Map<string>;
htmlTemplates?: Map<string>;
githubUrl?: string;
usbDocs?: string;
useTextLogo?: string; // if true: use the organization string + board name in menu bar instead of image
invertedMenu?: boolean; // if true: apply the inverted class to the menu
coloredToolbox?: boolean; // if true: color the blockly toolbox categories
invertedToolbox?: boolean; // if true: use the blockly inverted toolbox
invertedMonaco?: boolean; // if true: use the vs-dark monaco theme
invertedGitHub?: boolean; // inverted github view
lightToc?: boolean; // if true: do NOT use inverted style in docs toc
// FIXME (riknoll): Can't use Blockly types here
blocklyOptions?: any; // Blockly options, see Configuration: https://developers.google.com/blockly/guides/get-started/web
hideFlyoutHeadings?: boolean; // Hide the flyout headings at the top of the flyout when on a mobile device.
monacoColors?: pxt.Map<string>; // Monaco theme colors, see https://code.visualstudio.com/docs/getstarted/theme-color-reference
simAnimationEnter?: string; // Simulator enter animation
simAnimationExit?: string; // Simulator exit animation
hasAudio?: boolean; // target uses the Audio manager. if true: a mute button is added to the simulator toolbar.
crowdinProject?: string;
crowdinProjectId?: number; // Crowdin project id. Can be found by going to the project page in Crowdin and selecting Tools > API
monacoToolbox?: boolean; // if true: show the monaco toolbox when in the monaco editor
blockHats?: boolean; // if true, event blocks have hats
allowParentController?: boolean; // allow parent iframe to control editor
allowPackageExtensions?: boolean; // allow packages that include editor extensions
allowSimulatorTelemetry?: boolean; // allow the simulator to send telemetry messages
hideEmbedEdit?: boolean; // hide the edit button in the embedded view
blocksOnly?: boolean; // blocks only workspace
python?: boolean; // enable Python?
hideDocsSimulator?: boolean; // do not show simulator button in docs
hideDocsEdit?: boolean; // do not show edit button in docs
hideMenuBar?: boolean; // Hides the main menu bar
hideEditorToolbar?: boolean; // Hides the bottom editor toolbar
appStoreID?: string; // Apple iTune Store ID if any
mobileSafariDownloadProtocol?: string; // custom protocol to be used on iOS
sounds?: {
tutorialStep?: string;
tutorialNext?: string;
dialogClick?: string;
},
disableLiveTranslations?: boolean; // don't load translations from crowdin
extendEditor?: boolean; // whether a target specific editor.js is loaded
extendFieldEditors?: boolean; // wether a target specific fieldeditors.js is loaded
highContrast?: boolean; // simulator has a high contrast mode
print?: boolean; //Print blocks and text feature
greenScreen?: boolean; // display webcam stream in background
instructions?: boolean; // display make instructions
debugger?: boolean; // debugger button
selectLanguage?: boolean; // add language picker to settings menu
availableLocales?: string[]; // the list of enabled language codes
showProjectSettings?: boolean; // show a link to pxt.json in the cogwheel menu
useUploadMessage?: boolean; // change "Download" text to "Upload"
downloadIcon?: string; // which icon io use for download
blockColors?: Map<string>; // block namespace colors, used for build in categories
blockIcons?: Map<string | number>;
blocklyColors?: pxt.Map<string>; // Overrides for the styles in the workspace Blockly.Theme.ComponentStyle
defaultColorTheme?: string; // default color theme id for the editor
highContrastColorTheme?: string; // theme id for high contrast mode
socialOptions?: SocialOptions; // show social icons in share dialog, options like twitter handle and org handle
noReloadOnUpdate?: boolean; // do not notify the user or reload the page when a new app cache is downloaded
appPathNames?: string[]; // Authorized URL paths in embedded apps, all other paths will display a warning banner
defaultBlockGap?: number; // For targets to override block gap
hideShareEmbed?: boolean; // don't show advanced embedding options in share dialog
hideNewProjectButton?: boolean; // do not show the "new project" button in home page
saveInMenu?: boolean; // move save icon under gearwheel menu
lockedEditor?: boolean; // remove default home navigation links from the editor
hideReplaceMyCode?: boolean; // hides the "replace my code" button for tutorials with templates in their markdown
fileNameExclusiveFilter?: string; // anything that does not match this regex is removed from the filename,
copyrightText?: string; // footer text for any copyright text to be included at the bottom of the home screen and about page
browserDbPrefixes?: { [majorVersion: number]: string }; // Prefix used when storing projects in the DB to allow side-by-side projects of different major versions
editorVersionPaths?: { [majorVersion: number]: string }; // A map of major editor versions to their corresponding paths (alpha, v1, etc.)
experiments?: string[]; // list of experiment ids, also enables this feature
supportedExperiences?: string[]; // list of supported "experiences" (separate CRAs, like code eval)
chooseBoardOnNewProject?: boolean; // when multiple boards are support, show board dialog on "new project"
bluetoothUartConsole?: boolean; // pair with BLE UART services and pipe console output
bluetoothUartFilters?: { name?: string; namePrefix?: string; }[]; // device name prefix -- required
bluetoothPartialFlashing?: boolean; // enable partial flashing over BLE
topBlocks?: boolean; // show a top blocks category in the editor
pairingButton?: boolean; // display a pairing button
tagColors?: pxt.Map<string>; // optional colors for tags
dontSuspendOnVisibility?: boolean; // we're inside an app, don't suspend the editor
disableFileAccessinMaciOs?: boolean; //Disable save & import of files in Mac and iOS, mainly used as embed webkit doesn't support these
disableFileAccessinAndroid?: boolean; // Disable import of files in Android.
baseTheme?: string; // Use this to determine whether to show a light or dark theme, default is 'light', options are 'light', 'dark', or 'hc'
scriptManager?: boolean; // Whether or not to enable the script manager. default: false
monacoFieldEditors?: string[]; // A list of field editors to show in monaco. Currently only "image-editor" is supported
disableAPICache?: boolean; // Disables the api cache in target.js
sidebarTutorial?: boolean; // Move the tutorial pane to be on the left side of the screen
legacyTutorial?: boolean; // Use the legacy tutorial format without tabs
/**
* Internal and temporary flags:
* These flags may be removed without notice, please don't take a dependency on them
*/
simCollapseInMenu?: boolean; // don't show any of the collapse / uncollapse buttons down the bottom, instead show it in the menu
bigRunButton?: boolean; // show the run button as a big button on the right
transparentEditorToolbar?: boolean; // make the editor toolbar float with a transparent background
hideProjectRename?: boolean; // Temporary flag until we figure out a better way to show the name
addNewTypeScriptFile?: boolean; // when enabled, the [+] explorer button asks for file name, instead of using "custom.ts"
simScreenshot?: boolean; // allows to download a screenshot of the simulator
simScreenshotKey?: string; // keyboard key name
simScreenshotMaxUriLength?: number; // maximum base64 encoded length to be uploaded
simGif?: boolean; // record gif of the simulator
simGifKey?: string; // shortcut to start stop
simGifTransparent?: string; // specify the gif transparency color
simGifQuality?: number; // generated gif quality (pixel sampling size) - 30 (poor) - 1 (best), default 16
simGifMaxFrames?: number; // maximum number of frames, default 64
simGifWidth?: number; // with in pixels for gif frames
qrCode?: boolean; // generate QR code for shared urls
importExtensionFiles?: boolean; // import extensions from files
debugExtensionCode?: boolean; // debug extension and libs code in the Monaco debugger
snippetBuilder?: boolean; // Snippet builder experimental feature
experimentalHw?: boolean; // enable experimental hardware
// recipes?: boolean; // inlined tutorials - deprecated
checkForHwVariantWebUSB?: boolean; // check for hardware variant using webusb before compiling
preferWebUSBDownload?: boolean; // default to webusb over normal browser download when available
shareFinishedTutorials?: boolean; // always pop a share dialog once the tutorial is finished
leanShare?: boolean; // use leanscript.html instead of script.html for sharing pages
nameProjectFirst?: boolean; // prompt user to name project when creating new one
chooseLanguageRestrictionOnNewProject?: boolean; // include 'options' menu when creating a new project
githubEditor?: boolean; // allow editing github repositories from the editor
githubCompiledJs?: boolean; // commit binary.js in commit when creating a github release,
blocksCollapsing?: boolean; // collapse/uncollapse functions/event in blocks
workspaceSearch?: boolean; // allow CTRL+F blocks workspace search
hideHomeDetailsVideo?: boolean; // hide video/large image from details card
tutorialBlocksDiff?: boolean; // automatically display blocks diffs in tutorials
tutorialTextDiff?: boolean; // automatically display text diffs in tutorials
openProjectNewTab?: boolean; // allow opening project in a new tab
openProjectNewDependentTab?: boolean; // allow opening project in a new tab -- connected
tutorialExplicitHints?: boolean; // allow use explicit hints
errorList?: boolean; // error list experiment
embedBlocksInSnapshot?: boolean; // embed blocks xml in right-click snapshot
identity?: boolean; // login with identity providers
assetEditor?: boolean | AssetConfig; // enable asset editor view (in blocks/text toggle)
disableMemoryWorkspaceWarning?: boolean; // do not warn the user when switching to in memory workspace
embeddedTutorial?: boolean;
disableBlobObjectDownload?: boolean; // use data uri downloads instead of object urls
immersiveReader?: boolean; // enables the immersive reader for tutorials
downloadDialogTheme?: DownloadDialogTheme;
songEditor?: boolean; // enable the song asset type and field editor
multiplayer?: boolean; // enable multiplayer features
shareToKiosk?: boolean; // enable sharing to a kiosk
tours?: {
editor?: string // path to markdown file for the editor tour steps
}
tutorialSimSidebarLangs?: string[]; // Enable tutorial layout with sim in sidebar for specific editor languages (blocks, python, or javascript). Desktop only.
showOpenInVscode?: boolean; // show the open in VS Code button
matchWebUSBDeviceInSim?: boolean; // if set, pass current device id as theme to sim when available.
condenseProfile?: boolean; // if set, will make the profile dialog smaller
cloudProfileIcon?: string; // the file path for added imagery on smaller profile dialogs
timeMachine?: boolean; // Save/restore old versions of a project experiment
blocklySoundVolume?: number; // A number between 0 and 1 that sets the volume for blockly sounds (e.g. connect, disconnect, click)
timeMachineQueryParams?: string[]; // An array of query params to pass to timemachine iframe embed
timeMachineDiffInterval?: number; // An interval in milliseconds at which to take diffs to store in project history. Defaults to 5 minutes
timeMachineSnapshotInterval?: number; // An interval in milliseconds at which to take full project snapshots in project history. Defaults to 15 minutes
adjustBlockContrast?: boolean; // If set to true, all block colors will automatically be adjusted to have a contrast ratio of 4.5 with text
pxtJsonOptions?: PxtJsonOption[];
enabledFeatures?: pxt.Map<FeatureFlag>;
forceEnableAiErrorHelp?: boolean; // Enables the AI Error Help feature, regardless of geo setting.
}
interface DownloadDialogTheme {
webUSBDeviceNames?: string[];
minimumFirmwareVersion?: string;
deviceIcon?: string;
deviceSuccessIcon?: string;
downloadMenuHelpURL?: string;
downloadHelpURL?: string;
troubleshootWebUSBHelpURL?: string;
incompatibleHardwareHelpURL?: string;
dragFileImage?: string;
connectDeviceImage?: string;
disconnectDeviceImage?: string;
selectDeviceImage?: string;
connectionSuccessImage?: string;
incompatibleHardwareImage?: string;
browserUnpairImage?: string;
usbDeviceForgottenImage?: string;
// The following fields used to be displayed, but students
// found the dialog confusing / hard to use; now we redirect
// them to help docs instead if pairing fails for step by step instructions.
// checkFirmwareVersionImage?: string;
// checkUSBCableImage?: string;
// firmwareHelpURL?: string;
}
interface SocialOptions {
twitterHandle?: string;
orgTwitterHandle?: string;
hashtags?: string;
related?: string;
discourse?: string; // URL to the discourse powered forum
discourseCategory?: string;
}
interface DocMenuEntry {
name: string;
// needs to have one of `path` or `subitems`
path?: string;
// force opening in separate window
popout?: boolean;
tutorial?: boolean;
subitems?: DocMenuEntry[];
}
interface TOCMenuEntry {
name: string;
path?: string;
subitems?: TOCMenuEntry[];
markdown?: string;
}
interface PxtJsonOption {
label: string;
property: string;
type: "checkbox";
}
interface AssetConfig {
[index: string /*pxt.AssetType*/]: (boolean | { label?: string; iconClass?: string });
}
interface TargetBundle extends AppTarget {
bundledpkgs: Map<Map<string>>; // @internal use only (cache)
bundleddirs: string[];
staticpkgdirs?: {
base: string[];
extensions: string[];
} // if defined, used in staticpkg as pkgs to combine with bundled dirs. Otherwise, bundled dirs will be combined with eachother.
versions: TargetVersions; // @derived
apiInfo?: Map<PackageApiInfo>;
tutorialInfo?: Map<BuiltTutorialInfo>; // hash of tutorial code mapped to prebuilt info for each tutorial
colorThemeMap?: Map<ColorThemeInfo>; // Color theme id mapped to color theme info
}
interface BuiltTutorialInfo {
hash?: string;
usedBlocks: Map<number>;
snippetBlocks: Map<Map<number>>;
highlightBlocks: Map<Map<number>>;
validateBlocks: Map<Map<string[]>>;
}
interface PackageApiInfo {
sha: string;
apis: ts.pxtc.ApisInfo;
}
interface ColorThemeInfo {
id: string; // Unique identifier
name: string; // Human-readable name
weight?: number; // Lower weights appear first in theme list, no value = go to end
overrideCss?: string; // Special css to apply for the theme
monacoBaseTheme?: string; // Theme for monaco editor, see https://code.visualstudio.com/docs/getstarted/themes
colors: { [key: string]: string }; // Values for theme variables
}
interface ServiceWorkerEvent {
type: "serviceworker";
state: "activated";
ref: string;
}
type ServiceWorkerClientMessage = RequestPacketIOLockMessage | ReleasePacketIOLockMessage | DisconnectPacketIOResponse | PacketIOLockSupportedMessage | PacketIOLockStatusResponse;
interface RequestPacketIOLockMessage {
type: "serviceworkerclient";
action: "request-packet-io-lock";
lock: string;
}
interface ReleasePacketIOLockMessage {
type: "serviceworkerclient";
action: "release-packet-io-lock";
lock: string;
}
interface DisconnectPacketIOResponse {
type: "serviceworkerclient";
action: "packet-io-lock-disconnect";
lock: string;
didDisconnect: boolean;
}
interface PacketIOLockSupportedMessage {
type: "serviceworkerclient";
action: "packet-io-supported";
}
interface PacketIOLockStatusResponse {
type: "serviceworkerclient";
action: "packet-io-status";
lock: string;
hasLock: boolean;
}
type ServiceWorkerMessage = DisconnectPacketIOMessage | GrantPacketIOLockMessage | PacketIOLockSupportedResponse | PacketIOLockStatusMessage;
interface DisconnectPacketIOMessage {
type: "serviceworker";
action: "packet-io-lock-disconnect";
lock: string;
}
interface GrantPacketIOLockMessage {
type: "serviceworker";
action: "packet-io-lock-granted";
granted: boolean;
lock: string;
}
interface PacketIOLockSupportedResponse {
type: "serviceworker";
action: "packet-io-supported";
supported: boolean;
}
interface PacketIOLockStatusMessage {
type: "serviceworker";
action: "packet-io-status";
}
interface ProfileNotification {
message: string;
title: string
icon: string;
actionText: string;
link: string;
xicon?: boolean;
}
}
declare namespace pxt.editor {
const enum FileType {
Text = "text",
TypeScript = "typescript",
JavaScript = "javascript",
Markdown = "markdown",
Python = "python",
CPP = "cpp",
JSON = "json",
XML = "xml",
Asm = "asm"
}
const enum LanguageRestriction {
Standard = "",
PythonOnly = "python-only",
JavaScriptOnly = "javascript-only",
BlocksOnly = "blocks-only",
NoBlocks = "no-blocks",
NoPython = "no-python",
NoJavaScript = "no-javascript"
}
// Placeholder for IProjectView defined in pxteditor.d.ts
interface IProjectView {
}
}
declare namespace ts.pxtc {
namespace ir {
const enum CallingConvention {
Plain,
Async,
Promise,
}
}
interface CompileSwitches {
profile?: boolean;
gcDebug?: boolean;
boxDebug?: boolean;
slowMethods?: boolean;
slowFields?: boolean;
skipClassCheck?: boolean;
noThisCheckOpt?: boolean;
numFloat?: boolean;
noTreeShake?: boolean;
inlineConversions?: boolean;
noPeepHole?: boolean;
time?: boolean;
noIncr?: boolean;
rawELF?: boolean;
multiVariant?: boolean;
size?: boolean;
}
interface CompileTarget {
isNative: boolean; // false -> JavaScript for simulator
preferredEditor?: string; // used to indicate which way to run any source-level conversions (TS/Py/Blocks)
nativeType?: string; // currently only "thumb"
runtimeIsARM?: boolean; // when nativeType is "thumb" but runtime is compiled in ARM mode
hasHex: boolean;
useUF2?: boolean;
useMkcd?: boolean;
useELF?: boolean;
useESP?: boolean;
sourceMap?: boolean;
saveAsPNG?: boolean;
noSourceInFlash?: boolean;
useModulator?: boolean;
webUSB?: boolean; // use WebUSB when supported
disableHIDBridge?: boolean; // disable hid bridge
hexMimeType?: string;
moveHexEof?: boolean;
driveName?: string;
jsRefCounting?: boolean;
utf8?: boolean;
switches: CompileSwitches;
deployDrives?: string; // partial name of drives where the .hex file should be copied
fileDeployPaths?: pxt.Map<string>; // Path IDs => path for file deployments
deployFileMarker?: string;
shortPointers?: boolean; // set to true for 16 bit pointers
flashCodeAlign?: number; // defaults to 1k
flashEnd?: number;
flashUsableEnd?: number;
flashChecksumAddr?: number;
ramSize?: number;
patches?: pxt.Map<UpgradePolicy[]>; // semver range -> upgrade policies
pyPatches?: pxt.Map<UpgradePolicy[]>; // semver range -> upgrade policies
openocdScript?: string;
uf2Family?: string;
onStartText?: boolean;
stackAlign?: number; // 1 word (default), or 2
hidSelectors?: HidSelector[];
emptyEventHandlerComments?: boolean; // true adds a comment for empty event handlers
vmOpCodes?: pxt.Map<number>;
postProcessSymbols?: boolean;
imageRefTag?: number;
keepCppFiles?: boolean;
debugMode?: boolean; // set dynamically, not in config
compilerExtension?: string; // JavaScript code to load in compiler
shimRenames?: pxt.Map<string>;
unfetteredInitializers?: boolean; // removes isNumericLiteral check on default argument values
}
type BlockContentPart = BlockLabel | BlockParameter | BlockImage;
type BlockPart = BlockContentPart | BlockBreak;
interface BlockLabel {
kind: "label";
text: string;
style?: string[];
cssClass?: string;
}
interface BlockParameter {
kind: "param";
ref: boolean;
name: string;
shadowBlockId?: string;
varName?: string;
}
interface BlockBreak {
kind: "break";
}
interface BlockImage {
kind: "image";
uri: string;
}
interface ParsedBlockDef {
parts: ReadonlyArray<(BlockPart)>;
parameters: ReadonlyArray<BlockParameter>;
}
interface CommentAttrs {
debug?: boolean; // requires ?dbg=1
shim?: string;
shimArgument?: string;
enumval?: string;
helper?: string;
help?: string;
async?: boolean;
promise?: boolean;
hidden?: boolean;
undeletable?: boolean;
callingConvention: ir.CallingConvention;
block?: string; // format of the block, used at namespace level for category name
translationId?: string; // in-context translation id
blockId?: string; // unique id of the block
blockGap?: string; // pixels in toolbox after the block is inserted
blockExternalInputs?: boolean; // force external inputs. Deprecated; see inlineInputMode.
blockImportId?: string;
blockBuiltin?: boolean;
blockNamespace?: string;
blockIdentity?: string;
blockAllowMultiple?: boolean; // override single block behavior for events
blockHidden?: boolean; // not available directly in toolbox
blockImage?: boolean; // for enum variable, specifies that it should use an image from a predefined location
blockCombine?: boolean;
blockCombineShadow?: string;
blockCombineGetHelp?: string;
blockCombineSetHelp?: string;
blockCombineChangeHelp?: string;
blockSetVariable?: string; // show block with variable assigment in toolbox. Set equal to a name to control the var name
fixedInstances?: boolean;
fixedInstance?: boolean;
expose?: boolean; // expose to VM despite being in pxt:: namespace
decompileIndirectFixedInstances?: boolean; // Attribute on TYPEs with fixedInstances set to indicate that expressions with that type may be decompiled even if not a fixed instance
decompilerShadowAlias?: string; // hints to the decompiler that this block can be replaced with the block with this id if doing so would create a shadow block
constantShim?: boolean;
indexedInstanceNS?: string;
indexedInstanceShim?: string;
defaultInstance?: string;
autoCreate?: string;
noRefCounting?: boolean;
color?: string;
colorSecondary?: string;
colorTertiary?: string;
icon?: string;
jresURL?: string;
iconURL?: string;
imageLiteral?: number;
gridLiteral?: number;
gridLiteralOnColor?: string;
gridLiteralOffColor?: string;
imageLiteralColumns?: number; // optional number of columns
imageLiteralRows?: number; // optional number of rows
imageLiteralScale?: number; // button sizing between 0.6 and 2, default is 1
weight?: number;
parts?: string;
hiddenParts?: string; // allows an extesion to declaratively hide a part
trackArgs?: number[];
advanced?: boolean;
deprecated?: boolean;
useEnumVal?: boolean; // for conversion from typescript to blocks with enumVal
emitAsConstant?: boolean; // used by the blocklycompiler to indicate that an enum should be compiled to a constant with the enumIdentity attribute set
enumIdentity?: string; // used by the decompiler to map constants to enum dropdown values
callInDebugger?: boolean; // for getters, they will be invoked by the debugger.
py2tsOverride?: string; // used to map functions in python that have an equivalent (but differently named) ts function
pyHelper?: string; // used to specify functions on the _py namespace that provide implementations. Should be of the form py_class_methname
pyConvertToTaggedTemplate?: boolean; // hint that this function should be emitted as a tagged template when going from py to ts
argsNullable?: boolean; // allow NULL to be passed to C++ shim function
maxBgInstances?: string; // if there's less than that number of instances of the current class, it's not reported as a mem leak
// on class
snippet?: string; // value used to generate TS snippet
pySnippet?: string; // value used to generate python snippet
// On block
subcategory?: string;
group?: string;
whenUsed?: boolean;
jres?: string;
tags?: string; // value used to describe an element in a gallery when filtering / searching
useLoc?: string; // The qName of another API whose localization will be used if this API is not translated and if both block definitions are identical
topblock?: boolean;
topblockWeight?: number;
locs?: pxt.Map<string>;
toolboxParent?: string; // The ID of a block that will wrap this block in the toolbox. Useful for having multiple instances of the same parent block with different child shadows
toolboxParentArgument?: string; // Used with toolboxParent. The name of the arg that this block should be inserted into as a shadow
duplicateWithToolboxParent?: string; // The ID of an additional block that will be created, which wraps this block in the toolbox. The original (unwrapped) block will also remain in the toolbox.
duplicateWithToolboxParentArgument?: string; // Used with duplicateWithToolboxParent. The name of the arg that this block should be inserted into as a shadow.
blockHandlerKey?: string; // optional field for explicitly declaring the handler key to use to compare duplicate events
afterOnStart?: boolean; // indicates an event that should be compiled after on start when converting to typescripts
handlerStatement?: boolean; // deprecated, use forceStatement instead
forceStatement?: boolean; // indicates that the block for this API should be a statement, regardless of the return value or if it has a handler param
// On namepspace
subcategories?: string[];
groups?: string[];
groupIcons?: string[];
groupHelp?: string[];
labelLineWidth?: string;
// on interfaces
indexerGet?: string;
indexerSet?: string;
mutate?: string;
mutateText?: string;
mutatePrefix?: string;
mutateDefaults?: string;
mutatePropertyEnum?: string;
inlineInputMode?: string; // can be inline (horizontal), external (vertical), auto (default), or variable (based off currently expanded number of params)
inlineInputModeLimit?: number; // the number of expanded arguments at which to switch from inline to external. only applies when inlineInputMode=variable and expandableArgumentsMode=enabled
expandableArgumentMode?: string; // can be disabled, enabled, or toggle
expandableArgumentBreaks?: string; // a comma separated list of how many arguments to reveal/hide each time + or - is pressed on a block. only applies when expandableArgumentsMode=enabled
expandArgumentsInToolbox?: boolean; // if true, the block will be fully expanded in the toolbox flyout
compileHiddenArguments?: boolean; // if true, compiles the values in expandable arguments even when collapsed
draggableParameters?: string; // can be reporter or variable; defaults to variable
/* start enum-only attributes (i.e. a block with shim=ENUM_GET) */
enumName?: string; // The name of the enum as it will appear in the code
enumMemberName?: string; // If the name of the enum was "Colors", this would be "color"
enumStartValue?: number; // The lowest value to emit when going from blocks to TS
enumIsBitMask?: boolean; // If true then values will be emitted in the form "1 << n"
enumIsHash?: boolean; // if true, the name of the enum is normalized, then hashed to generate the value
enumPromptHint?: string; // The hint that will be displayed in the member creation prompt
enumInitialMembers?: string[]; // The initial enum values which will be given the lowest values available
/* end enum-only attributes */
isKind?: boolean; // annotation for built-in kinds in library code
kindMemberName?: string; // The name a member of the kind as it will appear in the blocks editor. If the kind was "Colors" this would be "color"
kindNamespace?: string; // defaults to blockNamespace or the namesapce of this API
kindCreateFunction?: string; // defaults to kindNamespace.create()
kindPromptHint?: string; // Defaults to "Create a new kind..."
optionalVariableArgs?: boolean;
toolboxVariableArgs?: string;
_name?: string;
_source?: string;
_def?: ParsedBlockDef;
_expandedDef?: ParsedBlockDef;
_untranslatedBlock?: string; // The block definition before it was translated
_untranslatedJsDoc?: string // the jsDoc before it was translated
_translatedLanguageCode?: string // the language this block has been translated into
_shadowOverrides?: pxt.Map<string>;
jsDoc?: string;
paramHelp?: pxt.Map<string>;
// foo.defl=12 -> paramDefl: { foo: "12" }; eg.: 12 in arg description will also go here
paramDefl: pxt.Map<string>;
paramSnippets?: pxt.Map<ParamSnippet>;
// this lists arguments that have .defl as opposed to just eg.: stuff
explicitDefaults?: string[];
paramMin?: pxt.Map<string>; // min range
paramMax?: pxt.Map<string>; // max range
// Map for custom field editor parameters
paramFieldEditor?: pxt.Map<string>; //.fieldEditor
paramShadowOptions?: pxt.Map<pxt.Map<string>>; //.shadowOptions.
paramFieldEditorOptions?: pxt.Map<pxt.Map<string>>; //.fieldOptions.
duplicateShadowOnDrag?: boolean; // if true, duplicate the block when its shadow is dragged out (like function arguments)
alias?: string; // another symbol alias for this member
pyAlias?: string; // optional python version of the alias
blockAliasFor?: string; // qname of the function this block is an alias for
}
interface ParamSnippet {
ts?: string;
python?: string;
}
interface ParameterDesc {
name: string;
description: string;
type: string;
pyTypeString?: string;
initializer?: string;
default?: string;
properties?: PropertyDesc[];
handlerParameters?: PropertyDesc[];
options?: pxt.Map<PropertyOption>;
isEnum?: boolean;
}
interface PropertyDesc {
name: string;
type: string;
}
interface PropertyOption {
value: any;
}
const enum SymbolKind {
None,
Method,
Property,
Function,
Variable,
Module,
Enum,
EnumMember,
Class,
Interface,
}
interface SymbolInfo {
attributes: CommentAttrs;
// unqualified name (e.g. "Grass" instead of "Blocks.Grass")
name: string;
namespace: string;
fileName: string;
kind: SymbolKind;
parameters: ParameterDesc[];
retType: string;
extendsTypes?: string[]; //