yaml-flow 6.0.0 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/board-live-cards-cli.js +4 -4
- package/browser/asset-integrity.json +3 -3
- package/browser/board-livecards-client.js +2 -0
- package/browser/board-livecards-client.js.map +1 -0
- package/browser/board-livecards-localstorage.js +10 -0
- package/browser/board-livecards-localstorage.js.map +1 -0
- package/browser/board-livegraph-engine.js +2 -2
- package/browser/board-livegraph-engine.js.map +1 -1
- package/browser/card-compute.js +28 -28
- package/browser/compute-jsonata.js +5 -0
- package/browser/compute-jsonata.js.map +1 -0
- package/browser/live-cards.js +264 -151
- package/card-store.js +4 -4
- package/dist/{board-live-cards-public-CltXYgaY.d.cts → board-live-cards-public-5n1-syA3.d.cts} +8 -5
- package/dist/{board-live-cards-public-f-E-FAyp.d.ts → board-live-cards-public-CK_J8uv0.d.ts} +8 -5
- package/dist/board-livegraph-runtime/index.cjs +2 -2
- package/dist/board-livegraph-runtime/index.cjs.map +1 -1
- package/dist/board-livegraph-runtime/index.d.cts +11 -9
- package/dist/board-livegraph-runtime/index.d.ts +11 -9
- package/dist/board-livegraph-runtime/index.js +2 -2
- package/dist/board-livegraph-runtime/index.js.map +1 -1
- package/dist/board-livegraph-runtime/jsonata-sync.cjs +37 -1
- package/dist/card-compute/index.cjs +4 -4
- package/dist/card-compute/index.cjs.map +1 -1
- package/dist/card-compute/index.d.cts +5 -1
- package/dist/card-compute/index.d.ts +5 -1
- package/dist/card-compute/index.js +4 -4
- package/dist/card-compute/index.js.map +1 -1
- package/dist/card-compute/jsonata-sync.cjs +37 -1
- package/dist/cli/browser-api/board-live-cards-browser-adapter.cjs +2 -1
- package/dist/cli/browser-api/board-live-cards-browser-adapter.cjs.map +1 -1
- package/dist/cli/browser-api/board-live-cards-browser-adapter.d.cts +27 -14
- package/dist/cli/browser-api/board-live-cards-browser-adapter.d.ts +27 -14
- package/dist/cli/browser-api/board-live-cards-browser-adapter.js +2 -1
- package/dist/cli/browser-api/board-live-cards-browser-adapter.js.map +1 -1
- package/dist/cli/browser-api/card-store-browser-api.cjs +1 -1
- package/dist/cli/browser-api/card-store-browser-api.cjs.map +1 -1
- package/dist/cli/browser-api/card-store-browser-api.js +1 -1
- package/dist/cli/browser-api/card-store-browser-api.js.map +1 -1
- package/dist/cli/browser-api/jsonata-sync.cjs +37 -1
- package/dist/cli/node/artifacts-store-cli.cjs +8 -8
- package/dist/cli/node/artifacts-store-cli.cjs.map +1 -1
- package/dist/cli/node/artifacts-store-cli.js +8 -8
- package/dist/cli/node/artifacts-store-cli.js.map +1 -1
- package/dist/cli/node/board-live-cards-cli.cjs +7 -7
- package/dist/cli/node/board-live-cards-cli.cjs.map +1 -1
- package/dist/cli/node/board-live-cards-cli.js +7 -7
- package/dist/cli/node/board-live-cards-cli.js.map +1 -1
- package/dist/cli/node/card-store-cli.cjs +5 -5
- package/dist/cli/node/card-store-cli.cjs.map +1 -1
- package/dist/cli/node/card-store-cli.js +5 -5
- package/dist/cli/node/card-store-cli.js.map +1 -1
- package/dist/cli/node/execution-adapter.cjs +3 -0
- package/dist/cli/node/execution-adapter.cjs.map +1 -0
- package/dist/cli/node/execution-adapter.d.cts +174 -0
- package/dist/cli/node/execution-adapter.d.ts +174 -0
- package/dist/cli/node/execution-adapter.js +3 -0
- package/dist/cli/node/execution-adapter.js.map +1 -0
- package/dist/cli/node/fs-board-adapter.cjs +7 -7
- package/dist/cli/node/fs-board-adapter.cjs.map +1 -1
- package/dist/cli/node/fs-board-adapter.d.cts +2 -2
- package/dist/cli/node/fs-board-adapter.d.ts +2 -2
- package/dist/cli/node/fs-board-adapter.js +7 -7
- package/dist/cli/node/fs-board-adapter.js.map +1 -1
- package/dist/cli/node/jsonata-sync.cjs +37 -1
- package/dist/cli/node/source-cli-task-executor.cjs +4 -4
- package/dist/cli/node/source-cli-task-executor.cjs.map +1 -1
- package/dist/cli/node/source-cli-task-executor.js +4 -4
- package/dist/cli/node/source-cli-task-executor.js.map +1 -1
- package/dist/continuous-event-graph/index.cjs +2 -2
- package/dist/continuous-event-graph/index.cjs.map +1 -1
- package/dist/continuous-event-graph/index.js +2 -2
- package/dist/continuous-event-graph/index.js.map +1 -1
- package/dist/continuous-event-graph/jsonata-sync.cjs +37 -1
- package/dist/execution-refs.cjs +2 -1
- package/dist/execution-refs.cjs.map +1 -1
- package/dist/execution-refs.d.cts +55 -12
- package/dist/execution-refs.d.ts +55 -12
- package/dist/execution-refs.js +2 -1
- package/dist/execution-refs.js.map +1 -1
- package/dist/index.cjs +10 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/dist/jsonata-sync.cjs +37 -1
- package/dist/server-runtime/index.cjs +9 -0
- package/dist/server-runtime/index.cjs.map +1 -0
- package/dist/server-runtime/index.d.cts +31 -0
- package/dist/server-runtime/index.d.ts +31 -0
- package/dist/server-runtime/index.js +9 -0
- package/dist/server-runtime/index.js.map +1 -0
- package/dist/server-runtime/jsonata-sync.cjs +7623 -0
- package/dist/step-machine-public/index.cjs +3 -0
- package/dist/step-machine-public/index.cjs.map +1 -0
- package/dist/step-machine-public/index.d.cts +166 -0
- package/dist/step-machine-public/index.d.ts +166 -0
- package/dist/step-machine-public/index.js +3 -0
- package/dist/step-machine-public/index.js.map +1 -0
- package/dist/step-machine-public/jsonata-sync.cjs +7623 -0
- package/dist/storage-refs.cjs +2 -2
- package/dist/storage-refs.cjs.map +1 -1
- package/dist/storage-refs.d.cts +6 -6
- package/dist/storage-refs.d.ts +6 -6
- package/dist/storage-refs.js +2 -2
- package/dist/storage-refs.js.map +1 -1
- package/dist/types-CU3DjTKL.d.cts +147 -0
- package/dist/types-HGDTWIun.d.ts +147 -0
- package/examples/browser/boards/portfolio-tracker/portfolio-t4.js +9 -10
- package/examples/browser/boards/portfolio-tracker/portfolio-tracker-http-test.js +370 -0
- package/examples/browser/boards/portfolio-tracker/portfolio-tracker-http-test.py +398 -0
- package/examples/browser/boards/portfolio-tracker/portfolio-tracker-public.js +9 -10
- package/examples/browser/boards/portfolio-tracker/portfolio-tracker-server.js +300 -0
- package/examples/browser/boards/portfolio-tracker/portfolio-tracker-server.py +617 -0
- package/examples/browser/boards/portfolio-tracker/portfolio-tracker-sse-worker.js +48 -0
- package/examples/browser/boards/portfolio-tracker/portfolio-tracker.py +11 -10
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/_board-cli.js +19 -4
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/add-cards-cli.js +4 -8
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/init-board-cli.js +6 -10
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/poll-status-cli.js +8 -16
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/reset-board-dir-cli.js +2 -6
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/retrigger-cli.js +4 -8
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/status-cli.js +3 -7
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/update-holdings-cli.js +4 -8
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/wait-completed-cli.js +7 -16
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers/write-prices-cli.js +2 -6
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/_board_pycli.py +13 -3
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/add-cards.py +2 -1
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/init-board.py +2 -1
- package/examples/cli/step-machine-cli/portfolio-tracker/handlers-py/poll-status.py +2 -1
- package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker.flow.yaml +20 -24
- package/examples/cli/step-machine-cli/portfolio-tracker/run-inline-python-demo-pycli.py +0 -3
- package/examples/cli/step-machine-demo/jsonata-init-board-cli.js +8 -13
- package/examples/cli/step-machine-demo/jsonata-init-board.flow.yaml +33 -9
- package/examples/cli/step-machine-demo/one-step-cli-only.flow.yaml +3 -1
- package/examples/cli/step-machine-demo/step2-double-cli.js +6 -12
- package/examples/cli/step-machine-demo/two-step-math.flow.yaml +66 -4
- package/examples/cli/step-machine-demo/two-step-mixed.flow.yaml +13 -5
- package/examples/example-board/agent-instructions.md +1 -1
- package/examples/example-board/cards/card-my-identity.json +30 -6
- package/examples/example-board/cards/card-portfolio-action.json +24 -6
- package/examples/example-board/cards/card-portfolio-intelligence.json +97 -0
- package/examples/example-board/cards/card-portfolio-risks.json +24 -6
- package/examples/example-board/cards/card-rebalance-impact.json +22 -6
- package/examples/example-board/cards/card-rebalance-sim.json +66 -15
- package/examples/example-board/cards/cardT-market-prices.json +80 -0
- package/examples/example-board/cards/{card-portfolio-value.json → cardT-portfolio-value.json} +38 -10
- package/examples/example-board/cards/cardT-portfolio.json +78 -0
- package/examples/example-board/demo-server-config.json +1 -1
- package/examples/example-board/demo-server.js +383 -69
- package/examples/example-board/demo-shell-localstorage.html +774 -0
- package/examples/example-board/demo-shell-with-server.html +18 -36
- package/examples/example-board/demo-shell.html +5 -4
- package/examples/example-board/demo-task-executor.js +213 -265
- package/package.json +15 -13
- package/step-machine-cli.js +43 -310
- package/board-livecards-server-runtime.js +0 -1513
- package/browser/board-livecards-runtime-client.js +0 -263
- package/dist/pycli/quickjs-board-runtime.global.js +0 -9
- package/dist/pycli/quickjs-board-runtime.global.js.map +0 -1
- package/dist/pycli/quickjs-step-machine-runtime.global.js +0 -5
- package/dist/pycli/quickjs-step-machine-runtime.global.js.map +0 -1
- package/examples/cli/step-machine-demo/two-step-math-handlers.js +0 -32
- package/examples/cli/step-machine-demo/two-step-mixed-handlers.js +0 -24
- package/examples/example-board/cards/card-market-prices.json +0 -56
- package/examples/example-board/cards/card-portfolio.json +0 -44
- package/examples/example-board/demo-shell-browser.html +0 -675
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../node_modules/jsonata/jsonata.js","../../src/card-compute/jsonata-sync.cjs","../../src/cli/common/storage-interface.ts","../../src/event-graph/constants.ts","../../src/event-graph/graph-helpers.ts","../../src/event-graph/task-transitions.ts","../../src/continuous-event-graph/core.ts","../../src/continuous-event-graph/schedule.ts","../../src/continuous-event-graph/journal.ts","../../src/continuous-event-graph/reactive.ts","../../src/cli/common/execution-interface.ts","../../src/card-compute/index.ts","quickjs-shim:quickjs-module-shim","../../src/card-compute/schema-validator.ts","../../src/cli/common/board-live-cards-lib.ts","../../src/cli/common/board-live-cards-public.ts","../../src/cli/pycli/quickjs-board-runtime.ts"],"names":["require_jsonata","__commonJSMin","exports","module","f","g","r","e","n","t","o","i","c","__require","u","a","p","require","utils","dateTime","stringToArray","few","ordinals","decades","magnitudes","numberToWords","value","ordinal","lookup","num","prev","ord","words","tens","remainder","hundreds","mag","factor","mant","wordValues","word","index","lword","val","wordsToNumber","text","values","part","segs","top","b","romanNumerals","romanValues","decimalToRoman","numeral","romanToDecimal","roman","decimal","max","digit","decimalToLetters","aChar","letters","aCode","lettersToDecimal","formatInteger","picture","format","analyseIntegerPicture","_formatInteger","formats","tcase","formattedInteger","negative","padLength","padding","code","ii","pos","separator","suffix123","lastDigit","suffix","decimalGroups","primaryFormat","formatModifier","semicolon","zeroCode","mandatoryDigits","optionalDigits","groupingSeparators","separatorPosition","codePoint","group","regular","separators","sepChar","indexes","gcd","defaultPresentationModifiers","analyseDateTimePicture","spec","addLiteral","start","end","literal","marker","def","comma","presMod","widthMod","dash","min","parseWidth","wm","widthDef","lastChar","integerPattern","w","previousPart","days","months","millisInADay","startOfFirstWeek","ym","jan1","dayOfJan1","yearMonth","year","month","deltaWeeks","getDateTimeFragment","date","component","componentValue","today","firstJan","thisYear","startOfWeek1","week","startOfFollowingYear","startOfPreviousYear","thisMonth","startOfFollowingMonth","startOfPreviousMonth","startOfISOYear","endOfISOYear","now","startOfISOMonth","nextMonth","endOfISOMonth","iso8601Spec","formatDateTime","millis","timezone","offsetHours","offsetMinutes","offset","formatComponent","markerSpec","numDigits","formatSpec","offsetMillis","result","generateRegex","matcher","res","name","isUpper","digits","sep","char","parseInteger","parseDateTime","timestamp","matchSpec","fullRegex","info","components","mpart","mask","shift","bit","isType","type","dateB","dateC","dateD","timeB","comps","startSpecified","endSpecified","derivedDate","iso8601regex","toMillis","fromMillis","global","functions","isNumeric","isArrayOfStrings","isArrayOfNumbers","createSequence","isSequence","isFunction","isLambda","isPromise","getFunctionArity","deepEquals","sum","args","total","count","average","string","arg","prettify","str","space","key","substring","length","strArray","strLength","substringBefore","chars","substringAfter","lowercase","uppercase","trim","pad","width","evaluateMatcher","contains","token","matches","match","regex","limit","replace","pattern","replacement","self","replacer","regexMatch","substitute","position","dollarVal","maxDigits","submatch","replacedWith","base64encode","btoa","base64decode","atob","encodeUrlComponent","returnVal","encodeUrl","decodeUrlComponent","decodeUrl","split","join","strs","formatNumber","options","defaults","properties","decimalDigitFamily","zeroCharCode","activeChars","subPictures","splitParts","subpicture","prefix","ch","activePart","mantissaPart","exponentPart","integerPart","fractionalPart","exponentPosition","decimalPosition","validate","parts","error","decimalPos","valid","charTypes","optionalDigitPos","exponentExists","analyse","getGroupingPositions","toLeft","positions","groupingPosition","charsToTheRight","integerPartGroupingPositions","regularGrouping","fractionalPartGroupingPositions","minimumIntegerPartSize","scalingFactor","fractionalPartArray","minimumFactionalPartSize","maximumFactionalPartSize","exponentPresent","minimumExponentSize","variables","minus_sign","zero_digit","decimal_separator","grouping_separator","pic","adjustedNumber","mantissa","exponent","maxMantissa","minMantissa","roundedNumber","round","makeString","dp","stringValue","padLeft","padRight","groupCount","stringExponent","formatBase","radix","number","abs","floor","ceil","precision","diff","sqrt","power","exp","random","boolean","trues","not","hofFuncArgs","func","arg1","arg2","arg3","func_args","map","arr","filter","entry","single","hasFoundMatch","positiveResult","zip","tuple","foldLeft","sequence","init","arity","keys","merge","item","allkeys","input","append","exists","spread","obj","prop","reverse","each","message","assert","condition","sort","comparator","comp","l","merge_iter","left","right","merged","msort","array","middle","shuffle","j","distinct","results","includes","jj","sift","datetime","fn","parser","parseSignature","jsonata","isIterable","isDeepEqual","staticFrame","createFrame","evaluate","expr","environment","entryCallback","evaluatePath","evaluateBinary","evaluateUnary","evaluateName","evaluateLiteral","evaluateWildcard","evaluateDescendants","evaluateCondition","evaluateBlock","evaluateBindExpression","evaluateRegex","evaluateFunction","evaluateVariable","evaluateLambda","evaluatePartialApplication","evaluateApplyExpression","evaluateTransformExpression","evaluateFilter","evaluateGroupExpression","exitCallback","inputSequence","resultSequence","isTupleStream","tupleBindings","step","evaluateTupleStep","evaluateStep","createFrameFromTuple","frame","lastStep","evaluateSortExpression","evaluateStages","ss","stages","stage","ee","sorted","stepEnv","bb","predicate","context","env","ires","lhs","op","evalrhs","evaluateBooleanExpression","err","rhs","evaluateNumericExpression","evaluateEqualityExpression","evaluateComparisonExpression","evaluateStringConcat","evaluateRangeExpression","evaluateIncludesExpression","generators","idx","generator","flatten","flattened","recurseDescendants","member","ltype","rtype","lcomparable","rcomparable","lBool","boolize","booledValue","lstr","rstr","groups","reduce","itemIndex","pairIndex","pair","reduceTupleStream","tupleStream","size","re","closure","fromIndex","next","isTupleSort","term","aa","atype","btype","focus","transformer","cloneFunction","apply","update","updateType","deletions","defineFunction","chainAST","chain","applyto","proc","evaluatedArgs","params","procName","applyInner","validatedArgs","validateArguments","applyProcedure","procedure","partialApplyProcedure","partialApplyNativeFunction","signature","param","applyNativeFunction","unboundArgs","native","sigArgs","getNativeFunctionArguments","sigArg","body","bodyAST","partial","sigParens","definition","functionEval","ast","populateMessage","functionClone","enclosingEnvironment","bindings","newFrame","framePushCallback","errorCodes","template","errors","callback","exec_env","v","it","implementation","operators","escapes","tokenizer","path","create","scanRegex","depth","flags","isClosingSlash","backslashCount","currentChar","commentStart","quoteType","qstr","octets","codepoint","numregex","source","recover","node","lexer","symbol_table","remainingTokens","remaining","nxt","base_symbol","symbol","id","bp","s","handleError","advance","infix","next_token","expression","rbp","terminal","led","bindingPower","infixr","nud","sigPos","sig","tok","expressions","range","terms","objectParser","tailCallOptimize","thunk","ancestorLabel","ancestorIndex","ancestry","seekParent","slot","pushAncestry","slots","resolveAncestry","laststep","is","processAST","lstep","rest","lit","firststep","sortStep","argAST","arraySignatureMapping","prevParam","findClosingBracket","openSymbol","closeSymbol","endParen","choice","endPos","regexStr","getSymbol","throwValidationError","badArgs","badSig","partialPattern","goodTo","suppliedSig","isValid","argIndex","contextType","arrayOK","itemType","differentItems","isNum","iteratorSymbol","lkeys","rkeys","require_jsonata_sync","serializeRef","ref","parseRef","inner","withRelayLock","lock","work","continuation","release","TASK_STATUS","getProvides","task","getRequires","getAllTasks","graph","isNonActiveTask","taskState","getRefreshStrategy","taskConfig","graphSettings","getMaxExecutions","computeAvailableOutputs","taskStates","outputs","taskName","output","groupTasksByProvides","candidateTaskNames","tasks","outputGroups","applyTaskStart","state","existingTask","createDefaultGraphEngineStore","startConsumedHashes","requires","otherName","otherConfig","otherState","updatedTask","applyTaskCompletion","dataHash","data","outputTokens","lastConsumedHashes","newOutputs","applyTaskFailure","retryCount","breakTokens","applyTaskProgress","progress","applyTaskRestart","createLiveGraph","config","executionId","applyEvent","live","event","applyAgentAction","addNode","removeNode","addRequires","removeRequires","addProvides","removeProvides","applyEvents","events","current","_removedConfig","remainingTasks","_removedState","remainingStates","nodeName","tokens","toAdd","snapshot","restore","snap","action","schedule","graphTasks","producerMap","buildProducerMap","computedOutputs","availableOutputs","eligible","pending","unresolved","blocked","strategy","rerunnable","maxExec","shouldSkip","req","consumed","interval","completedAt","missingTokens","pendingTokens","failedTokenInfo","producers","conflicts","outputKey","groupTasks","MemoryJournal","__publicField","computeDataHash","json","stableStringify","fnv1a64Hex","k","hash","prime","mod","base64UrlEncode","bytes","binary","base64UrlDecode","base64","padded","encodeCallbackToken","payload","decodeCallbackToken","createReactiveGraph","configOrLive","initialHandlers","onDrain","inputQueue","disposed","pendingHandlers","handlers","internalJournal","draining","drainQueued","drain","drainOnce","internalEvents","inputEvents","dispatchTask","callbackToken","runPipeline","resolveUpstreamState","tokenToTask","cfg","producerTask","handlerNames","upstreamState","handlerName","handler","decoded","taskNames","serializeExecutionRef","parseExecutionRef","parsed","import_jsonata","createRequire","_require","jsonataSync","deepGet","cur","deepSet","run","ctx","runSync","evalExpr","resolve","VALID_ELEMENT_KINDS","ALLOWED_KEYS","validateNode","meta","bindTos","outputFiles","src","view","elem","enrichSources","source_defs","evalCtx","_projections","enrichSourcesSync","CardCompute","createCardStore","adapter","onWarn","loadIndex","applyJsonPath","jsonPath","segments","out","target","cards","card","snapshotChecksumIndex","localIndex","changed","cardKey","existingById","existingByKey","resolvedKey","checksum","createFetchedSourcesStore","blob","resolveRef","cardId","outputFile","raw","trimmed","deliveryToken","content","stagedKey","createJournalStore","entriesAfterCursor","cursor","all","entries","createExecutionRequestStore","kv","onDispatchFailed","journalId","existing","processorFn","msg","SNAPSHOT_SCHEMA_VERSION_V1","BOARD_GRAPH_KEY","BOARD_LAST_JOURNAL_PROCESSED_ID_KEY","cardRuntimeKey","createCardRuntimeStore","applyStateSnapshotCommitEnvelope","envelope","createStateSnapshotStore","scopeId","nextValues","createBoardConfigStore","readKey","createPublishedOutputsStore","m","status","isSourceInFlight","decideSourceAction","queueRequestedAt","nextEntryAfterFetchDelivery","fetchedAt","nextEntryAfterFetchFailure","reason","buildBoardStatusObject","boardPath","cardNames","sched","statusCounts","waitingByCard","dependentsByToken","dependents","provides","runtimeKeys","requiresSatisfied","requiresMissing","blockedBy","unblocks","dependent","lastFailureAt","fanOut","maxFanOut","allRequires","orphanCards","requiresNone","feedsAny","d","nowHighRes","createCardHandlerFn","baseRef","adapters","taskCompletedFn","_taskFailedFn","writeComputedValuesFn","writeDataObjectsFn","notifyCardFn","pendingRequests","cardState","allSources","requiredSources","dirty","flush","getSourceEntry","setSourceEntry","currentExecutionCount","lastExecCount","incomingRqt","sourcesData","taskData","unwrapped","computeNode","enrichedCard","enrichedSources","dir","runQueuedAt","undeliveredRequired","qrt","stampedAny","dispatchRqt","queuedAt","providesBindings","bindTo","EMPTY_CONFIG","boardEnvelopeToSnapshotEntries","snapshotEntriesToBoardEnvelope","lastDrainedJournalId","liveCardToTaskConfig","ok","fail","toBase64Url","binStr","fromBase64Url","encodeSourceToken","decodeSourceToken","nowIso","createBoardLiveCardsPublic","warn","flushBoardChangeNotifications","notifications","makeCardAdapter","storeRef","configStore","snapshotAdapterImpl","_scopeId","deletedKeys","snapshotStore","journalStore","cardStore","outputStore","boardExists","loadEnvelope","commitEnvelope","expectedVersion","appendJournalEvent","drainCycle","executionRequestStore","realCardRuntimeStore","realFetchedSourcesStore","RX","overlayCardRuntimeStore","SX","sxCache","overlayFetchedSourcesStore","cardHandlerAdapters","undrained","newCursor","TX","CX","DX","NX","taskFailedFn","rg","finalLive","currentVersion","statusObj","batch","executorRef","sourceDefs","sourceToken","ran","outputsStoreRef","_input","removeCard","retrigger","processAccumulatedEvents","upsertCard","restart","ids","taskConfigHash","upsertKv","taskConfigChanged","blobRef","taskFailed","taskProgress","sourceDataFetched","cbk","cid","cs","rqt","fetchedSourcesStore","cbkDecoded","sourceDataFetchFailure","getCardStoreRef","getOutputsStoreRef","getOutputsDataObject","getAllOutputsDataObjects","getOutputsComputedValues","getAllOutputsComputedValues","import_jsonata_sync","hostCall","makeLock","scope","createHostAdapter","notifyChannel","makeKv","scopeRoot","namespace","invoke","board"],"mappings":"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","file":"quickjs-board-runtime.global.js","sourcesContent":["(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.jsonata = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n/**\n * © Copyright IBM Corp. 2018 All Rights Reserved\n * Project name: JSONata\n * This project is licensed under the MIT License, see LICENSE\n */\n\nconst utils = require('./utils');\n\n/**\n * DateTime formatting and parsing functions\n * Implements the xpath-functions format-date-time specification\n * @type {{formatInteger, formatDateTime, parseInteger, parseDateTime}}\n */\nconst dateTime = (function () {\n 'use strict';\n\n const stringToArray = utils.stringToArray;\n\n const few = ['Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten',\n 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen'];\n const ordinals = ['Zeroth', 'First', 'Second', 'Third', 'Fourth', 'Fifth', 'Sixth', 'Seventh', 'Eighth', 'Ninth', 'Tenth',\n 'Eleventh', 'Twelfth', 'Thirteenth', 'Fourteenth', 'Fifteenth', 'Sixteenth', 'Seventeenth', 'Eighteenth', 'Nineteenth'];\n const decades = ['Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety', 'Hundred'];\n const magnitudes = ['Thousand', 'Million', 'Billion', 'Trillion'];\n\n /**\n * converts a number into english words\n * @param {string} value - the value to format\n * @param {boolean} ordinal - ordinal or cardinal form\n * @returns {string} - representation in words\n */\n function numberToWords(value, ordinal) {\n var lookup = function (num, prev, ord) {\n var words = '';\n if (num <= 19) {\n words = (prev ? ' and ' : '') + (ord ? ordinals[num] : few[num]);\n } else if (num < 100) {\n const tens = Math.floor(num / 10);\n const remainder = num % 10;\n words = (prev ? ' and ' : '') + decades[tens - 2];\n if (remainder > 0) {\n words += '-' + lookup(remainder, false, ord);\n } else if (ord) {\n words = words.substring(0, words.length - 1) + 'ieth';\n }\n } else if (num < 1000) {\n const hundreds = Math.floor(num / 100);\n const remainder = num % 100;\n words = (prev ? ', ' : '') + few[hundreds] + ' Hundred';\n if (remainder > 0) {\n words += lookup(remainder, true, ord);\n } else if (ord) {\n words += 'th';\n }\n } else {\n var mag = Math.floor(Math.log10(num) / 3);\n if (mag > magnitudes.length) {\n mag = magnitudes.length; // the largest word\n }\n const factor = Math.pow(10, mag * 3);\n const mant = Math.floor(num / factor);\n const remainder = num - mant * factor;\n words = (prev ? ', ' : '') + lookup(mant, false, false) + ' ' + magnitudes[mag - 1];\n if (remainder > 0) {\n words += lookup(remainder, true, ord);\n } else if (ord) {\n words += 'th';\n }\n }\n return words;\n };\n\n var words = lookup(value, false, ordinal);\n return words;\n }\n\n const wordValues = {};\n few.forEach(function (word, index) {\n wordValues[word.toLowerCase()] = index;\n });\n ordinals.forEach(function (word, index) {\n wordValues[word.toLowerCase()] = index;\n });\n decades.forEach(function (word, index) {\n const lword = word.toLowerCase();\n wordValues[lword] = (index + 2) * 10;\n wordValues[lword.substring(0, word.length - 1) + 'ieth'] = wordValues[lword];\n });\n wordValues.hundredth = 100;\n magnitudes.forEach(function (word, index) {\n const lword = word.toLowerCase();\n const val = Math.pow(10, (index + 1) * 3);\n wordValues[lword] = val;\n wordValues[lword + 'th'] = val;\n });\n\n /**\n * Converts a number in english words to numeric value\n * @param {string} text - the number in words\n * @returns {number} - the numeric value\n */\n function wordsToNumber(text) {\n const parts = text.split(/,\\s|\\sand\\s|[\\s\\\\-]/);\n const values = parts.map(part => wordValues[part]);\n let segs = [0];\n values.forEach(value => {\n if (value < 100) {\n let top = segs.pop();\n if (top >= 1000) {\n segs.push(top);\n top = 0;\n }\n segs.push(top + value);\n } else {\n segs.push(segs.pop() * value);\n }\n });\n const result = segs.reduce((a, b) => a + b, 0);\n return result;\n }\n\n const romanNumerals = [\n [1000, 'm'],\n [900, 'cm'],\n [500, 'd'],\n [400, 'cd'],\n [100, 'c'],\n [90, 'xc'],\n [50, 'l'],\n [40, 'xl'],\n [10, 'x'],\n [9, 'ix'],\n [5, 'v'],\n [4, 'iv'],\n [1, 'i']\n ];\n\n const romanValues = {'M': 1000, 'D': 500, 'C': 100, 'L': 50, 'X': 10, 'V': 5, 'I': 1};\n\n /**\n * converts a number to roman numerals\n * @param {number} value - the number\n * @returns {string} - the number in roman numerals\n */\n function decimalToRoman(value) {\n for (var index = 0; index < romanNumerals.length; index++) {\n const numeral = romanNumerals[index];\n if (value >= numeral[0]) {\n return numeral[1] + decimalToRoman(value - numeral[0]);\n }\n }\n return '';\n }\n\n /**\n * converts roman numerals to a number\n * @param {string} roman - roman number\n * @returns {number} - the numeric value\n */\n function romanToDecimal(roman) {\n var decimal = 0;\n var max = 1;\n for (var i = roman.length - 1; i >= 0; i--) {\n const digit = roman[i];\n const value = romanValues[digit];\n if (value < max) {\n decimal -= value;\n } else {\n max = value;\n decimal += value;\n }\n }\n return decimal;\n }\n\n /**\n * converts a number to spreadsheet style letters\n * @param {number} value - the number\n * @param {string} aChar - the character representing the start of the sequence, e.g. 'A'\n * @returns {string} - the letters\n */\n function decimalToLetters(value, aChar) {\n var letters = [];\n var aCode = aChar.charCodeAt(0);\n while (value > 0) {\n letters.unshift(String.fromCharCode((value - 1) % 26 + aCode));\n value = Math.floor((value - 1) / 26);\n }\n return letters.join('');\n }\n\n /**\n * converts spreadsheet style letters to a number\n * @param {string} letters - the letters\n * @param {string} aChar - the character representing the start of the sequence, e.g. 'A'\n * @returns {number} - the numeric value\n */\n function lettersToDecimal(letters, aChar) {\n var aCode = aChar.charCodeAt(0);\n var decimal = 0;\n for (var i = 0; i < letters.length; i++) {\n decimal += (letters.charCodeAt(letters.length - i - 1) - aCode + 1) * Math.pow(26, i);\n }\n return decimal;\n }\n\n /**\n * Formats an integer as specified by the XPath fn:format-integer function\n * See https://www.w3.org/TR/xpath-functions-31/#func-format-integer\n * @param {number} value - the number to be formatted\n * @param {string} picture - the picture string that specifies the format\n * @returns {string} - the formatted number\n */\n function formatInteger(value, picture) {\n if (typeof value === 'undefined') {\n return undefined;\n }\n\n value = Math.floor(value);\n\n const format = analyseIntegerPicture(picture);\n return _formatInteger(value, format);\n }\n\n const formats = {\n DECIMAL: 'decimal',\n LETTERS: 'letters',\n ROMAN: 'roman',\n WORDS: 'words',\n SEQUENCE: 'sequence'\n };\n\n const tcase = {\n UPPER: 'upper',\n LOWER: 'lower',\n TITLE: 'title'\n };\n\n /**\n * formats an integer using a preprocessed representation of the picture string\n * @param {number} value - the number to be formatted\n * @param {object} format - the preprocessed representation of the pucture string\n * @returns {string} - the formatted number\n * @private\n */\n function _formatInteger(value, format) {\n let formattedInteger;\n const negative = value < 0;\n value = Math.abs(value);\n switch (format.primary) {\n case formats.LETTERS:\n formattedInteger = decimalToLetters(value, format.case === tcase.UPPER ? 'A' : 'a');\n break;\n case formats.ROMAN:\n formattedInteger = decimalToRoman(value);\n if (format.case === tcase.UPPER) {\n formattedInteger = formattedInteger.toUpperCase();\n }\n break;\n case formats.WORDS:\n formattedInteger = numberToWords(value, format.ordinal);\n if (format.case === tcase.UPPER) {\n formattedInteger = formattedInteger.toUpperCase();\n } else if (format.case === tcase.LOWER) {\n formattedInteger = formattedInteger.toLowerCase();\n }\n break;\n case formats.DECIMAL:\n formattedInteger = '' + value;\n // TODO use functionPad\n var padLength = format.mandatoryDigits - formattedInteger.length;\n if (padLength > 0) {\n var padding = (new Array(padLength + 1)).join('0');\n formattedInteger = padding + formattedInteger;\n }\n if (format.zeroCode !== 0x30) {\n formattedInteger = stringToArray(formattedInteger).map(code => {\n return String.fromCodePoint(code.codePointAt(0) + format.zeroCode - 0x30);\n }).join('');\n }\n // insert the grouping-separator-signs, if any\n if (format.regular) {\n const n = Math.floor((formattedInteger.length - 1) / format.groupingSeparators.position);\n for (let ii = n; ii > 0; ii--) {\n const pos = formattedInteger.length - ii * format.groupingSeparators.position;\n formattedInteger = formattedInteger.substr(0, pos) + format.groupingSeparators.character + formattedInteger.substr(pos);\n }\n } else {\n format.groupingSeparators.reverse().forEach(separator => {\n const pos = formattedInteger.length - separator.position;\n formattedInteger = formattedInteger.substr(0, pos) + separator.character + formattedInteger.substr(pos);\n });\n }\n\n if (format.ordinal) {\n var suffix123 = {'1': 'st', '2': 'nd', '3': 'rd'};\n var lastDigit = formattedInteger[formattedInteger.length - 1];\n var suffix = suffix123[lastDigit];\n if (!suffix || (formattedInteger.length > 1 && formattedInteger[formattedInteger.length - 2] === '1')) {\n suffix = 'th';\n }\n formattedInteger = formattedInteger + suffix;\n }\n break;\n case formats.SEQUENCE:\n throw {\n code: 'D3130',\n value: format.token\n };\n }\n if (negative) {\n formattedInteger = '-' + formattedInteger;\n }\n\n return formattedInteger;\n }\n\n //TODO what about decimal groups in the unicode supplementary planes (surrogate pairs) ???\n const decimalGroups = [0x30, 0x0660, 0x06F0, 0x07C0, 0x0966, 0x09E6, 0x0A66, 0x0AE6, 0x0B66, 0x0BE6, 0x0C66, 0x0CE6, 0x0D66, 0x0DE6, 0x0E50, 0x0ED0, 0x0F20, 0x1040, 0x1090, 0x17E0, 0x1810, 0x1946, 0x19D0, 0x1A80, 0x1A90, 0x1B50, 0x1BB0, 0x1C40, 0x1C50, 0xA620, 0xA8D0, 0xA900, 0xA9D0, 0xA9F0, 0xAA50, 0xABF0, 0xFF10];\n\n /**\n * preprocesses the picture string\n * @param {string} picture - picture string\n * @returns {{type: string, primary: string, case: string, ordinal: boolean}} - analysed picture\n */\n function analyseIntegerPicture(picture) {\n const format = {\n type: 'integer',\n primary: formats.DECIMAL,\n case: tcase.LOWER,\n ordinal: false\n };\n\n let primaryFormat, formatModifier;\n const semicolon = picture.lastIndexOf(';');\n if (semicolon === -1) {\n primaryFormat = picture;\n } else {\n primaryFormat = picture.substring(0, semicolon);\n formatModifier = picture.substring(semicolon + 1);\n if (formatModifier[0] === 'o') {\n format.ordinal = true;\n }\n }\n\n /* eslnt-disable-next no-fallthrough */\n switch (primaryFormat) {\n case 'A':\n format.case = tcase.UPPER;\n /* eslnt-disable-next-line no-fallthrough */\n case 'a':\n format.primary = formats.LETTERS;\n break;\n case 'I':\n format.case = tcase.UPPER;\n /* eslnt-disable-next-line no-fallthrough */\n case 'i':\n format.primary = formats.ROMAN;\n break;\n case 'W':\n format.case = tcase.UPPER;\n format.primary = formats.WORDS;\n break;\n case 'Ww':\n format.case = tcase.TITLE;\n format.primary = formats.WORDS;\n break;\n case 'w':\n format.primary = formats.WORDS;\n break;\n default: {\n // this is a decimal-digit-pattern if it contains a decimal digit (from any unicode decimal digit group)\n let zeroCode = null;\n let mandatoryDigits = 0;\n let optionalDigits = 0;\n let groupingSeparators = [];\n let separatorPosition = 0;\n const formatCodepoints = stringToArray(primaryFormat).map(c => c.codePointAt(0)).reverse(); // reverse the array to determine positions of grouping-separator-signs\n formatCodepoints.forEach((codePoint) => {\n // step though each char in the picture to determine the digit group\n let digit = false;\n for (let ii = 0; ii < decimalGroups.length; ii++) {\n const group = decimalGroups[ii];\n if (codePoint >= group && codePoint <= group + 9) {\n // codepoint is part of this decimal group\n digit = true;\n mandatoryDigits++;\n separatorPosition++;\n if (zeroCode === null) {\n zeroCode = group;\n } else if (group !== zeroCode) {\n // error! different decimal groups in the same pattern\n throw {\n code: 'D3131'\n };\n }\n break;\n }\n }\n if (!digit) {\n if (codePoint === 0x23) { // # - optional-digit-sign\n separatorPosition++;\n optionalDigits++;\n } else {\n // neither a decimal-digit-sign ot optional-digit-sign, assume it is a grouping-separator-sign\n groupingSeparators.push({\n position: separatorPosition,\n character: String.fromCodePoint(codePoint)\n });\n }\n }\n });\n if (mandatoryDigits > 0) {\n format.primary = formats.DECIMAL;\n // TODO validate decimal-digit-pattern\n\n // the decimal digit family (codepoint offset)\n format.zeroCode = zeroCode;\n // the number of mandatory digits\n format.mandatoryDigits = mandatoryDigits;\n // the number of optional digits\n format.optionalDigits = optionalDigits;\n // grouping separator template\n // are the grouping-separator-signs 'regular'?\n const regularRepeat = function (separators) {\n // are the grouping positions regular? i.e. same interval between each of them\n // is there at least one separator?\n if (separators.length === 0) {\n return 0;\n }\n // are all the characters the same?\n const sepChar = separators[0].character;\n for (let ii = 1; ii < separators.length; ii++) {\n if (separators[ii].character !== sepChar) {\n return 0;\n }\n }\n // are they equally spaced?\n const indexes = separators.map(separator => separator.position);\n const gcd = function (a, b) {\n return b === 0 ? a : gcd(b, a % b);\n };\n // find the greatest common divisor of all the positions\n const factor = indexes.reduce(gcd);\n // is every position separated by this divisor? If so, it's regular\n for (let index = 1; index <= indexes.length; index++) {\n if (indexes.indexOf(index * factor) === -1) {\n return 0;\n }\n }\n return factor;\n };\n\n const regular = regularRepeat(groupingSeparators);\n if (regular > 0) {\n format.regular = true;\n format.groupingSeparators = {\n position: regular,\n character: groupingSeparators[0].character\n };\n } else {\n format.regular = false;\n format.groupingSeparators = groupingSeparators;\n }\n\n } else {\n // this is a 'numbering sequence' which the spec says is implementation-defined\n // this implementation doesn't support any numbering sequences at the moment.\n format.primary = formats.SEQUENCE;\n format.token = primaryFormat;\n }\n }\n }\n\n return format;\n }\n\n const defaultPresentationModifiers = {\n Y: '1', M: '1', D: '1', d: '1', F: 'n', W: '1', w: '1', X: '1', x: '1', H: '1', h: '1',\n P: 'n', m: '01', s: '01', f: '1', Z: '01:01', z: '01:01', C: 'n', E: 'n'\n };\n\n // §9.8.4.1 the format specifier is an array of string literals and variable markers\n /**\n * analyse the date-time picture string\n * @param {string} picture - picture string\n * @returns {{type: string, parts: Array}} - the analysed string\n */\n function analyseDateTimePicture(picture) {\n var spec = [];\n const format = {\n type: 'datetime',\n parts: spec\n };\n const addLiteral = function (start, end) {\n if (end > start) {\n let literal = picture.substring(start, end);\n // replace any doubled ]] with single ]\n // what if there are instances of single ']' ? - the spec doesn't say\n literal = literal.split(']]').join(']');\n spec.push({type: 'literal', value: literal});\n }\n };\n\n var start = 0, pos = 0;\n while (pos < picture.length) {\n if (picture.charAt(pos) === '[') {\n // check it's not a doubled [[\n if (picture.charAt(pos + 1) === '[') {\n // literal [\n addLiteral(start, pos);\n spec.push({type: 'literal', value: '['});\n pos += 2;\n start = pos;\n continue;\n }\n // start of variable marker\n // push the string literal (if there is one) onto the array\n addLiteral(start, pos);\n start = pos;\n // search forward to closing ]\n pos = picture.indexOf(']', start);\n // TODO handle error case if pos === -1\n if(pos === -1) {\n // error - no closing bracket\n throw {\n code: 'D3135'\n };\n }\n let marker = picture.substring(start + 1, pos);\n // whitespace within a variable marker is ignored (i.e. remove it)\n marker = marker.split(/\\s+/).join('');\n var def = {\n type: 'marker',\n component: marker.charAt(0) // 1. The component specifier is always present and is always a single letter.\n };\n var comma = marker.lastIndexOf(','); // 2. The width modifier may be recognized by the presence of a comma\n var presMod; // the presentation modifiers\n if (comma !== -1) {\n // §9.8.4.2 The Width Modifier\n const widthMod = marker.substring(comma + 1);\n const dash = widthMod.indexOf('-');\n let min, max;\n const parseWidth = function (wm) {\n if (typeof wm === 'undefined' || wm === '*') {\n return undefined;\n } else {\n // TODO validate wm is an unsigned int\n return parseInt(wm);\n }\n };\n if (dash === -1) {\n min = widthMod;\n } else {\n min = widthMod.substring(0, dash);\n max = widthMod.substring(dash + 1);\n }\n const widthDef = {\n min: parseWidth(min),\n max: parseWidth(max)\n };\n def.width = widthDef;\n presMod = marker.substring(1, comma);\n } else {\n presMod = marker.substring(1);\n }\n if (presMod.length === 1) {\n def.presentation1 = presMod; // first presentation modifier\n //TODO validate the first presentation modifier - it's either N, n, Nn or it passes analyseIntegerPicture\n } else if (presMod.length > 1) {\n var lastChar = presMod.charAt(presMod.length - 1);\n if ('atco'.indexOf(lastChar) !== -1) {\n def.presentation2 = lastChar;\n if (lastChar === 'o') {\n def.ordinal = true;\n }\n // 'c' means 'cardinal' and is the default (i.e. not 'ordinal')\n // 'a' & 't' are ignored (not sure of their relevance to English numbering)\n def.presentation1 = presMod.substring(0, presMod.length - 1);\n } else {\n def.presentation1 = presMod;\n //TODO validate the first presentation modifier - it's either N, n, Nn or it passes analyseIntegerPicture,\n // doesn't use ] as grouping separator, and if grouping separator is , then must have width modifier\n }\n } else {\n // no presentation modifier specified - apply the default;\n def.presentation1 = defaultPresentationModifiers[def.component];\n }\n if (typeof def.presentation1 === 'undefined') {\n // unknown component specifier\n throw {\n code: 'D3132',\n value: def.component\n };\n }\n if (def.presentation1[0] === 'n') {\n def.names = tcase.LOWER;\n } else if (def.presentation1[0] === 'N') {\n if (def.presentation1[1] === 'n') {\n def.names = tcase.TITLE;\n } else {\n def.names = tcase.UPPER;\n }\n } else if ('YMDdFWwXxHhmsf'.indexOf(def.component) !== -1) {\n var integerPattern = def.presentation1;\n if (def.presentation2) {\n integerPattern += ';' + def.presentation2;\n }\n def.integerFormat = analyseIntegerPicture(integerPattern);\n if (def.width && def.width.min !== undefined) {\n if (def.integerFormat.mandatoryDigits < def.width.min) {\n def.integerFormat.mandatoryDigits = def.width.min;\n }\n }\n if (def.component === 'Y') {\n // §9.8.4.4\n def.n = -1;\n if (def.width && def.width.max !== undefined) {\n def.n = def.width.max;\n def.integerFormat.mandatoryDigits = def.n;\n } else {\n var w = def.integerFormat.mandatoryDigits + def.integerFormat.optionalDigits;\n if (w >= 2) {\n def.n = w;\n }\n }\n }\n // if the previous part is also an integer with no intervening markup, then its width for parsing must be precisely defined\n const previousPart = spec[spec.length - 1];\n if (previousPart && previousPart.integerFormat) {\n previousPart.integerFormat.parseWidth = previousPart.integerFormat.mandatoryDigits;\n }\n }\n if (def.component === 'Z' || def.component === 'z') {\n def.integerFormat = analyseIntegerPicture(def.presentation1);\n }\n spec.push(def);\n start = pos + 1;\n }\n pos++;\n }\n addLiteral(start, pos);\n return format;\n }\n\n const days = ['', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\n const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n const millisInADay = 1000 * 60 * 60 * 24;\n\n const startOfFirstWeek = function (ym) {\n // ISO 8601 defines the first week of the year to be the week that contains the first Thursday\n // XPath F&O extends this same definition for the first week of a month\n // the week starts on a Monday - calculate the millis for the start of the first week\n // millis for given 1st Jan of that year (at 00:00 UTC)\n const jan1 = Date.UTC(ym.year, ym.month);\n var dayOfJan1 = (new Date(jan1)).getUTCDay();\n if (dayOfJan1 === 0) {\n dayOfJan1 = 7;\n }\n // if Jan 1 is Fri, Sat or Sun, then add the number of days (in millis) to jan1 to get the start of week 1\n return dayOfJan1 > 4 ? jan1 + (8 - dayOfJan1) * millisInADay : jan1 - (dayOfJan1 - 1) * millisInADay;\n };\n\n const yearMonth = function (year, month) {\n return {\n year: year,\n month: month,\n nextMonth: function () {\n return (month === 11) ? yearMonth(year + 1, 0) : yearMonth(year, month + 1);\n },\n previousMonth: function () {\n return (month === 0) ? yearMonth(year - 1, 11) : yearMonth(year, month - 1);\n },\n nextYear: function () {\n return yearMonth(year + 1, month);\n },\n previousYear: function () {\n return yearMonth(year - 1, month);\n }\n };\n };\n\n const deltaWeeks = function (start, end) {\n return (end - start) / (millisInADay * 7) + 1;\n };\n\n const getDateTimeFragment = (date, component) => {\n let componentValue;\n switch (component) {\n case 'Y': // year\n componentValue = date.getUTCFullYear();\n break;\n case 'M': // month in year\n componentValue = date.getUTCMonth() + 1;\n break;\n case 'D': // day in month\n componentValue = date.getUTCDate();\n break;\n case 'd': { // day in year\n // millis for given date (at 00:00 UTC)\n const today = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n // millis for given 1st Jan of that year (at 00:00 UTC)\n const firstJan = Date.UTC(date.getUTCFullYear(), 0);\n componentValue = (today - firstJan) / millisInADay + 1;\n break;\n }\n case 'F': // day of week\n componentValue = date.getUTCDay();\n if (componentValue === 0) {\n // ISO 8601 defines days 1-7: Mon-Sun\n componentValue = 7;\n }\n break;\n case 'W': { // week in year\n const thisYear = yearMonth(date.getUTCFullYear(), 0);\n const startOfWeek1 = startOfFirstWeek(thisYear);\n const today = Date.UTC(thisYear.year, date.getUTCMonth(), date.getUTCDate());\n let week = deltaWeeks(startOfWeek1, today);\n if (week > 52) {\n // might be first week of the following year\n const startOfFollowingYear = startOfFirstWeek(thisYear.nextYear());\n if (today >= startOfFollowingYear) {\n week = 1;\n }\n } else if (week < 1) {\n // must be end of the previous year\n const startOfPreviousYear = startOfFirstWeek(thisYear.previousYear());\n week = deltaWeeks(startOfPreviousYear, today);\n }\n componentValue = Math.floor(week);\n break;\n }\n case 'w': { // week in month\n const thisMonth = yearMonth(date.getUTCFullYear(), date.getUTCMonth());\n const startOfWeek1 = startOfFirstWeek(thisMonth);\n const today = Date.UTC(thisMonth.year, thisMonth.month, date.getUTCDate());\n let week = deltaWeeks(startOfWeek1, today);\n if (week > 4) {\n // might be first week of the following month\n const startOfFollowingMonth = startOfFirstWeek(thisMonth.nextMonth());\n if (today >= startOfFollowingMonth) {\n week = 1;\n }\n } else if (week < 1) {\n // must be end of the previous month\n const startOfPreviousMonth = startOfFirstWeek(thisMonth.previousMonth());\n week = deltaWeeks(startOfPreviousMonth, today);\n }\n componentValue = Math.floor(week);\n break;\n }\n case 'X': { // ISO week-numbering year\n // Extension: The F&O spec says nothing about how to access the year associated with the week-of-the-year\n // e.g. Sat 1 Jan 2005 is in the 53rd week of 2004.\n // The 'W' component specifier gives 53, but 'Y' will give 2005.\n // I propose to add 'X' as the component specifier to give the ISO week-numbering year (2004 in this example)\n const thisYear = yearMonth(date.getUTCFullYear(), 0);\n const startOfISOYear = startOfFirstWeek(thisYear);\n const endOfISOYear = startOfFirstWeek(thisYear.nextYear());\n const now = date.getTime();\n if (now < startOfISOYear) {\n componentValue = thisYear.year - 1;\n } else if (now >= endOfISOYear) {\n componentValue = thisYear.year + 1;\n } else {\n componentValue = thisYear.year;\n }\n break;\n }\n case 'x': { // ISO week-numbering month\n // Extension: The F&O spec says nothing about how to access the month associated with the week-of-the-month\n // e.g. Sat 1 Jan 2005 is in the 5th week of December 2004.\n // The 'w' component specifier gives 5, but 'W' will give January and 'Y' will give 2005.\n // I propose to add 'x' as the component specifier to give the 'week-numbering' month (December in this example)\n const thisMonth = yearMonth(date.getUTCFullYear(), date.getUTCMonth());\n const startOfISOMonth = startOfFirstWeek(thisMonth);\n const nextMonth = thisMonth.nextMonth();\n const endOfISOMonth = startOfFirstWeek(nextMonth);\n const now = date.getTime();\n if (now < startOfISOMonth) {\n componentValue = thisMonth.previousMonth().month + 1;\n } else if (now >= endOfISOMonth) {\n componentValue = nextMonth.month + 1;\n } else {\n componentValue = thisMonth.month + 1;\n }\n break;\n }\n case 'H': // hour in day (24 hours)\n componentValue = date.getUTCHours();\n break;\n case 'h': // hour in half-day (12 hours)\n componentValue = date.getUTCHours();\n componentValue = componentValue % 12;\n if (componentValue === 0) {\n componentValue = 12;\n }\n break;\n case 'P': // am/pm marker\n componentValue = date.getUTCHours() >= 12 ? 'pm' : 'am';\n break;\n case 'm': // minute in hour\n componentValue = date.getUTCMinutes();\n break;\n case 's': // second in minute\n componentValue = date.getUTCSeconds();\n break;\n case 'f': // fractional seconds\n componentValue = date.getUTCMilliseconds();\n break;\n case 'Z': // timezone\n case 'z':\n // since the date object is constructed from epoch millis, the TZ component is always be UTC.\n break;\n case 'C': // calendar name\n componentValue = 'ISO';\n break;\n case 'E': // era\n componentValue = 'ISO';\n break;\n }\n return componentValue;\n };\n\n let iso8601Spec = null;\n\n /**\n * formats the date/time as specified by the XPath fn:format-dateTime function\n * @param {number} millis - the timestamp to be formatted, in millis since the epoch\n * @param {string} picture - the picture string that specifies the format\n * @param {string} timezone - the timezone to use\n * @returns {string} - the formatted timestamp\n */\n function formatDateTime(millis, picture, timezone) {\n var offsetHours = 0;\n var offsetMinutes = 0;\n\n if (typeof timezone !== 'undefined') {\n // parse the hour and minute offsets\n // assume for now the format supplied is +hhmm\n const offset = parseInt(timezone);\n offsetHours = Math.floor(offset / 100);\n offsetMinutes = offset % 100;\n }\n\n var formatComponent = function (date, markerSpec) {\n var componentValue = getDateTimeFragment(date, markerSpec.component);\n\n // §9.8.4.3 Formatting Integer-Valued Date/Time Components\n if ('YMDdFWwXxHhms'.indexOf(markerSpec.component) !== -1) {\n if (markerSpec.component === 'Y') {\n // §9.8.4.4 Formatting the Year Component\n if (markerSpec.n !== -1) {\n componentValue = componentValue % Math.pow(10, markerSpec.n);\n }\n }\n if (markerSpec.names) {\n if (markerSpec.component === 'M' || markerSpec.component === 'x') {\n componentValue = months[componentValue - 1];\n } else if (markerSpec.component === 'F') {\n componentValue = days[componentValue];\n } else {\n throw {\n code: 'D3133',\n value: markerSpec.component\n };\n }\n if (markerSpec.names === tcase.UPPER) {\n componentValue = componentValue.toUpperCase();\n } else if (markerSpec.names === tcase.LOWER) {\n componentValue = componentValue.toLowerCase();\n }\n if (markerSpec.width && componentValue.length > markerSpec.width.max) {\n componentValue = componentValue.substring(0, markerSpec.width.max);\n }\n } else {\n componentValue = _formatInteger(componentValue, markerSpec.integerFormat);\n }\n } else if (markerSpec.component === 'f') {\n // TODO §9.8.4.5 Formatting Fractional Seconds\n componentValue = _formatInteger(componentValue, markerSpec.integerFormat);\n } else if (markerSpec.component === 'Z' || markerSpec.component === 'z') {\n // §9.8.4.6 Formatting timezones\n const offset = offsetHours * 100 + offsetMinutes;\n if (markerSpec.integerFormat.regular) {\n componentValue = _formatInteger(offset, markerSpec.integerFormat);\n } else {\n const numDigits = markerSpec.integerFormat.mandatoryDigits;\n if (numDigits === 1 || numDigits === 2) {\n componentValue = _formatInteger(offsetHours, markerSpec.integerFormat);\n if (offsetMinutes !== 0) {\n componentValue += ':' + formatInteger(offsetMinutes, '00');\n }\n } else if (numDigits === 3 || numDigits === 4) {\n componentValue = _formatInteger(offset, markerSpec.integerFormat);\n } else {\n throw {\n code: 'D3134',\n value: numDigits\n };\n }\n }\n if (offset >= 0) {\n componentValue = '+' + componentValue;\n }\n if (markerSpec.component === 'z') {\n componentValue = 'GMT' + componentValue;\n }\n if (offset === 0 && markerSpec.presentation2 === 't') {\n componentValue = 'Z';\n }\n } else if (markerSpec.component === 'P') {\n // §9.8.4.7 Formatting Other Components\n // Formatting P for am/pm\n // getDateTimeFragment() always returns am/pm lower case so check for UPPER here\n if (markerSpec.names === tcase.UPPER) {\n componentValue = componentValue.toUpperCase();\n }\n }\n return componentValue;\n };\n\n let formatSpec;\n if(typeof picture === 'undefined') {\n // default to ISO 8601 format\n if (iso8601Spec === null) {\n iso8601Spec = analyseDateTimePicture('[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01].[f001][Z01:01t]');\n }\n formatSpec = iso8601Spec;\n } else {\n formatSpec = analyseDateTimePicture(picture);\n }\n\n const offsetMillis = (60 * offsetHours + offsetMinutes) * 60 * 1000;\n const dateTime = new Date(millis + offsetMillis);\n\n let result = '';\n formatSpec.parts.forEach(function (part) {\n if (part.type === 'literal') {\n result += part.value;\n } else {\n result += formatComponent(dateTime, part);\n }\n });\n\n return result;\n }\n\n /**\n * Generate a regex to parse integers or timestamps\n * @param {object} formatSpec - object representing the format\n * @returns {object} - regex\n */\n function generateRegex(formatSpec) {\n var matcher = {};\n if (formatSpec.type === 'datetime') {\n matcher.type = 'datetime';\n matcher.parts = formatSpec.parts.map(function (part) {\n var res = {};\n if (part.type === 'literal') {\n res.regex = part.value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n } else if (part.component === 'Z' || part.component === 'z') {\n // timezone\n let separator;\n if (!Array.isArray(part.integerFormat.groupingSeparators)) {\n separator = part.integerFormat.groupingSeparators;\n }\n res.regex = '';\n if (part.component === 'z') {\n res.regex = 'GMT';\n }\n res.regex += '[-+][0-9]+';\n if (separator) {\n res.regex += separator.character + '[0-9]+';\n }\n res.parse = function(value) {\n if (part.component === 'z') {\n value = value.substring(3); // remove the leading GMT\n }\n let offsetHours = 0, offsetMinutes = 0;\n if (separator) {\n offsetHours = Number.parseInt(value.substring(0, value.indexOf(separator.character)));\n offsetMinutes = Number.parseInt(value.substring(value.indexOf(separator.character) + 1));\n } else {\n // depends on number of digits\n const numdigits = value.length - 1;\n if (numdigits <= 2) {\n // just hour offset\n offsetHours = Number.parseInt(value);\n } else {\n offsetHours = Number.parseInt(value.substring(0, 3));\n offsetMinutes = Number.parseInt(value.substring(3));\n }\n }\n return offsetHours * 60 + offsetMinutes;\n };\n } else if (part.integerFormat) {\n res = generateRegex(part.integerFormat);\n } else {\n // must be a month or day name\n res.regex = '[a-zA-Z]+';\n var lookup = {};\n if (part.component === 'M' || part.component === 'x') {\n // months\n months.forEach(function (name, index) {\n if (part.width && part.width.max) {\n lookup[name.substring(0, part.width.max)] = index + 1;\n } else {\n lookup[name] = index + 1;\n }\n });\n } else if (part.component === 'F') {\n // days\n days.forEach(function (name, index) {\n if (index > 0) {\n if (part.width && part.width.max) {\n lookup[name.substring(0, part.width.max)] = index;\n } else {\n lookup[name] = index;\n }\n }\n });\n } else if (part.component === 'P') {\n lookup = {'am': 0, 'AM': 0, 'pm': 1, 'PM': 1};\n } else {\n // unsupported 'name' option for this component\n throw {\n code: 'D3133',\n value: part.component\n };\n }\n res.parse = function (value) {\n return lookup[value];\n };\n }\n res.component = part.component;\n return res;\n });\n } else { // type === 'integer'\n matcher.type = 'integer';\n const isUpper = formatSpec.case === tcase.UPPER;\n\n switch (formatSpec.primary) {\n case formats.LETTERS:\n matcher.regex = isUpper ? '[A-Z]+' : '[a-z]+';\n matcher.parse = function (value) {\n return lettersToDecimal(value, isUpper ? 'A' : 'a');\n };\n break;\n case formats.ROMAN:\n matcher.regex = isUpper ? '[MDCLXVI]+' : '[mdclxvi]+';\n matcher.parse = function (value) {\n return romanToDecimal(isUpper ? value : value.toUpperCase());\n };\n break;\n case formats.WORDS:\n matcher.regex = '(?:' + Object.keys(wordValues).concat('and', '[\\\\-, ]').join('|') + ')+';\n matcher.parse = function (value) {\n return wordsToNumber(value.toLowerCase());\n };\n break;\n case formats.DECIMAL:\n matcher.regex = '[0-9]';\n if (formatSpec.parseWidth) {\n matcher.regex += `{${formatSpec.parseWidth}}`;\n } else {\n matcher.regex += '+';\n }\n if (formatSpec.ordinal) {\n // ordinals\n matcher.regex += '(?:th|st|nd|rd)';\n }\n matcher.parse = function (value) {\n let digits = value;\n if (formatSpec.ordinal) {\n // strip off the suffix\n digits = value.substring(0, value.length - 2);\n }\n // strip out the separators\n if (formatSpec.regular) {\n digits = digits.split(',').join('');\n } else {\n formatSpec.groupingSeparators.forEach(sep => {\n digits = digits.split(sep.character).join('');\n });\n }\n if (formatSpec.zeroCode !== 0x30) {\n // apply offset\n digits = digits.split('').map(char => String.fromCodePoint(char.codePointAt(0) - formatSpec.zeroCode + 0x30)).join('');\n }\n return parseInt(digits);\n };\n break;\n case formats.SEQUENCE:\n throw {\n code: 'D3130',\n value: formatSpec.token\n };\n }\n\n }\n return matcher;\n }\n\n /**\n * parse a string containing an integer as specified by the picture string\n * @param {string} value - the string to parse\n * @param {string} picture - the picture string\n * @returns {number} - the parsed number\n */\n function parseInteger(value, picture) {\n if (typeof value === 'undefined') {\n return undefined;\n }\n\n const formatSpec = analyseIntegerPicture(picture);\n const matchSpec = generateRegex(formatSpec);\n //const fullRegex = '^' + matchSpec.regex + '$';\n //const matcher = new RegExp(fullRegex);\n // TODO validate input based on the matcher regex\n const result = matchSpec.parse(value);\n return result;\n }\n\n /**\n * parse a string containing a timestamp as specified by the picture string\n * @param {string} timestamp - the string to parse\n * @param {string} picture - the picture string\n * @returns {number} - the parsed timestamp in millis since the epoch\n */\n function parseDateTime(timestamp, picture) {\n const formatSpec = analyseDateTimePicture(picture);\n const matchSpec = generateRegex(formatSpec);\n const fullRegex = '^' + matchSpec.parts.map(part => '(' + part.regex + ')').join('') + '$';\n\n const matcher = new RegExp(fullRegex, 'i'); // TODO can cache this against the picture\n var info = matcher.exec(timestamp);\n if (info !== null) {\n // validate what we've just parsed - do we have enough information to create a timestamp?\n // rules:\n // The date is specified by one of:\n // {Y, M, D} (dateA)\n // or {Y, d} (dateB)\n // or {Y, x, w, F} (dateC)\n // or {X, W, F} (dateD)\n // The time is specified by one of:\n // {H, m, s, f} (timeA)\n // or {P, h, m, s, f} (timeB)\n // All sets can have an optional Z\n // To create a timestamp (epoch millis) we need both date and time, but we can default missing\n // information according to the following rules:\n // - line up one combination of the above from date, and one from time, most significant value (MSV) to least significant (LSV\n // - for the values that have been captured, if there are any gaps between MSV and LSV, then throw an error\n // (e.g.) if hour and seconds, but not minutes is given - throw\n // (e.g.) if month, hour and minutes, but not day-of-month is given - throw\n // - anything right of the LSV should be defaulted to zero\n // (e.g.) if hour and minutes given, default seconds and fractional seconds to zero\n // (e.g.) if date only given, default the time to 0:00:00.000 (midnight)\n // - anything left of the MSV should be defaulted to the value of that component returned by $now()\n // (e.g.) if time only given, default the date to today\n // (e.g.) if month and date given, default to this year (and midnight, by previous rule)\n // -- default values for X, x, W, w, F will be derived from the values returned by $now()\n\n // implement the above rules\n // determine which of the above date/time combinations we have by using bit masks\n\n // Y X M x W w d D F P H h m s f Z\n // dateA 1 0 1 0 0 0 0 1 ? 0 - must not appear\n // dateB 1 0 0 0 0 0 1 0 ? 1 - can appear - relevant\n // dateC 0 1 0 1 0 1 0 0 1 ? - can appear - ignored\n // dateD 0 1 0 0 1 0 0 0 1\n // timeA 0 1 0 1 1 1\n // timeB 1 0 1 1 1 1\n\n // create bitmasks based on the above\n // date mask YXMxWwdD\n const dmA = 161; // binary 10100001\n const dmB = 130; // binary 10000010\n const dmC = 84; // binary 01010100\n const dmD = 72; // binary 01001000\n // time mask PHhmsf\n const tmA = 23; // binary 010111\n const tmB = 47; // binary 101111\n\n const components = {};\n for (let i = 1; i < info.length; i++) {\n const mpart = matchSpec.parts[i - 1];\n if (mpart.parse) {\n components[mpart.component] = mpart.parse(info[i]);\n }\n }\n\n if(Object.getOwnPropertyNames(components).length === 0) {\n // nothing specified\n return undefined;\n }\n\n let mask = 0;\n\n const shift = bit => {\n mask <<= 1;\n mask += bit ? 1 : 0;\n };\n\n const isType = type => {\n // shouldn't match any 0's, must match at least one 1\n return !(~type & mask) && !!(type & mask);\n };\n\n 'YXMxWwdD'.split('').forEach(part => shift(components[part]));\n\n const dateA = isType(dmA);\n const dateB = !dateA && isType(dmB);\n const dateC = isType(dmC);\n const dateD = !dateC && isType(dmD);\n\n mask = 0;\n 'PHhmsf'.split('').forEach(part => shift(components[part]));\n\n const timeA = isType(tmA);\n const timeB = !timeA && isType(tmB);\n\n // should only be zero or one date type and zero or one time type\n\n const dateComps = dateB ? 'YD' : dateC ? 'XxwF' : dateD? 'XWF' : 'YMD';\n const timeComps = timeB ? 'Phmsf' : 'Hmsf';\n\n const comps = dateComps + timeComps;\n\n // step through the candidate parts from most significant to least significant\n // default the most significant unspecified parts to current timestamp component\n // default the least significant unspecified parts to zero\n // if any gaps in between the specified parts, throw an error\n\n const now = this.environment.timestamp; // must get the fixed timestamp from jsonata\n\n let startSpecified = false;\n let endSpecified = false;\n comps.split('').forEach(part => {\n if(typeof components[part] === 'undefined') {\n if(startSpecified) {\n // past the specified block - default to zero\n components[part] = ('MDd'.indexOf(part) !== -1) ? 1 : 0;\n endSpecified = true;\n } else {\n // haven't hit the specified block yet, default to current timestamp\n components[part] = getDateTimeFragment(now, part);\n }\n } else {\n startSpecified = true;\n if(endSpecified) {\n throw {\n code: 'D3136'\n };\n }\n }\n });\n\n // validate and fill in components\n if (components.M > 0) {\n components.M -= 1; // Date.UTC requires a zero-indexed month\n } else {\n components.M = 0; // default to January\n }\n if (dateB) {\n // millis for given 1st Jan of that year (at 00:00 UTC)\n const firstJan = Date.UTC(components.Y, 0);\n const offsetMillis = (components.d - 1) * 1000 * 60 * 60 * 24;\n const derivedDate = new Date(firstJan + offsetMillis);\n components.M = derivedDate.getUTCMonth();\n components.D = derivedDate.getUTCDate();\n }\n if (dateC) {\n // TODO implement this\n // parsing this format not currently supported\n throw {\n code: 'D3136'\n };\n }\n if (dateD) {\n // TODO implement this\n // parsing this format (ISO week date) not currently supported\n throw {\n code: 'D3136'\n };\n }\n if (timeB) {\n // 12hr to 24hr\n components.H = components.h === 12 ? 0 : components.h;\n if (components.P === 1) {\n components.H += 12;\n }\n }\n\n var millis = Date.UTC(components.Y, components.M, components.D, components.H, components.m, components.s, components.f);\n if(components.Z || components.z) {\n // adjust for timezone\n millis -= (components.Z || components.z) * 60 * 1000;\n }\n return millis;\n }\n }\n\n // Regular expression to match an ISO 8601 formatted timestamp\n var iso8601regex = new RegExp('^\\\\d{4}(-[01]\\\\d)*(-[0-3]\\\\d)*(T[0-2]\\\\d:[0-5]\\\\d:[0-5]\\\\d)*(\\\\.\\\\d+)?([+-][0-2]\\\\d:?[0-5]\\\\d|Z)?$');\n\n /**\n * Converts an ISO 8601 timestamp to milliseconds since the epoch\n *\n * @param {string} timestamp - the timestamp to be converted\n * @param {string} [picture] - the picture string defining the format of the timestamp (defaults to ISO 8601)\n * @returns {Number} - milliseconds since the epoch\n */\n function toMillis(timestamp, picture) {\n // undefined inputs always return undefined\n if(typeof timestamp === 'undefined') {\n return undefined;\n }\n\n if(typeof picture === 'undefined') {\n if (!iso8601regex.test(timestamp)) {\n throw {\n stack: (new Error()).stack,\n code: \"D3110\",\n value: timestamp\n };\n }\n\n return Date.parse(timestamp);\n } else {\n return parseDateTime.call(this, timestamp, picture);\n }\n }\n\n /**\n * Converts milliseconds since the epoch to an ISO 8601 timestamp\n * @param {Number} millis - milliseconds since the epoch to be converted\n * @param {string} [picture] - the picture string defining the format of the timestamp (defaults to ISO 8601)\n * @param {string} [timezone] - the timezone to format the timestamp in (defaults to UTC)\n * @returns {String} - the formatted timestamp\n */\n function fromMillis(millis, picture, timezone) {\n // undefined inputs always return undefined\n if(typeof millis === 'undefined') {\n return undefined;\n }\n\n return formatDateTime.call(this, millis, picture, timezone);\n }\n\n return {\n formatInteger, parseInteger, fromMillis, toMillis\n };\n})();\n\nmodule.exports = dateTime;\n\n},{\"./utils\":6}],2:[function(require,module,exports){\n(function (global){(function (){\n/**\n * © Copyright IBM Corp. 2016, 2018 All Rights Reserved\n * Project name: JSONata\n * This project is licensed under the MIT License, see LICENSE\n */\n\nvar utils = require('./utils');\n\nconst functions = (() => {\n 'use strict';\n\n var isNumeric = utils.isNumeric;\n var isArrayOfStrings = utils.isArrayOfStrings;\n var isArrayOfNumbers = utils.isArrayOfNumbers;\n var createSequence = utils.createSequence;\n var isSequence = utils.isSequence;\n var isFunction = utils.isFunction;\n var isLambda = utils.isLambda;\n var isPromise = utils.isPromise;\n var getFunctionArity = utils.getFunctionArity;\n var deepEquals = utils.isDeepEqual;\n var stringToArray = utils.stringToArray;\n\n /**\n * Sum function\n * @param {Object} args - Arguments\n * @returns {number} Total value of arguments\n */\n function sum(args) {\n // undefined inputs always return undefined\n if (typeof args === 'undefined') {\n return undefined;\n }\n\n var total = 0;\n args.forEach(function (num) {\n total += num;\n });\n return total;\n }\n\n /**\n * Count function\n * @param {Object} args - Arguments\n * @returns {number} Number of elements in the array\n */\n function count(args) {\n // undefined inputs always return undefined\n if (typeof args === 'undefined') {\n return 0;\n }\n\n return args.length;\n }\n\n /**\n * Max function\n * @param {Object} args - Arguments\n * @returns {number} Max element in the array\n */\n function max(args) {\n // undefined inputs always return undefined\n if (typeof args === 'undefined' || args.length === 0) {\n return undefined;\n }\n\n return Math.max.apply(Math, args);\n }\n\n /**\n * Min function\n * @param {Object} args - Arguments\n * @returns {number} Min element in the array\n */\n function min(args) {\n // undefined inputs always return undefined\n if (typeof args === 'undefined' || args.length === 0) {\n return undefined;\n }\n\n return Math.min.apply(Math, args);\n }\n\n /**\n * Average function\n * @param {Object} args - Arguments\n * @returns {number} Average element in the array\n */\n function average(args) {\n // undefined inputs always return undefined\n if (typeof args === 'undefined' || args.length === 0) {\n return undefined;\n }\n\n var total = 0;\n args.forEach(function (num) {\n total += num;\n });\n return total / args.length;\n }\n\n /**\n * Stringify arguments\n * @param {Object} arg - Arguments\n * @param {boolean} [prettify] - Pretty print the result\n * @returns {String} String from arguments\n */\n function string(arg, prettify = false) {\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n var str;\n\n if (typeof arg === 'string') {\n // already a string\n str = arg;\n } else if (isFunction(arg)) {\n // functions (built-in and lambda convert to empty string\n str = '';\n } else if (typeof arg === 'number' && !isFinite(arg)) {\n throw {\n code: \"D3001\",\n value: arg,\n stack: (new Error()).stack\n };\n } else {\n var space = prettify ? 2 : 0;\n if(Array.isArray(arg) && arg.outerWrapper) {\n arg = arg[0];\n }\n str = JSON.stringify(arg, function (key, val) {\n return (typeof val !== 'undefined' && val !== null && val.toPrecision && isNumeric(val)) ? Number(val.toPrecision(15)) :\n (val && isFunction(val)) ? '' : val;\n }, space);\n }\n return str;\n }\n\n /**\n * Create substring based on character number and length\n * @param {String} str - String to evaluate\n * @param {Integer} start - Character number to start substring\n * @param {Integer} [length] - Number of characters in substring\n * @returns {string|*} Substring\n */\n function substring(str, start, length) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n var strArray = stringToArray(str);\n var strLength = strArray.length;\n\n if (strLength + start < 0) {\n start = 0;\n }\n\n if (typeof length !== 'undefined') {\n if (length <= 0) {\n return '';\n }\n var end = start >= 0 ? start + length : strLength + start + length;\n return strArray.slice(start, end).join('');\n }\n\n return strArray.slice(start).join('');\n }\n\n /**\n * Create substring up until a character\n * @param {String} str - String to evaluate\n * @param {String} chars - Character to define substring boundary\n * @returns {*} Substring\n */\n function substringBefore(str, chars) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n var pos = str.indexOf(chars);\n if (pos > -1) {\n return str.substr(0, pos);\n } else {\n return str;\n }\n }\n\n /**\n * Create substring after a character\n * @param {String} str - String to evaluate\n * @param {String} chars - Character to define substring boundary\n * @returns {*} Substring\n */\n function substringAfter(str, chars) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n var pos = str.indexOf(chars);\n if (pos > -1) {\n return str.substr(pos + chars.length);\n } else {\n return str;\n }\n }\n\n /**\n * Lowercase a string\n * @param {String} str - String to evaluate\n * @returns {string} Lowercase string\n */\n function lowercase(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n return str.toLowerCase();\n }\n\n /**\n * Uppercase a string\n * @param {String} str - String to evaluate\n * @returns {string} Uppercase string\n */\n function uppercase(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n return str.toUpperCase();\n }\n\n /**\n * length of a string\n * @param {String} str - string\n * @returns {Number} The number of characters in the string\n */\n function length(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n return stringToArray(str).length;\n }\n\n /**\n * Normalize and trim whitespace within a string\n * @param {string} str - string to be trimmed\n * @returns {string} - trimmed string\n */\n function trim(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n // normalize whitespace\n var result = str.replace(/[ \\t\\n\\r]+/gm, ' ');\n if (result.charAt(0) === ' ') {\n // strip leading space\n result = result.substring(1);\n }\n if (result.charAt(result.length - 1) === ' ') {\n // strip trailing space\n result = result.substring(0, result.length - 1);\n }\n return result;\n }\n\n /**\n * Pad a string to a minimum width by adding characters to the start or end\n * @param {string} str - string to be padded\n * @param {number} width - the minimum width; +ve pads to the right, -ve pads to the left\n * @param {string} [char] - the pad character(s); defaults to ' '\n * @returns {string} - padded string\n */\n function pad(str, width, char) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n if (typeof char === 'undefined' || char.length === 0) {\n char = ' ';\n }\n\n var result;\n width = Math.trunc(width);\n var padLength = Math.abs(width) - length(str);\n if (padLength > 0) {\n var padding = (new Array(padLength + 1)).join(char);\n if (char.length > 1) {\n padding = substring(padding, 0, padLength);\n }\n if (width > 0) {\n result = str + padding;\n } else {\n result = padding + str;\n }\n } else {\n result = str;\n }\n return result;\n }\n\n /**\n * Evaluate the matcher function against the str arg\n *\n * @param {*} matcher - matching function (native or lambda)\n * @param {string} str - the string to match against\n * @returns {object} - structure that represents the match(es)\n */\n async function evaluateMatcher(matcher, str) {\n var result = matcher.apply(this, [str]); // eslint-disable-line no-useless-call\n if(isPromise(result)) {\n result = await result;\n }\n if(result && !(typeof result.start === 'number' || result.end === 'number' || Array.isArray(result.groups) || isFunction(result.next))) {\n // the matcher function didn't return the correct structure\n throw {\n code: \"T1010\",\n stack: (new Error()).stack,\n };\n }\n return result;\n }\n\n /**\n * Tests if the str contains the token\n * @param {String} str - string to test\n * @param {String} token - substring or regex to find\n * @returns {Boolean} - true if str contains token\n */\n async function contains(str, token) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n var result;\n\n if (typeof token === 'string') {\n result = (str.indexOf(token) !== -1);\n } else {\n var matches = await evaluateMatcher(token, str);\n result = (typeof matches !== 'undefined');\n }\n\n return result;\n }\n\n /**\n * Match a string with a regex returning an array of object containing details of each match\n * @param {String} str - string\n * @param {String} regex - the regex applied to the string\n * @param {Integer} [limit] - max number of matches to return\n * @returns {Array} The array of match objects\n */\n async function match(str, regex, limit) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n // limit, if specified, must be a non-negative number\n if (limit < 0) {\n throw {\n stack: (new Error()).stack,\n value: limit,\n code: 'D3040',\n index: 3\n };\n }\n\n var result = createSequence();\n\n if (typeof limit === 'undefined' || limit > 0) {\n var count = 0;\n var matches = await evaluateMatcher(regex, str);\n if (typeof matches !== 'undefined') {\n while (typeof matches !== 'undefined' && (typeof limit === 'undefined' || count < limit)) {\n result.push({\n match: matches.match,\n index: matches.start,\n groups: matches.groups\n });\n matches = await evaluateMatcher(matches.next);\n count++;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Match a string with a regex returning an array of object containing details of each match\n * @param {String} str - string\n * @param {String} pattern - the substring/regex applied to the string\n * @param {String} replacement - text to replace the matched substrings\n * @param {Integer} [limit] - max number of matches to return\n * @returns {Array} The array of match objects\n */\n async function replace(str, pattern, replacement, limit) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n var self = this;\n\n // pattern cannot be an empty string\n if (pattern === '') {\n throw {\n code: \"D3010\",\n stack: (new Error()).stack,\n value: pattern,\n index: 2\n };\n }\n\n // limit, if specified, must be a non-negative number\n if (limit < 0) {\n throw {\n code: \"D3011\",\n stack: (new Error()).stack,\n value: limit,\n index: 4\n };\n }\n\n var replacer;\n if (typeof replacement === 'string') {\n replacer = function (regexMatch) {\n var substitute = '';\n // scan forward, copying the replacement text into the substitute string\n // and replace any occurrence of $n with the values matched by the regex\n var position = 0;\n var index = replacement.indexOf('$', position);\n while (index !== -1 && position < replacement.length) {\n substitute += replacement.substring(position, index);\n position = index + 1;\n var dollarVal = replacement.charAt(position);\n if (dollarVal === '$') {\n // literal $\n substitute += '$';\n position++;\n } else if (dollarVal === '0') {\n substitute += regexMatch.match;\n position++;\n } else {\n var maxDigits;\n if (regexMatch.groups.length === 0) {\n // no sub-matches; any $ followed by a digit will be replaced by an empty string\n maxDigits = 1;\n } else {\n // max number of digits to parse following the $\n maxDigits = Math.floor(Math.log(regexMatch.groups.length) * Math.LOG10E) + 1;\n }\n index = parseInt(replacement.substring(position, position + maxDigits), 10);\n if (maxDigits > 1 && index > regexMatch.groups.length) {\n index = parseInt(replacement.substring(position, position + maxDigits - 1), 10);\n }\n if (!isNaN(index)) {\n if (regexMatch.groups.length > 0) {\n var submatch = regexMatch.groups[index - 1];\n if (typeof submatch !== 'undefined') {\n substitute += submatch;\n }\n }\n position += index.toString().length;\n } else {\n // not a capture group, treat the $ as literal\n substitute += '$';\n }\n }\n index = replacement.indexOf('$', position);\n }\n substitute += replacement.substring(position);\n return substitute;\n };\n } else {\n replacer = replacement;\n }\n\n var result = '';\n var position = 0;\n\n if (typeof limit === 'undefined' || limit > 0) {\n var count = 0;\n if (typeof pattern === 'string') {\n var index = str.indexOf(pattern, position);\n while (index !== -1 && (typeof limit === 'undefined' || count < limit)) {\n result += str.substring(position, index);\n result += replacement;\n position = index + pattern.length;\n count++;\n index = str.indexOf(pattern, position);\n }\n result += str.substring(position);\n } else {\n var matches = await evaluateMatcher(pattern, str);\n if (typeof matches !== 'undefined') {\n while (typeof matches !== 'undefined' && (typeof limit === 'undefined' || count < limit)) {\n result += str.substring(position, matches.start);\n var replacedWith = replacer.apply(self, [matches]);\n if (isPromise(replacedWith)) {\n replacedWith = await replacedWith;\n }\n // check replacedWith is a string\n if (typeof replacedWith === 'string') {\n result += replacedWith;\n } else {\n // not a string - throw error\n throw {\n code: \"D3012\",\n stack: (new Error()).stack,\n value: replacedWith\n };\n }\n position = matches.start + matches.match.length;\n count++;\n matches = await evaluateMatcher(matches.next);\n }\n result += str.substring(position);\n } else {\n result = str;\n }\n }\n } else {\n result = str;\n }\n\n return result;\n }\n\n /**\n * Base64 encode a string\n * @param {String} str - string\n * @returns {String} Base 64 encoding of the binary data\n */\n function base64encode(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n // Use btoa in a browser, or Buffer in Node.js\n\n var btoa = typeof window !== 'undefined' ?\n /* istanbul ignore next */ window.btoa :\n function (str) {\n // Simply doing `new Buffer` at this point causes Browserify to pull\n // in the entire Buffer browser library, which is large and unnecessary.\n // Using `global.Buffer` defeats this.\n return new global.Buffer.from(str, 'binary').toString('base64'); // eslint-disable-line new-cap\n };\n return btoa(str);\n }\n\n /**\n * Base64 decode a string\n * @param {String} str - string\n * @returns {String} Base 64 encoding of the binary data\n */\n function base64decode(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n // Use btoa in a browser, or Buffer in Node.js\n var atob = typeof window !== 'undefined' ?\n /* istanbul ignore next */ window.atob :\n function (str) {\n // Simply doing `new Buffer` at this point causes Browserify to pull\n // in the entire Buffer browser library, which is large and unnecessary.\n // Using `global.Buffer` defeats this.\n return new global.Buffer.from(str, 'base64').toString('binary'); // eslint-disable-line new-cap\n };\n return atob(str);\n }\n\n /**\n * Encode a string into a component for a url\n * @param {String} str - String to encode\n * @returns {string} Encoded string\n */\n function encodeUrlComponent(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n // Catch URIErrors when URI sequence is malformed\n var returnVal;\n try {\n returnVal = encodeURIComponent(str);\n } catch (e) {\n throw {\n code: \"D3140\",\n stack: (new Error()).stack,\n value: str,\n functionName: \"encodeUrlComponent\"\n };\n }\n return returnVal;\n }\n\n /**\n * Encode a string into a url\n * @param {String} str - String to encode\n * @returns {string} Encoded string\n */\n function encodeUrl(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n // Catch URIErrors when URI sequence is malformed\n var returnVal;\n try {\n returnVal = encodeURI(str);\n } catch (e) {\n throw {\n code: \"D3140\",\n stack: (new Error()).stack,\n value: str,\n functionName: \"encodeUrl\"\n };\n }\n return returnVal;\n }\n\n /**\n * Decode a string from a component for a url\n * @param {String} str - String to decode\n * @returns {string} Decoded string\n */\n function decodeUrlComponent(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n // Catch URIErrors when URI sequence is malformed\n var returnVal;\n try {\n returnVal = decodeURIComponent(str);\n } catch (e) {\n throw {\n code: \"D3140\",\n stack: (new Error()).stack,\n value: str,\n functionName: \"decodeUrlComponent\"\n };\n }\n return returnVal;\n }\n\n /**\n * Decode a string from a url\n * @param {String} str - String to decode\n * @returns {string} Decoded string\n */\n function decodeUrl(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n // Catch URIErrors when URI sequence is malformed\n var returnVal;\n try {\n returnVal = decodeURI(str);\n } catch (e) {\n throw {\n code: \"D3140\",\n stack: (new Error()).stack,\n value: str,\n functionName: \"decodeUrl\"\n };\n }\n return returnVal;\n }\n\n /**\n * Split a string into an array of substrings\n * @param {String} str - string\n * @param {String} separator - the token or regex that splits the string\n * @param {Integer} [limit] - max number of substrings\n * @returns {Array} The array of string\n */\n async function split(str, separator, limit) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n // limit, if specified, must be a non-negative number\n if (limit < 0) {\n throw {\n code: \"D3020\",\n stack: (new Error()).stack,\n value: limit,\n index: 3\n };\n }\n\n var result = [];\n\n if (typeof limit === 'undefined' || limit > 0) {\n if (typeof separator === 'string') {\n result = str.split(separator, limit);\n } else {\n var count = 0;\n var matches = await evaluateMatcher(separator, str);\n if (typeof matches !== 'undefined') {\n var start = 0;\n while (typeof matches !== 'undefined' && (typeof limit === 'undefined' || count < limit)) {\n result.push(str.substring(start, matches.start));\n start = matches.end;\n matches = await evaluateMatcher(matches.next);\n count++;\n }\n if (typeof limit === 'undefined' || count < limit) {\n result.push(str.substring(start));\n }\n } else {\n result.push(str);\n }\n }\n }\n\n return result;\n }\n\n /**\n * Join an array of strings\n * @param {Array} strs - array of string\n * @param {String} [separator] - the token that splits the string\n * @returns {String} The concatenated string\n */\n function join(strs, separator) {\n // undefined inputs always return undefined\n if (typeof strs === 'undefined') {\n return undefined;\n }\n\n // if separator is not specified, default to empty string\n if (typeof separator === 'undefined') {\n separator = \"\";\n }\n\n return strs.join(separator);\n }\n\n /**\n * Formats a number into a decimal string representation using XPath 3.1 F&O fn:format-number spec\n * @param {number} value - number to format\n * @param {String} picture - picture string definition\n * @param {Object} [options] - override locale defaults\n * @returns {String} The formatted string\n */\n function formatNumber(value, picture, options) {\n // undefined inputs always return undefined\n if (typeof value === 'undefined') {\n return undefined;\n }\n\n var defaults = {\n \"decimal-separator\": \".\",\n \"grouping-separator\": \",\",\n \"exponent-separator\": \"e\",\n \"infinity\": \"Infinity\",\n \"minus-sign\": \"-\",\n \"NaN\": \"NaN\",\n \"percent\": \"%\",\n \"per-mille\": \"\\u2030\",\n \"zero-digit\": \"0\",\n \"digit\": \"#\",\n \"pattern-separator\": \";\"\n };\n\n // if `options` is specified, then its entries override defaults\n var properties = defaults;\n if (typeof options !== 'undefined') {\n Object.keys(options).forEach(function (key) {\n properties[key] = options[key];\n });\n }\n\n var decimalDigitFamily = [];\n var zeroCharCode = properties['zero-digit'].charCodeAt(0);\n for (var ii = zeroCharCode; ii < zeroCharCode + 10; ii++) {\n decimalDigitFamily.push(String.fromCharCode(ii));\n }\n\n var activeChars = decimalDigitFamily.concat([properties['decimal-separator'], properties['exponent-separator'], properties['grouping-separator'], properties.digit, properties['pattern-separator']]);\n\n var subPictures = picture.split(properties['pattern-separator']);\n\n if (subPictures.length > 2) {\n throw {\n code: 'D3080',\n stack: (new Error()).stack\n };\n }\n\n var splitParts = function (subpicture) {\n var prefix = (function () {\n var ch;\n for (var ii = 0; ii < subpicture.length; ii++) {\n ch = subpicture.charAt(ii);\n if (activeChars.indexOf(ch) !== -1 && ch !== properties['exponent-separator']) {\n return subpicture.substring(0, ii);\n }\n }\n })();\n var suffix = (function () {\n var ch;\n for (var ii = subpicture.length - 1; ii >= 0; ii--) {\n ch = subpicture.charAt(ii);\n if (activeChars.indexOf(ch) !== -1 && ch !== properties['exponent-separator']) {\n return subpicture.substring(ii + 1);\n }\n }\n })();\n var activePart = subpicture.substring(prefix.length, subpicture.length - suffix.length);\n var mantissaPart, exponentPart, integerPart, fractionalPart;\n var exponentPosition = subpicture.indexOf(properties['exponent-separator'], prefix.length);\n if (exponentPosition === -1 || exponentPosition > subpicture.length - suffix.length) {\n mantissaPart = activePart;\n exponentPart = undefined;\n } else {\n mantissaPart = activePart.substring(0, exponentPosition);\n exponentPart = activePart.substring(exponentPosition + 1);\n }\n var decimalPosition = mantissaPart.indexOf(properties['decimal-separator']);\n if (decimalPosition === -1) {\n integerPart = mantissaPart;\n fractionalPart = suffix;\n } else {\n integerPart = mantissaPart.substring(0, decimalPosition);\n fractionalPart = mantissaPart.substring(decimalPosition + 1);\n }\n return {\n prefix: prefix,\n suffix: suffix,\n activePart: activePart,\n mantissaPart: mantissaPart,\n exponentPart: exponentPart,\n integerPart: integerPart,\n fractionalPart: fractionalPart,\n subpicture: subpicture\n };\n };\n\n // validate the picture string, F&O 4.7.3\n var validate = function (parts) {\n var error;\n var ii;\n var subpicture = parts.subpicture;\n var decimalPos = subpicture.indexOf(properties['decimal-separator']);\n if (decimalPos !== subpicture.lastIndexOf(properties['decimal-separator'])) {\n error = 'D3081';\n }\n if (subpicture.indexOf(properties.percent) !== subpicture.lastIndexOf(properties.percent)) {\n error = 'D3082';\n }\n if (subpicture.indexOf(properties['per-mille']) !== subpicture.lastIndexOf(properties['per-mille'])) {\n error = 'D3083';\n }\n if (subpicture.indexOf(properties.percent) !== -1 && subpicture.indexOf(properties['per-mille']) !== -1) {\n error = 'D3084';\n }\n var valid = false;\n for (ii = 0; ii < parts.mantissaPart.length; ii++) {\n var ch = parts.mantissaPart.charAt(ii);\n if (decimalDigitFamily.indexOf(ch) !== -1 || ch === properties.digit) {\n valid = true;\n break;\n }\n }\n if (!valid) {\n error = 'D3085';\n }\n var charTypes = parts.activePart.split('').map(function (char) {\n return activeChars.indexOf(char) === -1 ? 'p' : 'a';\n }).join('');\n if (charTypes.indexOf('p') !== -1) {\n error = 'D3086';\n }\n if (decimalPos !== -1) {\n if (subpicture.charAt(decimalPos - 1) === properties['grouping-separator'] || subpicture.charAt(decimalPos + 1) === properties['grouping-separator']) {\n error = 'D3087';\n }\n } else if (parts.integerPart.charAt(parts.integerPart.length - 1) === properties['grouping-separator']) {\n error = 'D3088';\n }\n if (subpicture.indexOf(properties['grouping-separator'] + properties['grouping-separator']) !== -1) {\n error = 'D3089';\n }\n var optionalDigitPos = parts.integerPart.indexOf(properties.digit);\n if (optionalDigitPos !== -1 && parts.integerPart.substring(0, optionalDigitPos).split('').filter(function (char) {\n return decimalDigitFamily.indexOf(char) > -1;\n }).length > 0) {\n error = 'D3090';\n }\n optionalDigitPos = parts.fractionalPart.lastIndexOf(properties.digit);\n if (optionalDigitPos !== -1 && parts.fractionalPart.substring(optionalDigitPos).split('').filter(function (char) {\n return decimalDigitFamily.indexOf(char) > -1;\n }).length > 0) {\n error = 'D3091';\n }\n var exponentExists = (typeof parts.exponentPart === 'string');\n if (exponentExists && parts.exponentPart.length > 0 && (subpicture.indexOf(properties.percent) !== -1 || subpicture.indexOf(properties['per-mille']) !== -1)) {\n error = 'D3092';\n }\n if (exponentExists && (parts.exponentPart.length === 0 || parts.exponentPart.split('').filter(function (char) {\n return decimalDigitFamily.indexOf(char) === -1;\n }).length > 0)) {\n error = 'D3093';\n }\n if (error) {\n throw {\n code: error,\n stack: (new Error()).stack\n };\n }\n };\n\n // analyse the picture string, F&O 4.7.4\n var analyse = function (parts) {\n var getGroupingPositions = function (part, toLeft) {\n var positions = [];\n var groupingPosition = part.indexOf(properties['grouping-separator']);\n while (groupingPosition !== -1) {\n var charsToTheRight = (toLeft ? part.substring(0, groupingPosition) : part.substring(groupingPosition)).split('').filter(function (char) {\n return decimalDigitFamily.indexOf(char) !== -1 || char === properties.digit;\n }).length;\n positions.push(charsToTheRight);\n groupingPosition = parts.integerPart.indexOf(properties['grouping-separator'], groupingPosition + 1);\n }\n return positions;\n };\n var integerPartGroupingPositions = getGroupingPositions(parts.integerPart);\n var regular = function (indexes) {\n // are the grouping positions regular? i.e. same interval between each of them\n if (indexes.length === 0) {\n return 0;\n }\n var gcd = function (a, b) {\n return b === 0 ? a : gcd(b, a % b);\n };\n // find the greatest common divisor of all the positions\n var factor = indexes.reduce(gcd);\n // is every position separated by this divisor? If so, it's regular\n for (var index = 1; index <= indexes.length; index++) {\n if (indexes.indexOf(index * factor) === -1) {\n return 0;\n }\n }\n return factor;\n };\n\n var regularGrouping = regular(integerPartGroupingPositions);\n var fractionalPartGroupingPositions = getGroupingPositions(parts.fractionalPart, true);\n\n var minimumIntegerPartSize = parts.integerPart.split('').filter(function (char) {\n return decimalDigitFamily.indexOf(char) !== -1;\n }).length;\n var scalingFactor = minimumIntegerPartSize;\n\n var fractionalPartArray = parts.fractionalPart.split('');\n var minimumFactionalPartSize = fractionalPartArray.filter(function (char) {\n return decimalDigitFamily.indexOf(char) !== -1;\n }).length;\n var maximumFactionalPartSize = fractionalPartArray.filter(function (char) {\n return decimalDigitFamily.indexOf(char) !== -1 || char === properties.digit;\n }).length;\n var exponentPresent = typeof parts.exponentPart === 'string';\n if (minimumIntegerPartSize === 0 && maximumFactionalPartSize === 0) {\n if (exponentPresent) {\n minimumFactionalPartSize = 1;\n maximumFactionalPartSize = 1;\n } else {\n minimumIntegerPartSize = 1;\n }\n }\n if (exponentPresent && minimumIntegerPartSize === 0 && parts.integerPart.indexOf(properties.digit) !== -1) {\n minimumIntegerPartSize = 1;\n }\n if (minimumIntegerPartSize === 0 && minimumFactionalPartSize === 0) {\n minimumFactionalPartSize = 1;\n }\n var minimumExponentSize = 0;\n if (exponentPresent) {\n minimumExponentSize = parts.exponentPart.split('').filter(function (char) {\n return decimalDigitFamily.indexOf(char) !== -1;\n }).length;\n }\n\n return {\n integerPartGroupingPositions: integerPartGroupingPositions,\n regularGrouping: regularGrouping,\n minimumIntegerPartSize: minimumIntegerPartSize,\n scalingFactor: scalingFactor,\n prefix: parts.prefix,\n fractionalPartGroupingPositions: fractionalPartGroupingPositions,\n minimumFactionalPartSize: minimumFactionalPartSize,\n maximumFactionalPartSize: maximumFactionalPartSize,\n minimumExponentSize: minimumExponentSize,\n suffix: parts.suffix,\n picture: parts.subpicture\n };\n };\n\n var parts = subPictures.map(splitParts);\n parts.forEach(validate);\n\n var variables = parts.map(analyse);\n\n var minus_sign = properties['minus-sign'];\n var zero_digit = properties['zero-digit'];\n var decimal_separator = properties['decimal-separator'];\n var grouping_separator = properties['grouping-separator'];\n\n if (variables.length === 1) {\n variables.push(JSON.parse(JSON.stringify(variables[0])));\n variables[1].prefix = minus_sign + variables[1].prefix;\n }\n\n // TODO cache the result of the analysis\n\n // format the number\n // bullet 1: TODO: NaN - not sure we'd ever get this in JSON\n var pic;\n // bullet 2:\n if (value >= 0) {\n pic = variables[0];\n } else {\n pic = variables[1];\n }\n var adjustedNumber;\n // bullet 3:\n if (pic.picture.indexOf(properties.percent) !== -1) {\n adjustedNumber = value * 100;\n } else if (pic.picture.indexOf(properties['per-mille']) !== -1) {\n adjustedNumber = value * 1000;\n } else {\n adjustedNumber = value;\n }\n // bullet 4:\n // TODO: infinity - not sure we'd ever get this in JSON\n // bullet 5:\n var mantissa, exponent;\n if (pic.minimumExponentSize === 0) {\n mantissa = adjustedNumber;\n } else {\n // mantissa * 10^exponent = adjustedNumber\n var maxMantissa = Math.pow(10, pic.scalingFactor);\n var minMantissa = Math.pow(10, pic.scalingFactor - 1);\n mantissa = adjustedNumber;\n exponent = 0;\n while (mantissa < minMantissa) {\n mantissa *= 10;\n exponent -= 1;\n }\n while (mantissa > maxMantissa) {\n mantissa /= 10;\n exponent += 1;\n }\n }\n // bullet 6:\n var roundedNumber = round(mantissa, pic.maximumFactionalPartSize);\n // bullet 7:\n var makeString = function (value, dp) {\n var str = Math.abs(value).toFixed(dp);\n if (zero_digit !== '0') {\n str = str.split('').map(function (digit) {\n if (digit >= '0' && digit <= '9') {\n return decimalDigitFamily[digit.charCodeAt(0) - 48];\n } else {\n return digit;\n }\n }).join('');\n }\n return str;\n };\n var stringValue = makeString(roundedNumber, pic.maximumFactionalPartSize);\n var decimalPos = stringValue.indexOf('.');\n if (decimalPos === -1) {\n stringValue = stringValue + decimal_separator;\n } else {\n stringValue = stringValue.replace('.', decimal_separator);\n }\n while (stringValue.charAt(0) === zero_digit) {\n stringValue = stringValue.substring(1);\n }\n while (stringValue.charAt(stringValue.length - 1) === zero_digit) {\n stringValue = stringValue.substring(0, stringValue.length - 1);\n }\n // bullets 8 & 9:\n decimalPos = stringValue.indexOf(decimal_separator);\n var padLeft = pic.minimumIntegerPartSize - decimalPos;\n var padRight = pic.minimumFactionalPartSize - (stringValue.length - decimalPos - 1);\n stringValue = (padLeft > 0 ? new Array(padLeft + 1).join(zero_digit) : '') + stringValue;\n stringValue = stringValue + (padRight > 0 ? new Array(padRight + 1).join(zero_digit) : '');\n decimalPos = stringValue.indexOf(decimal_separator);\n // bullet 10:\n if (pic.regularGrouping > 0) {\n var groupCount = Math.floor((decimalPos - 1) / pic.regularGrouping);\n for (var group = 1; group <= groupCount; group++) {\n stringValue = [stringValue.slice(0, decimalPos - group * pic.regularGrouping), grouping_separator, stringValue.slice(decimalPos - group * pic.regularGrouping)].join('');\n }\n } else {\n pic.integerPartGroupingPositions.forEach(function (pos) {\n stringValue = [stringValue.slice(0, decimalPos - pos), grouping_separator, stringValue.slice(decimalPos - pos)].join('');\n decimalPos++;\n });\n }\n // bullet 11:\n decimalPos = stringValue.indexOf(decimal_separator);\n pic.fractionalPartGroupingPositions.forEach(function (pos) {\n stringValue = [stringValue.slice(0, pos + decimalPos + 1), grouping_separator, stringValue.slice(pos + decimalPos + 1)].join('');\n });\n // bullet 12:\n decimalPos = stringValue.indexOf(decimal_separator);\n if (pic.picture.indexOf(decimal_separator) === -1 || decimalPos === stringValue.length - 1) {\n stringValue = stringValue.substring(0, stringValue.length - 1);\n }\n // bullet 13:\n if (typeof exponent !== 'undefined') {\n var stringExponent = makeString(exponent, 0);\n padLeft = pic.minimumExponentSize - stringExponent.length;\n if (padLeft > 0) {\n stringExponent = new Array(padLeft + 1).join(zero_digit) + stringExponent;\n }\n stringValue = stringValue + properties['exponent-separator'] + (exponent < 0 ? minus_sign : '') + stringExponent;\n }\n // bullet 14:\n stringValue = pic.prefix + stringValue + pic.suffix;\n return stringValue;\n }\n\n /**\n * Converts a number to a string using a specified number base\n * @param {number} value - the number to convert\n * @param {number} [radix] - the number base; must be between 2 and 36. Defaults to 10\n * @returns {string} - the converted string\n */\n function formatBase(value, radix) {\n // undefined inputs always return undefined\n if (typeof value === 'undefined') {\n return undefined;\n }\n\n value = round(value);\n\n if (typeof radix === 'undefined') {\n radix = 10;\n } else {\n radix = round(radix);\n }\n\n if (radix < 2 || radix > 36) {\n throw {\n code: 'D3100',\n stack: (new Error()).stack,\n value: radix\n };\n\n }\n\n var result = value.toString(radix);\n\n return result;\n }\n\n /**\n * Cast argument to number\n * @param {Object} arg - Argument\n * @returns {Number} numeric value of argument\n */\n function number(arg) {\n var result;\n\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n if (typeof arg === 'number') {\n // already a number\n result = arg;\n } else if (typeof arg === 'string' && /^-?[0-9]+(\\.[0-9]+)?([Ee][-+]?[0-9]+)?$/.test(arg) && !isNaN(parseFloat(arg)) && isFinite(arg)) {\n result = parseFloat(arg);\n } else if (typeof arg === 'string' && /^(0[xX][0-9A-Fa-f]+)|(0[oO][0-7]+)|(0[bB][0-1]+)$/.test(arg)) {\n result = Number(arg);\n } else if (arg === true) {\n // boolean true casts to 1\n result = 1;\n } else if (arg === false) {\n // boolean false casts to 0\n result = 0;\n } else {\n throw {\n code: \"D3030\",\n value: arg,\n stack: (new Error()).stack,\n index: 1\n };\n }\n return result;\n }\n\n /**\n * Absolute value of a number\n * @param {Number} arg - Argument\n * @returns {Number} absolute value of argument\n */\n function abs(arg) {\n var result;\n\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n result = Math.abs(arg);\n return result;\n }\n\n /**\n * Rounds a number down to integer\n * @param {Number} arg - Argument\n * @returns {Number} rounded integer\n */\n function floor(arg) {\n var result;\n\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n result = Math.floor(arg);\n return result;\n }\n\n /**\n * Rounds a number up to integer\n * @param {Number} arg - Argument\n * @returns {Number} rounded integer\n */\n function ceil(arg) {\n var result;\n\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n result = Math.ceil(arg);\n return result;\n }\n\n /**\n * Round to half even\n * @param {Number} arg - Argument\n * @param {Number} [precision] - number of decimal places\n * @returns {Number} rounded integer\n */\n function round(arg, precision) {\n var result;\n\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n if (precision) {\n // shift the decimal place - this needs to be done in a string since multiplying\n // by a power of ten can introduce floating point precision errors which mess up\n // this rounding algorithm - See 'Decimal rounding' in\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n // Shift\n var value = arg.toString().split('e');\n arg = +(value[0] + 'e' + (value[1] ? (+value[1] + precision) : precision));\n\n }\n\n // round up to nearest int\n result = Math.round(arg);\n var diff = result - arg;\n if (Math.abs(diff) === 0.5 && Math.abs(result % 2) === 1) {\n // rounded the wrong way - adjust to nearest even number\n result = result - 1;\n }\n if (precision) {\n // Shift back\n value = result.toString().split('e');\n /* istanbul ignore next */\n result = +(value[0] + 'e' + (value[1] ? (+value[1] - precision) : -precision));\n }\n if (Object.is(result, -0)) { // ESLint rule 'no-compare-neg-zero' suggests this way\n // JSON doesn't do -0\n result = 0;\n }\n return result;\n }\n\n /**\n * Square root of number\n * @param {Number} arg - Argument\n * @returns {Number} square root\n */\n function sqrt(arg) {\n var result;\n\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n if (arg < 0) {\n throw {\n stack: (new Error()).stack,\n code: \"D3060\",\n index: 1,\n value: arg\n };\n }\n\n result = Math.sqrt(arg);\n\n return result;\n }\n\n /**\n * Raises number to the power of the second number\n * @param {Number} arg - the base\n * @param {Number} exp - the exponent\n * @returns {Number} rounded integer\n */\n function power(arg, exp) {\n var result;\n\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n result = Math.pow(arg, exp);\n\n if (!isFinite(result)) {\n throw {\n stack: (new Error()).stack,\n code: \"D3061\",\n index: 1,\n value: arg,\n exp: exp\n };\n }\n\n return result;\n }\n\n /**\n * Returns a random number 0 <= n < 1\n * @returns {number} random number\n */\n function random() {\n return Math.random();\n }\n\n /**\n * Evaluate an input and return a boolean\n * @param {*} arg - Arguments\n * @returns {boolean} Boolean\n */\n function boolean(arg) {\n // cast arg to its effective boolean value\n // boolean: unchanged\n // string: zero-length -> false; otherwise -> true\n // number: 0 -> false; otherwise -> true\n // null -> false\n // array: empty -> false; length > 1 -> true\n // object: empty -> false; non-empty -> true\n // function -> false\n\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n var result = false;\n if (Array.isArray(arg)) {\n if (arg.length === 1) {\n result = boolean(arg[0]);\n } else if (arg.length > 1) {\n var trues = arg.filter(function (val) {\n return boolean(val);\n });\n result = trues.length > 0;\n }\n } else if (typeof arg === 'string') {\n if (arg.length > 0) {\n result = true;\n }\n } else if (isNumeric(arg)) {\n if (arg !== 0) {\n result = true;\n }\n } else if (arg !== null && typeof arg === 'object' && !isFunction(arg)) {\n if (Object.keys(arg).length > 0) {\n result = true;\n }\n } else if (typeof arg === 'boolean' && arg === true) {\n result = true;\n }\n return result;\n }\n\n /**\n * returns the Boolean NOT of the arg\n * @param {*} arg - argument\n * @returns {boolean} - NOT arg\n */\n function not(arg) {\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n return !boolean(arg);\n }\n\n /**\n * Helper function to build the arguments to be supplied to the function arg of the\n * HOFs map, filter, each, sift and single\n * @param {function} func - the function to be invoked\n * @param {*} arg1 - the first (required) arg - the value\n * @param {*} arg2 - the second (optional) arg - the position (index or key)\n * @param {*} arg3 - the third (optional) arg - the whole structure (array or object)\n * @returns {*[]} the argument list\n */\n function hofFuncArgs(func, arg1, arg2, arg3) {\n var func_args = [arg1]; // the first arg (the value) is required\n // the other two are optional - only supply it if the function can take it\n var length = getFunctionArity(func);\n if (length >= 2) {\n func_args.push(arg2);\n }\n if (length >= 3) {\n func_args.push(arg3);\n }\n return func_args;\n }\n\n /**\n * Create a map from an array of arguments\n * @param {Array} [arr] - array to map over\n * @param {Function} func - function to apply\n * @returns {Array} Map array\n */\n async function map(arr, func) {\n // undefined inputs always return undefined\n if (typeof arr === 'undefined') {\n return undefined;\n }\n\n var result = createSequence();\n // do the map - iterate over the arrays, and invoke func\n for (var i = 0; i < arr.length; i++) {\n var func_args = hofFuncArgs(func, arr[i], i, arr);\n // invoke func\n var res = await func.apply(this, func_args);\n if (typeof res !== 'undefined') {\n result.push(res);\n }\n }\n\n return result;\n }\n\n /**\n * Create a map from an array of arguments\n * @param {Array} [arr] - array to filter\n * @param {Function} func - predicate function\n * @returns {Array} Map array\n */\n async function filter(arr, func) {\n // undefined inputs always return undefined\n if (typeof arr === 'undefined') {\n return undefined;\n }\n\n var result = createSequence();\n\n for (var i = 0; i < arr.length; i++) {\n var entry = arr[i];\n var func_args = hofFuncArgs(func, entry, i, arr);\n // invoke func\n var res = await func.apply(this, func_args);\n if (boolean(res)) {\n result.push(entry);\n }\n }\n\n return result;\n }\n\n /**\n * Given an array, find the single element matching a specified condition\n * Throws an exception if the number of matching elements is not exactly one\n * @param {Array} [arr] - array to filter\n * @param {Function} [func] - predicate function\n * @returns {*} Matching element\n */\n async function single(arr, func) {\n // undefined inputs always return undefined\n if (typeof arr === 'undefined') {\n return undefined;\n }\n\n var hasFoundMatch = false;\n var result;\n\n for (var i = 0; i < arr.length; i++) {\n var entry = arr[i];\n var positiveResult = true;\n if (typeof func !== 'undefined') {\n var func_args = hofFuncArgs(func, entry, i, arr);\n // invoke func\n var res = await func.apply(this, func_args);\n positiveResult = boolean(res);\n }\n if (positiveResult) {\n if(!hasFoundMatch) {\n result = entry;\n hasFoundMatch = true;\n } else {\n throw {\n stack: (new Error()).stack,\n code: \"D3138\",\n index: i\n };\n }\n }\n }\n\n if(!hasFoundMatch) {\n throw {\n stack: (new Error()).stack,\n code: \"D3139\"\n };\n }\n\n return result;\n }\n\n /**\n * Convolves (zips) each value from a set of arrays\n * @param {Array} [args] - arrays to zip\n * @returns {Array} Zipped array\n */\n function zip() {\n // this can take a variable number of arguments\n var result = [];\n var args = Array.prototype.slice.call(arguments);\n // length of the shortest array\n var length = Math.min.apply(Math, args.map(function (arg) {\n if (Array.isArray(arg)) {\n return arg.length;\n }\n return 0;\n }));\n for (var i = 0; i < length; i++) {\n var tuple = args.map((arg) => {\n return arg[i];\n });\n result.push(tuple);\n }\n return result;\n }\n\n /**\n * Fold left function\n * @param {Array} sequence - Sequence\n * @param {Function} func - Function\n * @param {Object} init - Initial value\n * @returns {*} Result\n */\n async function foldLeft(sequence, func, init) {\n // undefined inputs always return undefined\n if (typeof sequence === 'undefined') {\n return undefined;\n }\n\n var result;\n\n var arity = getFunctionArity(func);\n if (arity < 2) {\n throw {\n stack: (new Error()).stack,\n code: \"D3050\",\n index: 1\n };\n }\n\n var index;\n if (typeof init === 'undefined' && sequence.length > 0) {\n result = sequence[0];\n index = 1;\n } else {\n result = init;\n index = 0;\n }\n\n while (index < sequence.length) {\n var args = [result, sequence[index]];\n if (arity >= 3) {\n args.push(index);\n }\n if (arity >= 4) {\n args.push(sequence);\n }\n result = await func.apply(this, args);\n index++;\n }\n\n return result;\n }\n\n /**\n * Return keys for an object\n * @param {Object} arg - Object\n * @returns {Array} Array of keys\n */\n function keys(arg) {\n var result = createSequence();\n\n if (Array.isArray(arg)) {\n // merge the keys of all of the items in the array\n var merge = {};\n arg.forEach(function (item) {\n var allkeys = keys(item);\n allkeys.forEach(function (key) {\n merge[key] = true;\n });\n });\n result = keys(merge);\n } else if (arg !== null && typeof arg === 'object' && !isFunction(arg)) {\n Object.keys(arg).forEach(key => result.push(key));\n }\n return result;\n }\n\n /**\n * Return value from an object for a given key\n * @param {Object} input - Object/Array\n * @param {String} key - Key in object\n * @returns {*} Value of key in object\n */\n function lookup(input, key) {\n // lookup the 'name' item in the input\n var result;\n if (Array.isArray(input)) {\n result = createSequence();\n for(var ii = 0; ii < input.length; ii++) {\n var res = lookup(input[ii], key);\n if (typeof res !== 'undefined') {\n if (Array.isArray(res)) {\n res.forEach(val => result.push(val));\n } else {\n result.push(res);\n }\n }\n }\n } else if (input !== null && typeof input === 'object' && !isFunction(input)) {\n result = input[key];\n }\n return result;\n }\n\n /**\n * Append second argument to first\n * @param {Array|Object} arg1 - First argument\n * @param {Array|Object} arg2 - Second argument\n * @returns {*} Appended arguments\n */\n function append(arg1, arg2) {\n // disregard undefined args\n if (typeof arg1 === 'undefined') {\n return arg2;\n }\n if (typeof arg2 === 'undefined') {\n return arg1;\n }\n // if either argument is not an array, make it so\n if (!Array.isArray(arg1)) {\n arg1 = createSequence(arg1);\n }\n if (!Array.isArray(arg2)) {\n arg2 = [arg2];\n }\n return arg1.concat(arg2);\n }\n\n /**\n * Determines if the argument is undefined\n * @param {*} arg - argument\n * @returns {boolean} False if argument undefined, otherwise true\n */\n function exists(arg) {\n if (typeof arg === 'undefined') {\n return false;\n } else {\n return true;\n }\n }\n\n /**\n * Splits an object into an array of object with one property each\n * @param {*} arg - the object to split\n * @returns {*} - the array\n */\n function spread(arg) {\n var result = createSequence();\n\n if (Array.isArray(arg)) {\n // spread all of the items in the array\n arg.forEach(function (item) {\n result = append(result, spread(item));\n });\n } else if (arg !== null && typeof arg === 'object' && !isLambda(arg)) {\n for (var key in arg) {\n var obj = {};\n obj[key] = arg[key];\n result.push(obj);\n }\n } else {\n result = arg;\n }\n return result;\n }\n\n /**\n * Merges an array of objects into a single object. Duplicate properties are\n * overridden by entries later in the array\n * @param {*} arg - the objects to merge\n * @returns {*} - the object\n */\n function merge(arg) {\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n var result = {};\n\n arg.forEach(function (obj) {\n for (var prop in obj) {\n result[prop] = obj[prop];\n }\n });\n return result;\n }\n\n /**\n * Reverses the order of items in an array\n * @param {Array} arr - the array to reverse\n * @returns {Array} - the reversed array\n */\n function reverse(arr) {\n // undefined inputs always return undefined\n if (typeof arr === 'undefined') {\n return undefined;\n }\n\n if (arr.length <= 1) {\n return arr;\n }\n\n var length = arr.length;\n var result = new Array(length);\n for (var i = 0; i < length; i++) {\n result[length - i - 1] = arr[i];\n }\n\n return result;\n }\n\n /**\n *\n * @param {*} obj - the input object to iterate over\n * @param {*} func - the function to apply to each key/value pair\n * @returns {Array} - the resultant array\n */\n async function each(obj, func) {\n var result = createSequence();\n\n for (var key in obj) {\n var func_args = hofFuncArgs(func, obj[key], key, obj);\n // invoke func\n var val = await func.apply(this, func_args);\n if(typeof val !== 'undefined') {\n result.push(val);\n }\n }\n\n return result;\n }\n\n /**\n *\n * @param {string} [message] - the message to attach to the error\n * @throws custom error with code 'D3137'\n */\n function error(message) {\n throw {\n code: \"D3137\",\n stack: (new Error()).stack,\n message: message || \"$error() function evaluated\"\n };\n }\n\n /**\n *\n * @param {boolean} condition - the condition to evaluate\n * @param {string} [message] - the message to attach to the error\n * @throws custom error with code 'D3137'\n * @returns {undefined}\n */\n function assert(condition, message) {\n if(!condition) {\n throw {\n code: \"D3141\",\n stack: (new Error()).stack,\n message: message || \"$assert() statement failed\"\n };\n }\n\n return undefined;\n }\n\n /**\n *\n * @param {*} [value] - the input to which the type will be checked\n * @returns {string} - the type of the input\n */\n function type(value) {\n if (value === undefined) {\n return undefined;\n }\n\n if (value === null) {\n return 'null';\n }\n\n if (isNumeric(value)) {\n return 'number';\n }\n\n if (typeof value === 'string') {\n return 'string';\n }\n\n if (typeof value === 'boolean') {\n return 'boolean';\n }\n\n if(Array.isArray(value)) {\n return 'array';\n }\n\n if(isFunction(value)) {\n return 'function';\n }\n\n return 'object';\n }\n\n /**\n * Implements the merge sort (stable) with optional comparator function\n *\n * @param {Array} arr - the array to sort\n * @param {*} comparator - comparator function\n * @returns {Array} - sorted array\n */\n async function sort(arr, comparator) {\n // undefined inputs always return undefined\n if (typeof arr === 'undefined') {\n return undefined;\n }\n\n if (arr.length <= 1) {\n return arr;\n }\n\n var comp;\n if (typeof comparator === 'undefined') {\n // inject a default comparator - only works for numeric or string arrays\n if (!isArrayOfNumbers(arr) && !isArrayOfStrings(arr)) {\n throw {\n stack: (new Error()).stack,\n code: \"D3070\",\n index: 1\n };\n }\n\n comp = async function (a, b) {\n return a > b;\n };\n } else {\n // for internal usage of functionSort (i.e. order-by syntax)\n comp = comparator;\n }\n\n var merge = async function (l, r) {\n var merge_iter = async function (result, left, right) {\n if (left.length === 0) {\n Array.prototype.push.apply(result, right);\n } else if (right.length === 0) {\n Array.prototype.push.apply(result, left);\n } else if (await comp(left[0], right[0])) { // invoke the comparator function\n // if it returns true - swap left and right\n result.push(right[0]);\n await merge_iter(result, left, right.slice(1));\n } else {\n // otherwise keep the same order\n result.push(left[0]);\n await merge_iter(result, left.slice(1), right);\n }\n };\n var merged = [];\n await merge_iter(merged, l, r);\n return merged;\n };\n\n var msort = async function (array) {\n if (!Array.isArray(array) || array.length <= 1) {\n return array;\n } else {\n var middle = Math.floor(array.length / 2);\n var left = array.slice(0, middle);\n var right = array.slice(middle);\n left = await msort(left);\n right = await msort(right);\n return await merge(left, right);\n }\n };\n\n var result = await msort(arr);\n\n return result;\n }\n\n /**\n * Randomly shuffles the contents of an array\n * @param {Array} arr - the input array\n * @returns {Array} the shuffled array\n */\n function shuffle(arr) {\n // undefined inputs always return undefined\n if (typeof arr === 'undefined') {\n return undefined;\n }\n\n if (arr.length <= 1) {\n return arr;\n }\n\n // shuffle using the 'inside-out' variant of the Fisher-Yates algorithm\n var result = new Array(arr.length);\n for (var i = 0; i < arr.length; i++) {\n var j = Math.floor(Math.random() * (i + 1)); // random integer such that 0 ≤ j ≤ i\n if (i !== j) {\n result[i] = result[j];\n }\n result[j] = arr[i];\n }\n\n return result;\n }\n\n /**\n * Returns the values that appear in a sequence, with duplicates eliminated.\n * @param {Array} arr - An array or sequence of values\n * @returns {Array} - sequence of distinct values\n */\n function distinct(arr) {\n // undefined inputs always return undefined\n if (typeof arr === 'undefined') {\n return undefined;\n }\n\n if(!Array.isArray(arr) || arr.length <= 1) {\n return arr;\n }\n\n var results = isSequence(arr) ? createSequence() : [];\n\n for(var ii = 0; ii < arr.length; ii++) {\n var value = arr[ii];\n // is this value already in the result sequence?\n var includes = false;\n for(var jj = 0; jj < results.length; jj++) {\n if (deepEquals(value, results[jj])) {\n includes = true;\n break;\n }\n }\n if(!includes) {\n results.push(value);\n }\n }\n return results;\n }\n\n /**\n * Applies a predicate function to each key/value pair in an object, and returns an object containing\n * only the key/value pairs that passed the predicate\n *\n * @param {object} arg - the object to be sifted\n * @param {object} func - the predicate function (lambda or native)\n * @returns {object} - sifted object\n */\n async function sift(arg, func) {\n var result = {};\n\n for (var item in arg) {\n var entry = arg[item];\n var func_args = hofFuncArgs(func, entry, item, arg);\n // invoke func\n var res = await func.apply(this, func_args);\n if (boolean(res)) {\n result[item] = entry;\n }\n }\n\n // empty objects should be changed to undefined\n if (Object.keys(result).length === 0) {\n result = undefined;\n }\n\n return result;\n }\n\n return {\n sum, count, max, min, average,\n string, substring, substringBefore, substringAfter, lowercase, uppercase, length, trim, pad,\n match, contains, replace, split, join,\n formatNumber, formatBase, number, floor, ceil, round, abs, sqrt, power, random,\n boolean, not,\n map, zip, filter, single, foldLeft, sift,\n keys, lookup, append, exists, spread, merge, reverse, each, error, assert, type, sort, shuffle, distinct,\n base64encode, base64decode, encodeUrlComponent, encodeUrl, decodeUrlComponent, decodeUrl\n };\n})();\n\nmodule.exports = functions;\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./utils\":6}],3:[function(require,module,exports){\n/**\n * © Copyright IBM Corp. 2016, 2017 All Rights Reserved\n * Project name: JSONata\n * This project is licensed under the MIT License, see LICENSE\n */\n\n/**\n * @module JSONata\n * @description JSON query and transformation language\n */\n\nvar datetime = require('./datetime');\nvar fn = require('./functions');\nvar utils = require('./utils');\nvar parser = require('./parser');\nvar parseSignature = require('./signature');\n\n/**\n * jsonata\n * @function\n * @param {Object} expr - JSONata expression\n * @returns {{evaluate: evaluate, assign: assign}} Evaluated expression\n */\nvar jsonata = (function() {\n 'use strict';\n\n var isNumeric = utils.isNumeric;\n var isArrayOfStrings = utils.isArrayOfStrings;\n var isArrayOfNumbers = utils.isArrayOfNumbers;\n var createSequence = utils.createSequence;\n var isSequence = utils.isSequence;\n var isFunction = utils.isFunction;\n var isLambda = utils.isLambda;\n var isIterable = utils.isIterable;\n var isPromise = utils.isPromise;\n var getFunctionArity = utils.getFunctionArity;\n var isDeepEqual = utils.isDeepEqual;\n\n // Start of Evaluator code\n\n var staticFrame = createFrame(null);\n\n /**\n * Evaluate expression against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n async function evaluate(expr, input, environment) {\n var result;\n\n var entryCallback = environment.lookup(Symbol.for('jsonata.__evaluate_entry'));\n if(entryCallback) {\n await entryCallback(expr, input, environment);\n }\n\n switch (expr.type) {\n case 'path':\n result = await evaluatePath(expr, input, environment);\n break;\n case 'binary':\n result = await evaluateBinary(expr, input, environment);\n break;\n case 'unary':\n result = await evaluateUnary(expr, input, environment);\n break;\n case 'name':\n result = evaluateName(expr, input, environment);\n break;\n case 'string':\n case 'number':\n case 'value':\n result = evaluateLiteral(expr, input, environment);\n break;\n case 'wildcard':\n result = evaluateWildcard(expr, input, environment);\n break;\n case 'descendant':\n result = evaluateDescendants(expr, input, environment);\n break;\n case 'parent':\n result = environment.lookup(expr.slot.label);\n break;\n case 'condition':\n result = await evaluateCondition(expr, input, environment);\n break;\n case 'block':\n result = await evaluateBlock(expr, input, environment);\n break;\n case 'bind':\n result = await evaluateBindExpression(expr, input, environment);\n break;\n case 'regex':\n result = evaluateRegex(expr, input, environment);\n break;\n case 'function':\n result = await evaluateFunction(expr, input, environment);\n break;\n case 'variable':\n result = evaluateVariable(expr, input, environment);\n break;\n case 'lambda':\n result = evaluateLambda(expr, input, environment);\n break;\n case 'partial':\n result = await evaluatePartialApplication(expr, input, environment);\n break;\n case 'apply':\n result = await evaluateApplyExpression(expr, input, environment);\n break;\n case 'transform':\n result = evaluateTransformExpression(expr, input, environment);\n break;\n }\n\n if (Object.prototype.hasOwnProperty.call(expr, 'predicate')) {\n for(var ii = 0; ii < expr.predicate.length; ii++) {\n result = await evaluateFilter(expr.predicate[ii].expr, result, environment);\n }\n }\n\n if (expr.type !== 'path' && Object.prototype.hasOwnProperty.call(expr, 'group')) {\n result = await evaluateGroupExpression(expr.group, result, environment);\n }\n\n var exitCallback = environment.lookup(Symbol.for('jsonata.__evaluate_exit'));\n if(exitCallback) {\n await exitCallback(expr, input, environment, result);\n }\n\n if(result && isSequence(result) && !result.tupleStream) {\n if(expr.keepArray) {\n result.keepSingleton = true;\n }\n if(result.length === 0) {\n result = undefined;\n } else if(result.length === 1) {\n result = result.keepSingleton ? result : result[0];\n }\n\n }\n\n return result;\n }\n\n /**\n * Evaluate path expression against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n async function evaluatePath(expr, input, environment) {\n var inputSequence;\n // expr is an array of steps\n // if the first step is a variable reference ($...), including root reference ($$),\n // then the path is absolute rather than relative\n if (Array.isArray(input) && expr.steps[0].type !== 'variable') {\n inputSequence = input;\n } else {\n // if input is not an array, make it so\n inputSequence = createSequence(input);\n }\n\n var resultSequence;\n var isTupleStream = false;\n var tupleBindings = undefined;\n\n // evaluate each step in turn\n for(var ii = 0; ii < expr.steps.length; ii++) {\n var step = expr.steps[ii];\n\n if(step.tuple) {\n isTupleStream = true;\n }\n\n // if the first step is an explicit array constructor, then just evaluate that (i.e. don't iterate over a context array)\n if(ii === 0 && step.consarray) {\n resultSequence = await evaluate(step, inputSequence, environment);\n } else {\n if(isTupleStream) {\n tupleBindings = await evaluateTupleStep(step, inputSequence, tupleBindings, environment);\n } else {\n resultSequence = await evaluateStep(step, inputSequence, environment, ii === expr.steps.length - 1);\n }\n }\n\n if (!isTupleStream && (typeof resultSequence === 'undefined' || resultSequence.length === 0)) {\n break;\n }\n\n if(typeof step.focus === 'undefined') {\n inputSequence = resultSequence;\n }\n\n }\n\n if(isTupleStream) {\n if(expr.tuple) {\n // tuple stream is carrying ancestry information - keep this\n resultSequence = tupleBindings;\n } else {\n resultSequence = createSequence();\n for (ii = 0; ii < tupleBindings.length; ii++) {\n resultSequence.push(tupleBindings[ii]['@']);\n }\n }\n }\n\n if(expr.keepSingletonArray) {\n // if the array is explicitly constructed in the expression and marked to promote singleton sequences to array\n if(Array.isArray(resultSequence) && resultSequence.cons && !resultSequence.sequence) {\n resultSequence = createSequence(resultSequence);\n }\n resultSequence.keepSingleton = true;\n }\n\n if (expr.hasOwnProperty('group')) {\n resultSequence = await evaluateGroupExpression(expr.group, isTupleStream ? tupleBindings : resultSequence, environment)\n }\n\n return resultSequence;\n }\n\n function createFrameFromTuple(environment, tuple) {\n var frame = createFrame(environment);\n for(const prop in tuple) {\n frame.bind(prop, tuple[prop]);\n }\n return frame;\n }\n\n /**\n * Evaluate a step within a path\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @param {boolean} lastStep - flag the last step in a path\n * @returns {*} Evaluated input data\n */\n async function evaluateStep(expr, input, environment, lastStep) {\n var result;\n if(expr.type === 'sort') {\n result = await evaluateSortExpression(expr, input, environment);\n if(expr.stages) {\n result = await evaluateStages(expr.stages, result, environment);\n }\n return result;\n }\n\n result = createSequence();\n\n for(var ii = 0; ii < input.length; ii++) {\n var res = await evaluate(expr, input[ii], environment);\n if(expr.stages) {\n for(var ss = 0; ss < expr.stages.length; ss++) {\n res = await evaluateFilter(expr.stages[ss].expr, res, environment);\n }\n }\n if(typeof res !== 'undefined') {\n result.push(res);\n }\n }\n\n var resultSequence = createSequence();\n if(lastStep && result.length === 1 && Array.isArray(result[0]) && !isSequence(result[0])) {\n resultSequence = result[0];\n } else {\n // flatten the sequence\n result.forEach(function(res) {\n if (!Array.isArray(res) || res.cons) {\n // it's not an array - just push into the result sequence\n resultSequence.push(res);\n } else {\n // res is a sequence - flatten it into the parent sequence\n res.forEach(val => resultSequence.push(val));\n }\n });\n }\n\n return resultSequence;\n }\n\n async function evaluateStages(stages, input, environment) {\n var result = input;\n for(var ss = 0; ss < stages.length; ss++) {\n var stage = stages[ss];\n switch(stage.type) {\n case 'filter':\n result = await evaluateFilter(stage.expr, result, environment);\n break;\n case 'index':\n for(var ee = 0; ee < result.length; ee++) {\n var tuple = result[ee];\n tuple[stage.value] = ee;\n }\n break;\n }\n }\n return result;\n }\n\n /**\n * Evaluate a step within a path\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} tupleBindings - The tuple stream\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n async function evaluateTupleStep(expr, input, tupleBindings, environment) {\n var result;\n if(expr.type === 'sort') {\n if(tupleBindings) {\n result = await evaluateSortExpression(expr, tupleBindings, environment);\n } else {\n var sorted = await evaluateSortExpression(expr, input, environment);\n result = createSequence();\n result.tupleStream = true;\n for(var ss = 0; ss < sorted.length; ss++) {\n var tuple = {'@': sorted[ss]};\n tuple[expr.index] = ss;\n result.push(tuple);\n }\n }\n if(expr.stages) {\n result = await evaluateStages(expr.stages, result, environment);\n }\n return result;\n }\n\n result = createSequence();\n result.tupleStream = true;\n var stepEnv = environment;\n if(tupleBindings === undefined) {\n tupleBindings = input.map(item => { return {'@': item} });\n }\n\n for(var ee = 0; ee < tupleBindings.length; ee++) {\n stepEnv = createFrameFromTuple(environment, tupleBindings[ee]);\n var res = await evaluate(expr, tupleBindings[ee]['@'], stepEnv);\n // res is the binding sequence for the output tuple stream\n if(typeof res !== 'undefined') {\n if (!Array.isArray(res)) {\n res = [res];\n }\n for (var bb = 0; bb < res.length; bb++) {\n tuple = {};\n Object.assign(tuple, tupleBindings[ee]);\n if(res.tupleStream) {\n Object.assign(tuple, res[bb]);\n } else {\n if (expr.focus) {\n tuple[expr.focus] = res[bb];\n tuple['@'] = tupleBindings[ee]['@'];\n } else {\n tuple['@'] = res[bb];\n }\n if (expr.index) {\n tuple[expr.index] = bb;\n }\n if (expr.ancestor) {\n tuple[expr.ancestor.label] = tupleBindings[ee]['@'];\n }\n }\n result.push(tuple);\n }\n }\n }\n\n if(expr.stages) {\n result = await evaluateStages(expr.stages, result, environment);\n }\n\n return result;\n }\n\n /**\n * Apply filter predicate to input data\n * @param {Object} predicate - filter expression\n * @param {Object} input - Input data to apply predicates against\n * @param {Object} environment - Environment\n * @returns {*} Result after applying predicates\n */\n async function evaluateFilter(predicate, input, environment) {\n var results = createSequence();\n if( input && input.tupleStream) {\n results.tupleStream = true;\n }\n if (!Array.isArray(input)) {\n input = createSequence(input);\n }\n if (predicate.type === 'number') {\n var index = Math.floor(predicate.value); // round it down\n if (index < 0) {\n // count in from end of array\n index = input.length + index;\n }\n var item = await input[index];\n if(typeof item !== 'undefined') {\n if(Array.isArray(item)) {\n results = item;\n } else {\n results.push(item);\n }\n }\n } else {\n for (index = 0; index < input.length; index++) {\n var item = input[index];\n var context = item;\n var env = environment;\n if(input.tupleStream) {\n context = item['@'];\n env = createFrameFromTuple(environment, item);\n }\n var res = await evaluate(predicate, context, env);\n if (isNumeric(res)) {\n res = [res];\n }\n if (isArrayOfNumbers(res)) {\n res.forEach(function (ires) {\n // round it down\n var ii = Math.floor(ires);\n if (ii < 0) {\n // count in from end of array\n ii = input.length + ii;\n }\n if (ii === index) {\n results.push(item);\n }\n });\n } else if (fn.boolean(res)) { // truthy\n results.push(item);\n }\n }\n }\n return results;\n }\n\n /**\n * Evaluate binary expression against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n async function evaluateBinary(expr, input, environment) {\n var result;\n var lhs = await evaluate(expr.lhs, input, environment);\n var op = expr.value;\n\n //defer evaluation of RHS to allow short-circuiting\n var evalrhs = async () => await evaluate(expr.rhs, input, environment);\n if (op === \"and\" || op === \"or\") {\n try {\n return await evaluateBooleanExpression(lhs, evalrhs, op);\n } catch(err) {\n err.position = expr.position;\n err.token = op;\n throw err;\n }\n }\n\n var rhs = await evalrhs();\n try {\n switch (op) {\n case '+':\n case '-':\n case '*':\n case '/':\n case '%':\n result = evaluateNumericExpression(lhs, rhs, op);\n break;\n case '=':\n case '!=':\n result = evaluateEqualityExpression(lhs, rhs, op);\n break;\n case '<':\n case '<=':\n case '>':\n case '>=':\n result = evaluateComparisonExpression(lhs, rhs, op);\n break;\n case '&':\n result = evaluateStringConcat(lhs, rhs);\n break;\n case '..':\n result = evaluateRangeExpression(lhs, rhs);\n break;\n case 'in':\n result = evaluateIncludesExpression(lhs, rhs);\n break;\n }\n } catch(err) {\n err.position = expr.position;\n err.token = op;\n throw err;\n }\n return result;\n }\n\n /**\n * Evaluate unary expression against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n async function evaluateUnary(expr, input, environment) {\n var result;\n\n switch (expr.value) {\n case '-':\n result = await evaluate(expr.expression, input, environment);\n if(typeof result === 'undefined') {\n result = undefined;\n } else if (isNumeric(result)) {\n result = -result;\n } else {\n throw {\n code: \"D1002\",\n stack: (new Error()).stack,\n position: expr.position,\n token: expr.value,\n value: result\n };\n }\n break;\n case '[':\n // array constructor - evaluate each item\n result = [];\n let generators = await Promise.all(expr.expressions\n .map(async (item, idx) => {\n environment.isParallelCall = idx > 0\n return [item, await evaluate(item, input, environment)]\n }));\n for (let generator of generators) {\n var [item, value] = generator;\n if (typeof value !== 'undefined') {\n if(item.value === '[') {\n result.push(value);\n } else {\n result = fn.append(result, value);\n }\n }\n }\n if(expr.consarray) {\n Object.defineProperty(result, 'cons', {\n enumerable: false,\n configurable: false,\n value: true\n });\n }\n break;\n case '{':\n // object constructor - apply grouping\n result = await evaluateGroupExpression(expr, input, environment);\n break;\n\n }\n return result;\n }\n\n /**\n * Evaluate name object against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n function evaluateName(expr, input, environment) {\n // lookup the 'name' item in the input\n return fn.lookup(input, expr.value);\n }\n\n /**\n * Evaluate literal against input data\n * @param {Object} expr - JSONata expression\n * @returns {*} Evaluated input data\n */\n function evaluateLiteral(expr) {\n return expr.value;\n }\n\n /**\n * Evaluate wildcard against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @returns {*} Evaluated input data\n */\n function evaluateWildcard(expr, input) {\n var results = createSequence();\n if (Array.isArray(input) && input.outerWrapper && input.length > 0) {\n input = input[0];\n }\n if (input !== null && typeof input === 'object') {\n Object.keys(input).forEach(function (key) {\n var value = input[key];\n if(Array.isArray(value)) {\n value = flatten(value);\n results = fn.append(results, value);\n } else {\n results.push(value);\n }\n });\n }\n\n // result = normalizeSequence(results);\n return results;\n }\n\n /**\n * Returns a flattened array\n * @param {Array} arg - the array to be flatten\n * @param {Array} flattened - carries the flattened array - if not defined, will initialize to []\n * @returns {Array} - the flattened array\n */\n function flatten(arg, flattened) {\n if(typeof flattened === 'undefined') {\n flattened = [];\n }\n if(Array.isArray(arg)) {\n arg.forEach(function (item) {\n flatten(item, flattened);\n });\n } else {\n flattened.push(arg);\n }\n return flattened;\n }\n\n /**\n * Evaluate descendants against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @returns {*} Evaluated input data\n */\n function evaluateDescendants(expr, input) {\n var result;\n var resultSequence = createSequence();\n if (typeof input !== 'undefined') {\n // traverse all descendants of this object/array\n recurseDescendants(input, resultSequence);\n if (resultSequence.length === 1) {\n result = resultSequence[0];\n } else {\n result = resultSequence;\n }\n }\n return result;\n }\n\n /**\n * Recurse through descendants\n * @param {Object} input - Input data\n * @param {Object} results - Results\n */\n function recurseDescendants(input, results) {\n // this is the equivalent of //* in XPath\n if (!Array.isArray(input)) {\n results.push(input);\n }\n if (Array.isArray(input)) {\n input.forEach(function (member) {\n recurseDescendants(member, results);\n });\n } else if (input !== null && typeof input === 'object') {\n Object.keys(input).forEach(function (key) {\n recurseDescendants(input[key], results);\n });\n }\n }\n\n /**\n * Evaluate numeric expression against input data\n * @param {Object} lhs - LHS value\n * @param {Object} rhs - RHS value\n * @param {Object} op - opcode\n * @returns {*} Result\n */\n function evaluateNumericExpression(lhs, rhs, op) {\n var result;\n\n if (typeof lhs !== 'undefined' && !isNumeric(lhs)) {\n throw {\n code: \"T2001\",\n stack: (new Error()).stack,\n value: lhs\n };\n }\n if (typeof rhs !== 'undefined' && !isNumeric(rhs)) {\n throw {\n code: \"T2002\",\n stack: (new Error()).stack,\n value: rhs\n };\n }\n\n if (typeof lhs === 'undefined' || typeof rhs === 'undefined') {\n // if either side is undefined, the result is undefined\n return result;\n }\n\n switch (op) {\n case '+':\n result = lhs + rhs;\n break;\n case '-':\n result = lhs - rhs;\n break;\n case '*':\n result = lhs * rhs;\n break;\n case '/':\n result = lhs / rhs;\n break;\n case '%':\n result = lhs % rhs;\n break;\n }\n return result;\n }\n\n /**\n * Evaluate equality expression against input data\n * @param {Object} lhs - LHS value\n * @param {Object} rhs - RHS value\n * @param {Object} op - opcode\n * @returns {*} Result\n */\n function evaluateEqualityExpression(lhs, rhs, op) {\n var result;\n\n // type checks\n var ltype = typeof lhs;\n var rtype = typeof rhs;\n\n if (ltype === 'undefined' || rtype === 'undefined') {\n // if either side is undefined, the result is false\n return false;\n }\n\n switch (op) {\n case '=':\n result = isDeepEqual(lhs, rhs);\n break;\n case '!=':\n result = !isDeepEqual(lhs, rhs);\n break;\n }\n return result;\n }\n\n /**\n * Evaluate comparison expression against input data\n * @param {Object} lhs - LHS value\n * @param {Object} rhs - RHS value\n * @param {Object} op - opcode\n * @returns {*} Result\n */\n function evaluateComparisonExpression(lhs, rhs, op) {\n var result;\n\n // type checks\n var ltype = typeof lhs;\n var rtype = typeof rhs;\n\n var lcomparable = (ltype === 'undefined' || ltype === 'string' || ltype === 'number');\n var rcomparable = (rtype === 'undefined' || rtype === 'string' || rtype === 'number');\n\n // if either aa or bb are not comparable (string or numeric) values, then throw an error\n if (!lcomparable || !rcomparable) {\n throw {\n code: \"T2010\",\n stack: (new Error()).stack,\n value: !(ltype === 'string' || ltype === 'number') ? lhs : rhs\n };\n }\n\n // if either side is undefined, the result is undefined\n if (ltype === 'undefined' || rtype === 'undefined') {\n return undefined;\n }\n\n //if aa and bb are not of the same type\n if (ltype !== rtype) {\n throw {\n code: \"T2009\",\n stack: (new Error()).stack,\n value: lhs,\n value2: rhs\n };\n }\n\n switch (op) {\n case '<':\n result = lhs < rhs;\n break;\n case '<=':\n result = lhs <= rhs;\n break;\n case '>':\n result = lhs > rhs;\n break;\n case '>=':\n result = lhs >= rhs;\n break;\n }\n return result;\n }\n\n /**\n * Inclusion operator - in\n *\n * @param {Object} lhs - LHS value\n * @param {Object} rhs - RHS value\n * @returns {boolean} - true if lhs is a member of rhs\n */\n function evaluateIncludesExpression(lhs, rhs) {\n var result = false;\n\n if (typeof lhs === 'undefined' || typeof rhs === 'undefined') {\n // if either side is undefined, the result is false\n return false;\n }\n\n if(!Array.isArray(rhs)) {\n rhs = [rhs];\n }\n\n for(var i = 0; i < rhs.length; i++) {\n if(rhs[i] === lhs) {\n result = true;\n break;\n }\n }\n\n return result;\n }\n\n /**\n * Evaluate boolean expression against input data\n * @param {Object} lhs - LHS value\n * @param {Function} evalrhs - function to evaluate RHS value\n * @param {Object} op - opcode\n * @returns {*} Result\n */\n async function evaluateBooleanExpression(lhs, evalrhs, op) {\n var result;\n\n var lBool = boolize(lhs);\n\n switch (op) {\n case 'and':\n result = lBool && boolize(await evalrhs());\n break;\n case 'or':\n result = lBool || boolize(await evalrhs());\n break;\n }\n return result;\n }\n\n function boolize(value) {\n var booledValue = fn.boolean(value);\n return typeof booledValue === 'undefined' ? false : booledValue;\n }\n\n /**\n * Evaluate string concatenation against input data\n * @param {Object} lhs - LHS value\n * @param {Object} rhs - RHS value\n * @returns {string|*} Concatenated string\n */\n function evaluateStringConcat(lhs, rhs) {\n var result;\n\n var lstr = '';\n var rstr = '';\n if (typeof lhs !== 'undefined') {\n lstr = fn.string(lhs);\n }\n if (typeof rhs !== 'undefined') {\n rstr = fn.string(rhs);\n }\n\n result = lstr.concat(rstr);\n return result;\n }\n\n /**\n * Evaluate group expression against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {{}} Evaluated input data\n */\n async function evaluateGroupExpression(expr, input, environment) {\n var result = {};\n var groups = {};\n var reduce = input && input.tupleStream ? true : false;\n // group the input sequence by 'key' expression\n if (!Array.isArray(input)) {\n input = createSequence(input);\n }\n // if the array is empty, add an undefined entry to enable literal JSON object to be generated\n if (input.length === 0) {\n input.push(undefined);\n }\n\n for(var itemIndex = 0; itemIndex < input.length; itemIndex++) {\n var item = input[itemIndex];\n var env = reduce ? createFrameFromTuple(environment, item) : environment;\n for(var pairIndex = 0; pairIndex < expr.lhs.length; pairIndex++) {\n var pair = expr.lhs[pairIndex];\n var key = await evaluate(pair[0], reduce ? item['@'] : item, env);\n // key has to be a string\n if (typeof key !== 'string' && key !== undefined) {\n throw {\n code: \"T1003\",\n stack: (new Error()).stack,\n position: expr.position,\n value: key\n };\n }\n\n if (key !== undefined) {\n var entry = {data: item, exprIndex: pairIndex};\n if (groups.hasOwnProperty(key)) {\n // a value already exists in this slot\n if(groups[key].exprIndex !== pairIndex) {\n // this key has been generated by another expression in this group\n // when multiple key expressions evaluate to the same key, then error D1009 must be thrown\n throw {\n code: \"D1009\",\n stack: (new Error()).stack,\n position: expr.position,\n value: key\n };\n }\n\n // append it as an array\n groups[key].data = fn.append(groups[key].data, item);\n } else {\n groups[key] = entry;\n }\n }\n }\n }\n\n // iterate over the groups to evaluate the 'value' expression\n let generators = await Promise.all(Object.keys(groups).map(async (key, idx) => {\n let entry = groups[key];\n var context = entry.data;\n var env = environment;\n if (reduce) {\n var tuple = reduceTupleStream(entry.data);\n context = tuple['@'];\n delete tuple['@'];\n env = createFrameFromTuple(environment, tuple);\n }\n environment.isParallelCall = idx > 0\n return [key, await evaluate(expr.lhs[entry.exprIndex][1], context, env)];\n }));\n\n for (let generator of generators) {\n var [key, value] = await generator;\n if(typeof value !== 'undefined') {\n result[key] = value;\n }\n }\n\n return result;\n }\n\n function reduceTupleStream(tupleStream) {\n if(!Array.isArray(tupleStream)) {\n return tupleStream;\n }\n var result = {};\n Object.assign(result, tupleStream[0]);\n for(var ii = 1; ii < tupleStream.length; ii++) {\n for(const prop in tupleStream[ii]) {\n result[prop] = fn.append(result[prop], tupleStream[ii][prop]);\n }\n }\n return result;\n }\n\n /**\n * Evaluate range expression against input data\n * @param {Object} lhs - LHS value\n * @param {Object} rhs - RHS value\n * @returns {Array} Resultant array\n */\n function evaluateRangeExpression(lhs, rhs) {\n var result;\n\n if (typeof lhs !== 'undefined' && !Number.isInteger(lhs)) {\n throw {\n code: \"T2003\",\n stack: (new Error()).stack,\n value: lhs\n };\n }\n if (typeof rhs !== 'undefined' && !Number.isInteger(rhs)) {\n throw {\n code: \"T2004\",\n stack: (new Error()).stack,\n value: rhs\n };\n }\n\n if (typeof lhs === 'undefined' || typeof rhs === 'undefined') {\n // if either side is undefined, the result is undefined\n return result;\n }\n\n if (lhs > rhs) {\n // if the lhs is greater than the rhs, return undefined\n return result;\n }\n\n // limit the size of the array to ten million entries (1e7)\n // this is an implementation defined limit to protect against\n // memory and performance issues. This value may increase in the future.\n var size = rhs - lhs + 1;\n if(size > 1e7) {\n throw {\n code: \"D2014\",\n stack: (new Error()).stack,\n value: size\n };\n }\n\n result = new Array(size);\n for (var item = lhs, index = 0; item <= rhs; item++, index++) {\n result[index] = item;\n }\n result.sequence = true;\n return result;\n }\n\n /**\n * Evaluate bind expression against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n async function evaluateBindExpression(expr, input, environment) {\n // The RHS is the expression to evaluate\n // The LHS is the name of the variable to bind to - should be a VARIABLE token (enforced by parser)\n var value = await evaluate(expr.rhs, input, environment);\n environment.bind(expr.lhs.value, value);\n return value;\n }\n\n /**\n * Evaluate condition against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n async function evaluateCondition(expr, input, environment) {\n var result;\n var condition = await evaluate(expr.condition, input, environment);\n if (fn.boolean(condition)) {\n result = await evaluate(expr.then, input, environment);\n } else if (typeof expr.else !== 'undefined') {\n result = await evaluate(expr.else, input, environment);\n }\n return result;\n }\n\n /**\n * Evaluate block against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n async function evaluateBlock(expr, input, environment) {\n var result;\n // create a new frame to limit the scope of variable assignments\n // TODO, only do this if the post-parse stage has flagged this as required\n var frame = createFrame(environment);\n // invoke each expression in turn\n // only return the result of the last one\n for(var ii = 0; ii < expr.expressions.length; ii++) {\n result = await evaluate(expr.expressions[ii], input, frame);\n }\n\n return result;\n }\n\n /**\n * Prepare a regex\n * @param {Object} expr - expression containing regex\n * @returns {Function} Higher order function representing prepared regex\n */\n function evaluateRegex(expr) {\n var re = new jsonata.RegexEngine(expr.value);\n var closure = function(str, fromIndex) {\n var result;\n re.lastIndex = fromIndex || 0;\n var match = re.exec(str);\n if(match !== null) {\n result = {\n match: match[0],\n start: match.index,\n end: match.index + match[0].length,\n groups: []\n };\n if(match.length > 1) {\n for(var i = 1; i < match.length; i++) {\n result.groups.push(match[i]);\n }\n }\n result.next = function() {\n if(re.lastIndex >= str.length) {\n return undefined;\n } else {\n var next = closure(str, re.lastIndex);\n if(next && next.match === '') {\n // matches zero length string; this will never progress\n throw {\n code: \"D1004\",\n stack: (new Error()).stack,\n position: expr.position,\n value: expr.value.source\n };\n }\n return next;\n }\n };\n }\n\n return result;\n };\n return closure;\n }\n\n /**\n * Evaluate variable against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n function evaluateVariable(expr, input, environment) {\n // lookup the variable value in the environment\n var result;\n // if the variable name is empty string, then it refers to context value\n if (expr.value === '') {\n result = input && input.outerWrapper ? input[0] : input;\n } else {\n result = environment.lookup(expr.value);\n }\n return result;\n }\n\n /**\n * sort / order-by operator\n * @param {Object} expr - AST for operator\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Ordered sequence\n */\n async function evaluateSortExpression(expr, input, environment) {\n var result;\n\n // evaluate the lhs, then sort the results in order according to rhs expression\n var lhs = input;\n var isTupleSort = input.tupleStream ? true : false;\n\n // sort the lhs array\n // use comparator function\n var comparator = async function(a, b) { \n // expr.terms is an array of order-by in priority order\n var comp = 0;\n for(var index = 0; comp === 0 && index < expr.terms.length; index++) {\n var term = expr.terms[index];\n //evaluate the sort term in the context of a\n var context = a;\n var env = environment;\n if(isTupleSort) {\n context = a['@'];\n env = createFrameFromTuple(environment, a);\n }\n var aa = await evaluate(term.expression, context, env);\n //evaluate the sort term in the context of b\n context = b;\n env = environment;\n if(isTupleSort) {\n context = b['@'];\n env = createFrameFromTuple(environment, b);\n }\n var bb = await evaluate(term.expression, context, env);\n\n // type checks\n var atype = typeof aa;\n var btype = typeof bb;\n // undefined should be last in sort order\n if(atype === 'undefined') {\n // swap them, unless btype is also undefined\n comp = (btype === 'undefined') ? 0 : 1;\n continue;\n }\n if(btype === 'undefined') {\n comp = -1;\n continue;\n }\n\n // if aa or bb are not string or numeric values, then throw an error\n if(!(atype === 'string' || atype === 'number') || !(btype === 'string' || btype === 'number')) {\n throw {\n code: \"T2008\",\n stack: (new Error()).stack,\n position: expr.position,\n value: !(atype === 'string' || atype === 'number') ? aa : bb\n };\n }\n\n //if aa and bb are not of the same type\n if(atype !== btype) {\n throw {\n code: \"T2007\",\n stack: (new Error()).stack,\n position: expr.position,\n value: aa,\n value2: bb\n };\n }\n if(aa === bb) {\n // both the same - move on to next term\n continue;\n } else if (aa < bb) {\n comp = -1;\n } else {\n comp = 1;\n }\n if(term.descending === true) {\n comp = -comp;\n }\n }\n // only swap a & b if comp equals 1\n return comp === 1;\n };\n\n var focus = {\n environment: environment,\n input: input\n };\n // the `focus` is passed in as the `this` for the invoked function\n result = await fn.sort.apply(focus, [lhs, comparator]);\n\n return result;\n }\n\n /**\n * create a transformer function\n * @param {Object} expr - AST for operator\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} tranformer function\n */\n function evaluateTransformExpression(expr, input, environment) {\n // create a function to implement the transform definition\n var transformer = async function (obj) { // signature <(oa):o>\n // undefined inputs always return undefined\n if(typeof obj === 'undefined') {\n return undefined;\n }\n\n // this function returns a copy of obj with changes specified by the pattern/operation\n var cloneFunction = environment.lookup('clone');\n if(!isFunction(cloneFunction)) {\n // throw type error\n throw {\n code: \"T2013\",\n stack: (new Error()).stack,\n position: expr.position\n };\n }\n var result = await apply(cloneFunction, [obj], null, environment);\n var matches = await evaluate(expr.pattern, result, environment);\n if(typeof matches !== 'undefined') {\n if(!Array.isArray(matches)) {\n matches = [matches];\n }\n for(var ii = 0; ii < matches.length; ii++) {\n var match = matches[ii];\n if (match && (match.isPrototypeOf(result) || match instanceof Object.constructor)) {\n throw {\n code: \"D1010\",\n stack: (new Error()).stack,\n position: expr.position\n };\n }\n // evaluate the update value for each match\n var update = await evaluate(expr.update, match, environment);\n // update must be an object\n var updateType = typeof update;\n if(updateType !== 'undefined') {\n if(updateType !== 'object' || update === null || Array.isArray(update)) {\n // throw type error\n throw {\n code: \"T2011\",\n stack: (new Error()).stack,\n position: expr.update.position,\n value: update\n };\n }\n // merge the update\n for(var prop in update) {\n match[prop] = update[prop];\n }\n }\n\n // delete, if specified, must be an array of strings (or single string)\n if(typeof expr.delete !== 'undefined') {\n var deletions = await evaluate(expr.delete, match, environment);\n if(typeof deletions !== 'undefined') {\n var val = deletions;\n if (!Array.isArray(deletions)) {\n deletions = [deletions];\n }\n if (!isArrayOfStrings(deletions)) {\n // throw type error\n throw {\n code: \"T2012\",\n stack: (new Error()).stack,\n position: expr.delete.position,\n value: val\n };\n }\n for (var jj = 0; jj < deletions.length; jj++) {\n if(typeof match === 'object' && match !== null) {\n delete match[deletions[jj]];\n }\n }\n }\n }\n }\n }\n\n return result;\n };\n\n return defineFunction(transformer, '<(oa):o>');\n }\n\n var chainAST = parser('function($f, $g) { function($x){ $g($f($x)) } }');\n\n /**\n * Apply the function on the RHS using the sequence on the LHS as the first argument\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n async function evaluateApplyExpression(expr, input, environment) {\n var result;\n\n\n var lhs = await evaluate(expr.lhs, input, environment);\n if(expr.rhs.type === 'function') {\n // this is a function _invocation_; invoke it with lhs expression as the first argument\n result = await evaluateFunction(expr.rhs, input, environment, { context: lhs });\n } else {\n var func = await evaluate(expr.rhs, input, environment);\n\n if(!isFunction(func)) {\n throw {\n code: \"T2006\",\n stack: (new Error()).stack,\n position: expr.position,\n value: func\n };\n }\n\n if(isFunction(lhs)) {\n // this is function chaining (func1 ~> func2)\n // λ($f, $g) { λ($x){ $g($f($x)) } }\n var chain = await evaluate(chainAST, null, environment);\n result = await apply(chain, [lhs, func], null, environment);\n } else {\n result = await apply(func, [lhs], null, environment);\n }\n\n }\n\n return result;\n }\n\n /**\n * Evaluate function against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n async function evaluateFunction(expr, input, environment, applyto) {\n var result;\n\n // create the procedure\n // can't assume that expr.procedure is a lambda type directly\n // could be an expression that evaluates to a function (e.g. variable reference, parens expr etc.\n // evaluate it generically first, then check that it is a function. Throw error if not.\n var proc = await evaluate(expr.procedure, input, environment);\n\n if (typeof proc === 'undefined' && expr.procedure.type === 'path' && environment.lookup(expr.procedure.steps[0].value)) {\n // help the user out here if they simply forgot the leading $\n throw {\n code: \"T1005\",\n stack: (new Error()).stack,\n position: expr.position,\n token: expr.procedure.steps[0].value\n };\n }\n\n var evaluatedArgs = [];\n if(typeof applyto !== 'undefined') {\n evaluatedArgs.push(applyto.context);\n }\n // eager evaluation - evaluate the arguments\n for (var jj = 0; jj < expr.arguments.length; jj++) {\n const arg = await evaluate(expr.arguments[jj], input, environment);\n if(isFunction(arg)) {\n // wrap this in a closure\n const closure = async function (...params) {\n // invoke func\n return await apply(arg, params, null, environment);\n };\n closure.arity = getFunctionArity(arg);\n evaluatedArgs.push(closure);\n } else {\n evaluatedArgs.push(arg);\n }\n }\n // apply the procedure\n var procName = expr.procedure.type === 'path' ? expr.procedure.steps[0].value : expr.procedure.value;\n try {\n if(typeof proc === 'object') {\n proc.token = procName;\n proc.position = expr.position;\n }\n result = await apply(proc, evaluatedArgs, input, environment);\n } catch (err) {\n if(!err.position) {\n // add the position field to the error\n err.position = expr.position;\n }\n if (!err.token) {\n // and the function identifier\n err.token = procName;\n }\n throw err;\n }\n return result;\n }\n\n /**\n * Apply procedure or function\n * @param {Object} proc - Procedure\n * @param {Array} args - Arguments\n * @param {Object} input - input\n * @param {Object} environment - environment\n * @returns {*} Result of procedure\n */\n async function apply(proc, args, input, environment) {\n var result;\n result = await applyInner(proc, args, input, environment);\n while(isLambda(result) && result.thunk === true) {\n // trampoline loop - this gets invoked as a result of tail-call optimization\n // the function returned a tail-call thunk\n // unpack it, evaluate its arguments, and apply the tail call\n var next = await evaluate(result.body.procedure, result.input, result.environment);\n if(result.body.procedure.type === 'variable') {\n next.token = result.body.procedure.value;\n }\n next.position = result.body.procedure.position;\n var evaluatedArgs = [];\n for(var ii = 0; ii < result.body.arguments.length; ii++) {\n evaluatedArgs.push(await evaluate(result.body.arguments[ii], result.input, result.environment));\n }\n\n result = await applyInner(next, evaluatedArgs, input, environment);\n }\n return result;\n }\n\n /**\n * Apply procedure or function\n * @param {Object} proc - Procedure\n * @param {Array} args - Arguments\n * @param {Object} input - input\n * @param {Object} environment - environment\n * @returns {*} Result of procedure\n */\n async function applyInner(proc, args, input, environment) {\n var result;\n try {\n var validatedArgs = args;\n if (proc) {\n validatedArgs = validateArguments(proc.signature, args, input);\n }\n\n if (isLambda(proc)) {\n result = await applyProcedure(proc, validatedArgs);\n } else if (proc && proc._jsonata_function === true) {\n var focus = {\n environment: environment,\n input: input\n };\n // the `focus` is passed in as the `this` for the invoked function\n result = proc.implementation.apply(focus, validatedArgs);\n // `proc.implementation` might be a generator function\n // and `result` might be a generator - if so, yield\n if (isIterable(result)) {\n result = result.next().value;\n }\n if (isPromise(result)) {\n result = await result;\n }\n } else if (typeof proc === 'function') {\n // typically these are functions that are returned by the invocation of plugin functions\n // the `input` is being passed in as the `this` for the invoked function\n // this is so that functions that return objects containing functions can chain\n // e.g. await (await $func())\n result = proc.apply(input, validatedArgs);\n if (isPromise(result)) {\n result = await result;\n }\n } else {\n throw {\n code: \"T1006\",\n stack: (new Error()).stack\n };\n }\n } catch(err) {\n if(proc) {\n if (typeof err.token == 'undefined' && typeof proc.token !== 'undefined') {\n err.token = proc.token;\n }\n err.position = proc.position || err.position;\n }\n throw err;\n }\n return result;\n }\n\n /**\n * Evaluate lambda against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {{lambda: boolean, input: *, environment: *, arguments: *, body: *}} Evaluated input data\n */\n function evaluateLambda(expr, input, environment) {\n // make a function (closure)\n var procedure = {\n _jsonata_lambda: true,\n input: input,\n environment: environment,\n arguments: expr.arguments,\n signature: expr.signature,\n body: expr.body\n };\n if(expr.thunk === true) {\n procedure.thunk = true;\n }\n procedure.apply = async function(self, args) {\n return await apply(procedure, args, input, !!self ? self.environment : environment);\n };\n return procedure;\n }\n\n /**\n * Evaluate partial application\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n async function evaluatePartialApplication(expr, input, environment) {\n // partially apply a function\n var result;\n // evaluate the arguments\n var evaluatedArgs = [];\n for(var ii = 0; ii < expr.arguments.length; ii++) {\n var arg = expr.arguments[ii];\n if (arg.type === 'operator' && arg.value === '?') {\n evaluatedArgs.push(arg);\n } else {\n evaluatedArgs.push(await evaluate(arg, input, environment));\n }\n }\n // lookup the procedure\n var proc = await evaluate(expr.procedure, input, environment);\n if (typeof proc === 'undefined' && expr.procedure.type === 'path' && environment.lookup(expr.procedure.steps[0].value)) {\n // help the user out here if they simply forgot the leading $\n throw {\n code: \"T1007\",\n stack: (new Error()).stack,\n position: expr.position,\n token: expr.procedure.steps[0].value\n };\n }\n if (isLambda(proc)) {\n result = partialApplyProcedure(proc, evaluatedArgs);\n } else if (proc && proc._jsonata_function === true) {\n result = partialApplyNativeFunction(proc.implementation, evaluatedArgs);\n } else if (typeof proc === 'function') {\n result = partialApplyNativeFunction(proc, evaluatedArgs);\n } else {\n throw {\n code: \"T1008\",\n stack: (new Error()).stack,\n position: expr.position,\n token: expr.procedure.type === 'path' ? expr.procedure.steps[0].value : expr.procedure.value\n };\n }\n return result;\n }\n\n /**\n * Validate the arguments against the signature validator (if it exists)\n * @param {Function} signature - validator function\n * @param {Array} args - function arguments\n * @param {*} context - context value\n * @returns {Array} - validated arguments\n */\n function validateArguments(signature, args, context) {\n if(typeof signature === 'undefined') {\n // nothing to validate\n return args;\n }\n var validatedArgs = signature.validate(args, context);\n return validatedArgs;\n }\n\n /**\n * Apply procedure\n * @param {Object} proc - Procedure\n * @param {Array} args - Arguments\n * @returns {*} Result of procedure\n */\n async function applyProcedure(proc, args) {\n var result;\n var env = createFrame(proc.environment);\n proc.arguments.forEach(function (param, index) {\n env.bind(param.value, args[index]);\n });\n if (typeof proc.body === 'function') {\n // this is a lambda that wraps a native function - generated by partially evaluating a native\n result = await applyNativeFunction(proc.body, env);\n } else {\n result = await evaluate(proc.body, proc.input, env);\n }\n return result;\n }\n\n /**\n * Partially apply procedure\n * @param {Object} proc - Procedure\n * @param {Array} args - Arguments\n * @returns {{lambda: boolean, input: *, environment: {bind, lookup}, arguments: Array, body: *}} Result of partially applied procedure\n */\n function partialApplyProcedure(proc, args) {\n // create a closure, bind the supplied parameters and return a function that takes the remaining (?) parameters\n var env = createFrame(proc.environment);\n var unboundArgs = [];\n proc.arguments.forEach(function (param, index) {\n var arg = args[index];\n if (arg && arg.type === 'operator' && arg.value === '?') {\n unboundArgs.push(param);\n } else {\n env.bind(param.value, arg);\n }\n });\n var procedure = {\n _jsonata_lambda: true,\n input: proc.input,\n environment: env,\n arguments: unboundArgs,\n body: proc.body\n };\n return procedure;\n }\n\n /**\n * Partially apply native function\n * @param {Function} native - Native function\n * @param {Array} args - Arguments\n * @returns {{lambda: boolean, input: *, environment: {bind, lookup}, arguments: Array, body: *}} Result of partially applying native function\n */\n function partialApplyNativeFunction(native, args) {\n // create a lambda function that wraps and invokes the native function\n // get the list of declared arguments from the native function\n // this has to be picked out from the toString() value\n var sigArgs = getNativeFunctionArguments(native);\n sigArgs = sigArgs.map(function (sigArg) {\n return '$' + sigArg.trim();\n });\n var body = 'function(' + sigArgs.join(', ') + '){ _ }';\n\n var bodyAST = parser(body);\n bodyAST.body = native;\n\n var partial = partialApplyProcedure(bodyAST, args);\n return partial;\n }\n\n /**\n * Apply native function\n * @param {Object} proc - Procedure\n * @param {Object} env - Environment\n * @returns {*} Result of applying native function\n */\n async function applyNativeFunction(proc, env) {\n var sigArgs = getNativeFunctionArguments(proc);\n // generate the array of arguments for invoking the function - look them up in the environment\n var args = sigArgs.map(function (sigArg) {\n return env.lookup(sigArg.trim());\n });\n\n var focus = {\n environment: env\n };\n var result = proc.apply(focus, args);\n if (isPromise(result)) {\n result = await result;\n }\n return result;\n }\n\n /**\n * Get native function arguments\n * @param {Function} func - Function\n * @returns {*|Array} Native function arguments\n */\n function getNativeFunctionArguments(func) {\n var signature = func.toString();\n var sigParens = /\\(([^)]*)\\)/.exec(signature)[1]; // the contents of the parens\n var sigArgs = sigParens.split(',');\n return sigArgs;\n }\n\n /**\n * Creates a function definition\n * @param {Function} func - function implementation in Javascript\n * @param {string} signature - JSONata function signature definition\n * @returns {{implementation: *, signature: *}} function definition\n */\n function defineFunction(func, signature) {\n var definition = {\n _jsonata_function: true,\n implementation: func\n };\n if(typeof signature !== 'undefined') {\n definition.signature = parseSignature(signature);\n }\n return definition;\n }\n\n\n /**\n * parses and evaluates the supplied expression\n * @param {string} expr - expression to evaluate\n * @returns {*} - result of evaluating the expression\n */\n async function functionEval(expr, focus) {\n // undefined inputs always return undefined\n if(typeof expr === 'undefined') {\n return undefined;\n }\n var input = this.input;\n if(typeof focus !== 'undefined') {\n input = focus;\n // if the input is a JSON array, then wrap it in a singleton sequence so it gets treated as a single input\n if(Array.isArray(input) && !isSequence(input)) {\n input = createSequence(input);\n input.outerWrapper = true;\n }\n }\n\n try {\n var ast = parser(expr, false);\n } catch(err) {\n // error parsing the expression passed to $eval\n populateMessage(err);\n throw {\n stack: (new Error()).stack,\n code: \"D3120\",\n value: err.message,\n error: err\n };\n }\n try {\n var result = await evaluate(ast, input, this.environment);\n } catch(err) {\n // error evaluating the expression passed to $eval\n populateMessage(err);\n throw {\n stack: (new Error()).stack,\n code: \"D3121\",\n value:err.message,\n error: err\n };\n }\n\n return result;\n }\n\n /**\n * Clones an object\n * @param {Object} arg - object to clone (deep copy)\n * @returns {*} - the cloned object\n */\n function functionClone(arg) {\n // undefined inputs always return undefined\n if(typeof arg === 'undefined') {\n return undefined;\n }\n\n return JSON.parse(fn.string(arg));\n }\n\n /**\n * Create frame\n * @param {Object} enclosingEnvironment - Enclosing environment\n * @returns {{bind: bind, lookup: lookup}} Created frame\n */\n function createFrame(enclosingEnvironment) {\n var bindings = {};\n const newFrame = {\n bind: function (name, value) {\n bindings[name] = value;\n },\n lookup: function (name) {\n var value;\n if(bindings.hasOwnProperty(name)) {\n value = bindings[name];\n } else if (enclosingEnvironment) {\n value = enclosingEnvironment.lookup(name);\n }\n return value;\n },\n timestamp: enclosingEnvironment ? enclosingEnvironment.timestamp : null,\n async: enclosingEnvironment ? enclosingEnvironment.async : false,\n isParallelCall: enclosingEnvironment ? enclosingEnvironment.isParallelCall : false,\n global: enclosingEnvironment ? enclosingEnvironment.global : {\n ancestry: [ null ]\n }\n };\n\n if (enclosingEnvironment) {\n var framePushCallback = enclosingEnvironment.lookup(Symbol.for('jsonata.__createFrame_push'));\n if(framePushCallback) {\n framePushCallback(enclosingEnvironment, newFrame);\n }\n }\n \n\n return newFrame\n }\n\n // Function registration\n staticFrame.bind('sum', defineFunction(fn.sum, '<a<n>:n>'));\n staticFrame.bind('count', defineFunction(fn.count, '<a:n>'));\n staticFrame.bind('max', defineFunction(fn.max, '<a<n>:n>'));\n staticFrame.bind('min', defineFunction(fn.min, '<a<n>:n>'));\n staticFrame.bind('average', defineFunction(fn.average, '<a<n>:n>'));\n staticFrame.bind('string', defineFunction(fn.string, '<x-b?:s>'));\n staticFrame.bind('substring', defineFunction(fn.substring, '<s-nn?:s>'));\n staticFrame.bind('substringBefore', defineFunction(fn.substringBefore, '<s-s:s>'));\n staticFrame.bind('substringAfter', defineFunction(fn.substringAfter, '<s-s:s>'));\n staticFrame.bind('lowercase', defineFunction(fn.lowercase, '<s-:s>'));\n staticFrame.bind('uppercase', defineFunction(fn.uppercase, '<s-:s>'));\n staticFrame.bind('length', defineFunction(fn.length, '<s-:n>'));\n staticFrame.bind('trim', defineFunction(fn.trim, '<s-:s>'));\n staticFrame.bind('pad', defineFunction(fn.pad, '<s-ns?:s>'));\n staticFrame.bind('match', defineFunction(fn.match, '<s-f<s:o>n?:a<o>>'));\n staticFrame.bind('contains', defineFunction(fn.contains, '<s-(sf):b>')); // TODO <s-(sf<s:o>):b>\n staticFrame.bind('replace', defineFunction(fn.replace, '<s-(sf)(sf)n?:s>')); // TODO <s-(sf<s:o>)(sf<o:s>)n?:s>\n staticFrame.bind('split', defineFunction(fn.split, '<s-(sf)n?:a<s>>')); // TODO <s-(sf<s:o>)n?:a<s>>\n staticFrame.bind('join', defineFunction(fn.join, '<a<s>s?:s>'));\n staticFrame.bind('formatNumber', defineFunction(fn.formatNumber, '<n-so?:s>'));\n staticFrame.bind('formatBase', defineFunction(fn.formatBase, '<n-n?:s>'));\n staticFrame.bind('formatInteger', defineFunction(datetime.formatInteger, '<n-s:s>'));\n staticFrame.bind('parseInteger', defineFunction(datetime.parseInteger, '<s-s:n>'));\n staticFrame.bind('number', defineFunction(fn.number, '<(nsb)-:n>'));\n staticFrame.bind('floor', defineFunction(fn.floor, '<n-:n>'));\n staticFrame.bind('ceil', defineFunction(fn.ceil, '<n-:n>'));\n staticFrame.bind('round', defineFunction(fn.round, '<n-n?:n>'));\n staticFrame.bind('abs', defineFunction(fn.abs, '<n-:n>'));\n staticFrame.bind('sqrt', defineFunction(fn.sqrt, '<n-:n>'));\n staticFrame.bind('power', defineFunction(fn.power, '<n-n:n>'));\n staticFrame.bind('random', defineFunction(fn.random, '<:n>'));\n staticFrame.bind('boolean', defineFunction(fn.boolean, '<x-:b>'));\n staticFrame.bind('not', defineFunction(fn.not, '<x-:b>'));\n staticFrame.bind('map', defineFunction(fn.map, '<af>'));\n staticFrame.bind('zip', defineFunction(fn.zip, '<a+>'));\n staticFrame.bind('filter', defineFunction(fn.filter, '<af>'));\n staticFrame.bind('single', defineFunction(fn.single, '<af?>'));\n staticFrame.bind('reduce', defineFunction(fn.foldLeft, '<afj?:j>')); // TODO <f<jj:j>a<j>j?:j>\n staticFrame.bind('sift', defineFunction(fn.sift, '<o-f?:o>'));\n staticFrame.bind('keys', defineFunction(fn.keys, '<x-:a<s>>'));\n staticFrame.bind('lookup', defineFunction(fn.lookup, '<x-s:x>'));\n staticFrame.bind('append', defineFunction(fn.append, '<xx:a>'));\n staticFrame.bind('exists', defineFunction(fn.exists, '<x:b>'));\n staticFrame.bind('spread', defineFunction(fn.spread, '<x-:a<o>>'));\n staticFrame.bind('merge', defineFunction(fn.merge, '<a<o>:o>'));\n staticFrame.bind('reverse', defineFunction(fn.reverse, '<a:a>'));\n staticFrame.bind('each', defineFunction(fn.each, '<o-f:a>'));\n staticFrame.bind('error', defineFunction(fn.error, '<s?:x>'));\n staticFrame.bind('assert', defineFunction(fn.assert, '<bs?:x>'));\n staticFrame.bind('type', defineFunction(fn.type, '<x:s>'));\n staticFrame.bind('sort', defineFunction(fn.sort, '<af?:a>'));\n staticFrame.bind('shuffle', defineFunction(fn.shuffle, '<a:a>'));\n staticFrame.bind('distinct', defineFunction(fn.distinct, '<x:x>'));\n staticFrame.bind('base64encode', defineFunction(fn.base64encode, '<s-:s>'));\n staticFrame.bind('base64decode', defineFunction(fn.base64decode, '<s-:s>'));\n staticFrame.bind('encodeUrlComponent', defineFunction(fn.encodeUrlComponent, '<s-:s>'));\n staticFrame.bind('encodeUrl', defineFunction(fn.encodeUrl, '<s-:s>'));\n staticFrame.bind('decodeUrlComponent', defineFunction(fn.decodeUrlComponent, '<s-:s>'));\n staticFrame.bind('decodeUrl', defineFunction(fn.decodeUrl, '<s-:s>'));\n staticFrame.bind('eval', defineFunction(functionEval, '<sx?:x>'));\n staticFrame.bind('toMillis', defineFunction(datetime.toMillis, '<s-s?:n>'));\n staticFrame.bind('fromMillis', defineFunction(datetime.fromMillis, '<n-s?s?:s>'));\n staticFrame.bind('clone', defineFunction(functionClone, '<(oa)-:o>'));\n\n /**\n * Error codes\n *\n * Sxxxx - Static errors (compile time)\n * Txxxx - Type errors\n * Dxxxx - Dynamic errors (evaluate time)\n * 01xx - tokenizer\n * 02xx - parser\n * 03xx - regex parser\n * 04xx - function signature parser/evaluator\n * 10xx - evaluator\n * 20xx - operators\n * 3xxx - functions (blocks of 10 for each function)\n */\n var errorCodes = {\n \"S0101\": \"String literal must be terminated by a matching quote\",\n \"S0102\": \"Number out of range: {{token}}\",\n \"S0103\": \"Unsupported escape sequence: \\\\{{token}}\",\n \"S0104\": \"The escape sequence \\\\u must be followed by 4 hex digits\",\n \"S0105\": \"Quoted property name must be terminated with a backquote (`)\",\n \"S0106\": \"Comment has no closing tag\",\n \"S0201\": \"Syntax error: {{token}}\",\n \"S0202\": \"Expected {{value}}, got {{token}}\",\n \"S0203\": \"Expected {{value}} before end of expression\",\n \"S0204\": \"Unknown operator: {{token}}\",\n \"S0205\": \"Unexpected token: {{token}}\",\n \"S0206\": \"Unknown expression type: {{token}}\",\n \"S0207\": \"Unexpected end of expression\",\n \"S0208\": \"Parameter {{value}} of function definition must be a variable name (start with $)\",\n \"S0209\": \"A predicate cannot follow a grouping expression in a step\",\n \"S0210\": \"Each step can only have one grouping expression\",\n \"S0211\": \"The symbol {{token}} cannot be used as a unary operator\",\n \"S0212\": \"The left side of := must be a variable name (start with $)\",\n \"S0213\": \"The literal value {{value}} cannot be used as a step within a path expression\",\n \"S0214\": \"The right side of {{token}} must be a variable name (start with $)\",\n \"S0215\": \"A context variable binding must precede any predicates on a step\",\n \"S0216\": \"A context variable binding must precede the 'order-by' clause on a step\",\n \"S0217\": \"The object representing the 'parent' cannot be derived from this expression\",\n \"S0301\": \"Empty regular expressions are not allowed\",\n \"S0302\": \"No terminating / in regular expression\",\n \"S0402\": \"Choice groups containing parameterized types are not supported\",\n \"S0401\": \"Type parameters can only be applied to functions and arrays\",\n \"S0500\": \"Attempted to evaluate an expression containing syntax error(s)\",\n \"T0410\": \"Argument {{index}} of function {{token}} does not match function signature\",\n \"T0411\": \"Context value is not a compatible type with argument {{index}} of function {{token}}\",\n \"T0412\": \"Argument {{index}} of function {{token}} must be an array of {{type}}\",\n \"D1001\": \"Number out of range: {{value}}\",\n \"D1002\": \"Cannot negate a non-numeric value: {{value}}\",\n \"T1003\": \"Key in object structure must evaluate to a string; got: {{value}}\",\n \"D1004\": \"Regular expression matches zero length string\",\n \"T1005\": \"Attempted to invoke a non-function. Did you mean ${{{token}}}?\",\n \"T1006\": \"Attempted to invoke a non-function\",\n \"T1007\": \"Attempted to partially apply a non-function. Did you mean ${{{token}}}?\",\n \"T1008\": \"Attempted to partially apply a non-function\",\n \"D1009\": \"Multiple key definitions evaluate to same key: {{value}}\",\n \"D1010\": \"Attempted to access the Javascript object prototype\", // Javascript specific \n \"T1010\": \"The matcher function argument passed to function {{token}} does not return the correct object structure\",\n \"T2001\": \"The left side of the {{token}} operator must evaluate to a number\",\n \"T2002\": \"The right side of the {{token}} operator must evaluate to a number\",\n \"T2003\": \"The left side of the range operator (..) must evaluate to an integer\",\n \"T2004\": \"The right side of the range operator (..) must evaluate to an integer\",\n \"D2005\": \"The left side of := must be a variable name (start with $)\", // defunct - replaced by S0212 parser error\n \"T2006\": \"The right side of the function application operator ~> must be a function\",\n \"T2007\": \"Type mismatch when comparing values {{value}} and {{value2}} in order-by clause\",\n \"T2008\": \"The expressions within an order-by clause must evaluate to numeric or string values\",\n \"T2009\": \"The values {{value}} and {{value2}} either side of operator {{token}} must be of the same data type\",\n \"T2010\": \"The expressions either side of operator {{token}} must evaluate to numeric or string values\",\n \"T2011\": \"The insert/update clause of the transform expression must evaluate to an object: {{value}}\",\n \"T2012\": \"The delete clause of the transform expression must evaluate to a string or array of strings: {{value}}\",\n \"T2013\": \"The transform expression clones the input object using the $clone() function. This has been overridden in the current scope by a non-function.\",\n \"D2014\": \"The size of the sequence allocated by the range operator (..) must not exceed 1e6. Attempted to allocate {{value}}.\",\n \"D3001\": \"Attempting to invoke string function on Infinity or NaN\",\n \"D3010\": \"Second argument of replace function cannot be an empty string\",\n \"D3011\": \"Fourth argument of replace function must evaluate to a positive number\",\n \"D3012\": \"Attempted to replace a matched string with a non-string value\",\n \"D3020\": \"Third argument of split function must evaluate to a positive number\",\n \"D3030\": \"Unable to cast value to a number: {{value}}\",\n \"D3040\": \"Third argument of match function must evaluate to a positive number\",\n \"D3050\": \"The second argument of reduce function must be a function with at least two arguments\",\n \"D3060\": \"The sqrt function cannot be applied to a negative number: {{value}}\",\n \"D3061\": \"The power function has resulted in a value that cannot be represented as a JSON number: base={{value}}, exponent={{exp}}\",\n \"D3070\": \"The single argument form of the sort function can only be applied to an array of strings or an array of numbers. Use the second argument to specify a comparison function\",\n \"D3080\": \"The picture string must only contain a maximum of two sub-pictures\",\n \"D3081\": \"The sub-picture must not contain more than one instance of the 'decimal-separator' character\",\n \"D3082\": \"The sub-picture must not contain more than one instance of the 'percent' character\",\n \"D3083\": \"The sub-picture must not contain more than one instance of the 'per-mille' character\",\n \"D3084\": \"The sub-picture must not contain both a 'percent' and a 'per-mille' character\",\n \"D3085\": \"The mantissa part of a sub-picture must contain at least one character that is either an 'optional digit character' or a member of the 'decimal digit family'\",\n \"D3086\": \"The sub-picture must not contain a passive character that is preceded by an active character and that is followed by another active character\",\n \"D3087\": \"The sub-picture must not contain a 'grouping-separator' character that appears adjacent to a 'decimal-separator' character\",\n \"D3088\": \"The sub-picture must not contain a 'grouping-separator' at the end of the integer part\",\n \"D3089\": \"The sub-picture must not contain two adjacent instances of the 'grouping-separator' character\",\n \"D3090\": \"The integer part of the sub-picture must not contain a member of the 'decimal digit family' that is followed by an instance of the 'optional digit character'\",\n \"D3091\": \"The fractional part of the sub-picture must not contain an instance of the 'optional digit character' that is followed by a member of the 'decimal digit family'\",\n \"D3092\": \"A sub-picture that contains a 'percent' or 'per-mille' character must not contain a character treated as an 'exponent-separator'\",\n \"D3093\": \"The exponent part of the sub-picture must comprise only of one or more characters that are members of the 'decimal digit family'\",\n \"D3100\": \"The radix of the formatBase function must be between 2 and 36. It was given {{value}}\",\n \"D3110\": \"The argument of the toMillis function must be an ISO 8601 formatted timestamp. Given {{value}}\",\n \"D3120\": \"Syntax error in expression passed to function eval: {{value}}\",\n \"D3121\": \"Dynamic error evaluating the expression passed to function eval: {{value}}\",\n \"D3130\": \"Formatting or parsing an integer as a sequence starting with {{value}} is not supported by this implementation\",\n \"D3131\": \"In a decimal digit pattern, all digits must be from the same decimal group\",\n \"D3132\": \"Unknown component specifier {{value}} in date/time picture string\",\n \"D3133\": \"The 'name' modifier can only be applied to months and days in the date/time picture string, not {{value}}\",\n \"D3134\": \"The timezone integer format specifier cannot have more than four digits\",\n \"D3135\": \"No matching closing bracket ']' in date/time picture string\",\n \"D3136\": \"The date/time picture string is missing specifiers required to parse the timestamp\",\n \"D3137\": \"{{{message}}}\",\n \"D3138\": \"The $single() function expected exactly 1 matching result. Instead it matched more.\",\n \"D3139\": \"The $single() function expected exactly 1 matching result. Instead it matched 0.\",\n \"D3140\": \"Malformed URL passed to ${{{functionName}}}(): {{value}}\",\n \"D3141\": \"{{{message}}}\"\n };\n\n /**\n * lookup a message template from the catalog and substitute the inserts.\n * Populates `err.message` with the substituted message. Leaves `err.message`\n * untouched if code lookup fails.\n * @param {string} err - error code to lookup\n * @returns {undefined} - `err` is modified in place\n */\n function populateMessage(err) {\n var template = errorCodes[err.code];\n if(typeof template !== 'undefined') {\n // if there are any handlebars, replace them with the field references\n // triple braces - replace with value\n // double braces - replace with json stringified value\n var message = template.replace(/\\{\\{\\{([^}]+)}}}/g, function() {\n return err[arguments[1]];\n });\n message = message.replace(/\\{\\{([^}]+)}}/g, function() {\n return JSON.stringify(err[arguments[1]]);\n });\n err.message = message;\n }\n // Otherwise retain the original `err.message`\n }\n\n /**\n * JSONata\n * @param {Object} expr - JSONata expression\n * @param {Object} options\n * @param {boolean} options.recover: attempt to recover on parse error\n * @param {Function} options.RegexEngine: RegEx class constructor to use\n * @returns {{evaluate: evaluate, assign: assign}} Evaluated expression\n */\n function jsonata(expr, options) {\n var ast;\n var errors;\n try {\n ast = parser(expr, options && options.recover);\n errors = ast.errors;\n delete ast.errors;\n } catch(err) {\n // insert error message into structure\n populateMessage(err); // possible side-effects on `err`\n throw err;\n }\n var environment = createFrame(staticFrame);\n\n var timestamp = new Date(); // will be overridden on each call to evalute()\n environment.bind('now', defineFunction(function(picture, timezone) {\n return datetime.fromMillis(timestamp.getTime(), picture, timezone);\n }, '<s?s?:s>'));\n environment.bind('millis', defineFunction(function() {\n return timestamp.getTime();\n }, '<:n>'));\n\n if(options && options.RegexEngine) {\n jsonata.RegexEngine = options.RegexEngine;\n } else {\n jsonata.RegexEngine = RegExp;\n }\n\n return {\n evaluate: async function (input, bindings, callback) {\n // throw if the expression compiled with syntax errors\n if(typeof errors !== 'undefined') {\n var err = {\n code: 'S0500',\n position: 0\n };\n populateMessage(err); // possible side-effects on `err`\n throw err;\n }\n\n if (typeof bindings !== 'undefined') {\n var exec_env;\n // the variable bindings have been passed in - create a frame to hold these\n exec_env = createFrame(environment);\n for (var v in bindings) {\n exec_env.bind(v, bindings[v]);\n }\n } else {\n exec_env = environment;\n }\n // put the input document into the environment as the root object\n exec_env.bind('$', input);\n\n // capture the timestamp and put it in the execution environment\n // the $now() and $millis() functions will return this value - whenever it is called\n timestamp = new Date();\n exec_env.timestamp = timestamp;\n\n // if the input is a JSON array, then wrap it in a singleton sequence so it gets treated as a single input\n if(Array.isArray(input) && !isSequence(input)) {\n input = createSequence(input);\n input.outerWrapper = true;\n }\n\n var it;\n try {\n it = await evaluate(ast, input, exec_env);\n if (typeof callback === \"function\") {\n callback(null, it);\n }\n return it;\n } catch (err) {\n // insert error message into structure\n populateMessage(err); // possible side-effects on `err`\n throw err;\n }\n },\n assign: function (name, value) {\n environment.bind(name, value);\n },\n registerFunction: function(name, implementation, signature) {\n var func = defineFunction(implementation, signature);\n environment.bind(name, func);\n },\n ast: function() {\n return ast;\n },\n errors: function() {\n return errors;\n }\n };\n }\n\n jsonata.parser = parser; // TODO remove this in a future release - use ast() instead\n\n return jsonata;\n\n})();\n\nmodule.exports = jsonata;\n\n},{\"./datetime\":1,\"./functions\":2,\"./parser\":4,\"./signature\":5,\"./utils\":6}],4:[function(require,module,exports){\n/**\n * © Copyright IBM Corp. 2016, 2018 All Rights Reserved\n * Project name: JSONata\n * This project is licensed under the MIT License, see LICENSE\n */\n\nvar parseSignature = require('./signature');\n\nconst parser = (() => {\n 'use strict';\n\n var operators = {\n '.': 75,\n '[': 80,\n ']': 0,\n '{': 70,\n '}': 0,\n '(': 80,\n ')': 0,\n ',': 0,\n '@': 80,\n '#': 80,\n ';': 80,\n ':': 80,\n '?': 20,\n '+': 50,\n '-': 50,\n '*': 60,\n '/': 60,\n '%': 60,\n '|': 20,\n '=': 40,\n '<': 40,\n '>': 40,\n '^': 40,\n '**': 60,\n '..': 20,\n ':=': 10,\n '!=': 40,\n '<=': 40,\n '>=': 40,\n '~>': 40,\n '?:': 40,\n '??': 40,\n 'and': 30,\n 'or': 25,\n 'in': 40,\n '&': 50,\n '!': 0, // not an operator, but needed as a stop character for name tokens\n '~': 0 // not an operator, but needed as a stop character for name tokens\n };\n\n var escapes = { // JSON string escape sequences - see json.org\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n 'b': '\\b',\n 'f': '\\f',\n 'n': '\\n',\n 'r': '\\r',\n 't': '\\t'\n };\n\n // Tokenizer (lexer) - invoked by the parser to return one token at a time\n var tokenizer = function (path) {\n var position = 0;\n var length = path.length;\n\n var create = function (type, value) {\n var obj = {type: type, value: value, position: position};\n return obj;\n };\n\n var scanRegex = function () {\n // the prefix '/' will have been previously scanned. Find the end of the regex.\n // search for closing '/' ignoring any that are escaped, or within brackets\n var start = position;\n var depth = 0;\n var pattern;\n var flags;\n\n var isClosingSlash = function (position) {\n if (path.charAt(position) === '/' && depth === 0) {\n var backslashCount = 0;\n while (path.charAt(position - (backslashCount + 1)) === '\\\\') {\n backslashCount++;\n }\n if (backslashCount % 2 === 0) {\n return true;\n }\n }\n return false;\n };\n\n while (position < length) {\n var currentChar = path.charAt(position);\n if (isClosingSlash(position)) {\n // end of regex found\n pattern = path.substring(start, position);\n if (pattern === '') {\n throw {\n code: \"S0301\",\n stack: (new Error()).stack,\n position: position\n };\n }\n position++;\n currentChar = path.charAt(position);\n // flags\n start = position;\n while (currentChar === 'i' || currentChar === 'm') {\n position++;\n currentChar = path.charAt(position);\n }\n flags = path.substring(start, position) + 'g';\n return new RegExp(pattern, flags);\n }\n if ((currentChar === '(' || currentChar === '[' || currentChar === '{') && path.charAt(position - 1) !== '\\\\') {\n depth++;\n }\n if ((currentChar === ')' || currentChar === ']' || currentChar === '}') && path.charAt(position - 1) !== '\\\\') {\n depth--;\n }\n\n position++;\n }\n throw {\n code: \"S0302\",\n stack: (new Error()).stack,\n position: position\n };\n };\n\n var next = function (prefix) {\n if (position >= length) return null;\n var currentChar = path.charAt(position);\n // skip whitespace\n while (position < length && ' \\t\\n\\r\\v'.indexOf(currentChar) > -1) {\n position++;\n currentChar = path.charAt(position);\n }\n // skip comments\n if (currentChar === '/' && path.charAt(position + 1) === '*') {\n var commentStart = position;\n position += 2;\n currentChar = path.charAt(position);\n while (!(currentChar === '*' && path.charAt(position + 1) === '/')) {\n currentChar = path.charAt(++position);\n if (position >= length) {\n // no closing tag\n throw {\n code: \"S0106\",\n stack: (new Error()).stack,\n position: commentStart\n };\n }\n }\n position += 2;\n currentChar = path.charAt(position);\n return next(prefix); // need this to swallow any following whitespace\n }\n // test for regex\n if (prefix !== true && currentChar === '/') {\n position++;\n return create('regex', scanRegex());\n }\n // handle double-char operators\n if (currentChar === '.' && path.charAt(position + 1) === '.') {\n // double-dot .. range operator\n position += 2;\n return create('operator', '..');\n }\n if (currentChar === ':' && path.charAt(position + 1) === '=') {\n // := assignment\n position += 2;\n return create('operator', ':=');\n }\n if (currentChar === '!' && path.charAt(position + 1) === '=') {\n // !=\n position += 2;\n return create('operator', '!=');\n }\n if (currentChar === '>' && path.charAt(position + 1) === '=') {\n // >=\n position += 2;\n return create('operator', '>=');\n }\n if (currentChar === '<' && path.charAt(position + 1) === '=') {\n // <=\n position += 2;\n return create('operator', '<=');\n }\n if (currentChar === '*' && path.charAt(position + 1) === '*') {\n // ** descendant wildcard\n position += 2;\n return create('operator', '**');\n }\n if (currentChar === '~' && path.charAt(position + 1) === '>') {\n // ~> chain function\n position += 2;\n return create('operator', '~>');\n }\n if (currentChar === '?' && path.charAt(position + 1) === ':') {\n // ?: default / elvis operator\n position += 2;\n return create('operator', '?:');\n }\n if (currentChar === '?' && path.charAt(position + 1) === '?') {\n // ?? coalescing operator\n position += 2;\n return create('operator', '??');\n }\n // test for single char operators\n if (Object.prototype.hasOwnProperty.call(operators, currentChar)) {\n position++;\n return create('operator', currentChar);\n }\n // test for string literals\n if (currentChar === '\"' || currentChar === \"'\") {\n var quoteType = currentChar;\n // double quoted string literal - find end of string\n position++;\n var qstr = \"\";\n while (position < length) {\n currentChar = path.charAt(position);\n if (currentChar === '\\\\') { // escape sequence\n position++;\n currentChar = path.charAt(position);\n if (Object.prototype.hasOwnProperty.call(escapes, currentChar)) {\n qstr += escapes[currentChar];\n } else if (currentChar === 'u') {\n // \\u should be followed by 4 hex digits\n var octets = path.substr(position + 1, 4);\n if (/^[0-9a-fA-F]+$/.test(octets)) {\n var codepoint = parseInt(octets, 16);\n qstr += String.fromCharCode(codepoint);\n position += 4;\n } else {\n throw {\n code: \"S0104\",\n stack: (new Error()).stack,\n position: position\n };\n }\n } else {\n // illegal escape sequence\n throw {\n code: \"S0103\",\n stack: (new Error()).stack,\n position: position,\n token: currentChar\n };\n\n }\n } else if (currentChar === quoteType) {\n position++;\n return create('string', qstr);\n } else {\n qstr += currentChar;\n }\n position++;\n }\n throw {\n code: \"S0101\",\n stack: (new Error()).stack,\n position: position\n };\n }\n // test for numbers\n var numregex = /^-?(0|([1-9][0-9]*))(\\.[0-9]+)?([Ee][-+]?[0-9]+)?/;\n var match = numregex.exec(path.substring(position));\n if (match !== null) {\n var num = parseFloat(match[0]);\n if (!isNaN(num) && isFinite(num)) {\n position += match[0].length;\n return create('number', num);\n } else {\n throw {\n code: \"S0102\",\n stack: (new Error()).stack,\n position: position,\n token: match[0]\n };\n }\n }\n // test for quoted names (backticks)\n var name;\n if (currentChar === '`') {\n // scan for closing quote\n position++;\n var end = path.indexOf('`', position);\n if (end !== -1) {\n name = path.substring(position, end);\n position = end + 1;\n return create('name', name);\n }\n position = length;\n throw {\n code: \"S0105\",\n stack: (new Error()).stack,\n position: position\n };\n }\n // test for names\n var i = position;\n var ch;\n for (; ;) {\n ch = path.charAt(i);\n if (i === length || ' \\t\\n\\r\\v'.indexOf(ch) > -1 || Object.prototype.hasOwnProperty.call(operators, ch)) {\n if (path.charAt(position) === '$') {\n // variable reference\n name = path.substring(position + 1, i);\n position = i;\n return create('variable', name);\n } else {\n name = path.substring(position, i);\n position = i;\n switch (name) {\n case 'or':\n case 'in':\n case 'and':\n return create('operator', name);\n case 'true':\n return create('value', true);\n case 'false':\n return create('value', false);\n case 'null':\n return create('value', null);\n default:\n if (position === length && name === '') {\n // whitespace at end of input\n return null;\n }\n return create('name', name);\n }\n }\n } else {\n i++;\n }\n }\n };\n\n return next;\n };\n\n // This parser implements the 'Top down operator precedence' algorithm developed by Vaughan R Pratt; http://dl.acm.org/citation.cfm?id=512931.\n // and builds on the Javascript framework described by Douglas Crockford at http://javascript.crockford.com/tdop/tdop.html\n // and in 'Beautiful Code', edited by Andy Oram and Greg Wilson, Copyright 2007 O'Reilly Media, Inc. 798-0-596-51004-6\n\n var parser = function (source, recover) {\n var node;\n var lexer;\n\n var symbol_table = {};\n var errors = [];\n\n var remainingTokens = function () {\n var remaining = [];\n if (node.id !== '(end)') {\n remaining.push({type: node.type, value: node.value, position: node.position});\n }\n var nxt = lexer();\n while (nxt !== null) {\n remaining.push(nxt);\n nxt = lexer();\n }\n return remaining;\n };\n\n var base_symbol = {\n nud: function () {\n // error - symbol has been invoked as a unary operator\n var err = {\n code: 'S0211',\n token: this.value,\n position: this.position\n };\n\n if (recover) {\n err.remaining = remainingTokens();\n err.type = 'error';\n errors.push(err);\n return err;\n } else {\n err.stack = (new Error()).stack;\n throw err;\n }\n }\n };\n\n var symbol = function (id, bp) {\n var s = symbol_table[id];\n bp = bp || 0;\n if (s) {\n if (bp >= s.lbp) {\n s.lbp = bp;\n }\n } else {\n s = Object.create(base_symbol);\n s.id = s.value = id;\n s.lbp = bp;\n symbol_table[id] = s;\n }\n return s;\n };\n\n var handleError = function (err) {\n if (recover) {\n // tokenize the rest of the buffer and add it to an error token\n err.remaining = remainingTokens();\n errors.push(err);\n var symbol = symbol_table[\"(error)\"];\n node = Object.create(symbol);\n node.error = err;\n node.type = \"(error)\";\n return node;\n } else {\n err.stack = (new Error()).stack;\n throw err;\n }\n };\n\n var advance = function (id, infix) {\n if (id && node.id !== id) {\n var code;\n if (node.id === '(end)') {\n // unexpected end of buffer\n code = \"S0203\";\n } else {\n code = \"S0202\";\n }\n var err = {\n code: code,\n position: node.position,\n token: node.value,\n value: id\n };\n return handleError(err);\n }\n var next_token = lexer(infix);\n if (next_token === null) {\n node = symbol_table[\"(end)\"];\n node.position = source.length;\n return node;\n }\n var value = next_token.value;\n var type = next_token.type;\n var symbol;\n switch (type) {\n case 'name':\n case 'variable':\n symbol = symbol_table[\"(name)\"];\n break;\n case 'operator':\n symbol = symbol_table[value];\n if (!symbol) {\n return handleError({\n code: \"S0204\",\n stack: (new Error()).stack,\n position: next_token.position,\n token: value\n });\n }\n break;\n case 'string':\n case 'number':\n case 'value':\n symbol = symbol_table[\"(literal)\"];\n break;\n case 'regex':\n type = \"regex\";\n symbol = symbol_table[\"(regex)\"];\n break;\n /* istanbul ignore next */\n default:\n return handleError({\n code: \"S0205\",\n stack: (new Error()).stack,\n position: next_token.position,\n token: value\n });\n }\n\n node = Object.create(symbol);\n node.value = value;\n node.type = type;\n node.position = next_token.position;\n return node;\n };\n\n // Pratt's algorithm\n var expression = function (rbp) {\n var left;\n var t = node;\n advance(null, true);\n left = t.nud();\n while (rbp < node.lbp) {\n t = node;\n advance();\n left = t.led(left);\n }\n return left;\n };\n\n var terminal = function (id) {\n var s = symbol(id, 0);\n s.nud = function () {\n return this;\n };\n };\n\n // match infix operators\n // <expression> <operator> <expression>\n // left associative\n var infix = function (id, bp, led) {\n var bindingPower = bp || operators[id];\n var s = symbol(id, bindingPower);\n s.led = led || function (left) {\n this.lhs = left;\n this.rhs = expression(bindingPower);\n this.type = \"binary\";\n return this;\n };\n return s;\n };\n\n // match infix operators\n // <expression> <operator> <expression>\n // right associative\n var infixr = function (id, bp, led) {\n var s = symbol(id, bp);\n s.led = led;\n return s;\n };\n\n // match prefix operators\n // <operator> <expression>\n var prefix = function (id, nud) {\n var s = symbol(id);\n s.nud = nud || function () {\n this.expression = expression(70);\n this.type = \"unary\";\n return this;\n };\n return s;\n };\n\n terminal(\"(end)\");\n terminal(\"(name)\");\n terminal(\"(literal)\");\n terminal(\"(regex)\");\n symbol(\":\");\n symbol(\";\");\n symbol(\",\");\n symbol(\")\");\n symbol(\"]\");\n symbol(\"}\");\n symbol(\"..\"); // range operator\n infix(\".\"); // map operator\n infix(\"+\"); // numeric addition\n infix(\"-\"); // numeric subtraction\n infix(\"*\"); // numeric multiplication\n infix(\"/\"); // numeric division\n infix(\"%\"); // numeric modulus\n infix(\"=\"); // equality\n infix(\"<\"); // less than\n infix(\">\"); // greater than\n infix(\"!=\"); // not equal to\n infix(\"<=\"); // less than or equal\n infix(\">=\"); // greater than or equal\n infix(\"&\"); // string concatenation\n infix(\"and\"); // Boolean AND\n infix(\"or\"); // Boolean OR\n infix(\"in\"); // is member of array\n terminal(\"and\"); // the 'keywords' can also be used as terminals (field names)\n terminal(\"or\"); //\n terminal(\"in\"); //\n prefix(\"-\"); // unary numeric negation\n infix(\"~>\"); // function application\n\n // coalescing operator\n infix(\"??\", operators['??'], function (left) {\n this.type = 'condition';\n this.condition = {\n type: 'function',\n value: '(',\n procedure: { type: 'variable', value: 'exists' },\n arguments: [left]\n };\n this.then = left;\n this.else = expression(0);\n return this;\n });\n\n infixr(\"(error)\", 10, function (left) {\n this.lhs = left;\n\n this.error = node.error;\n this.remaining = remainingTokens();\n this.type = 'error';\n return this;\n });\n\n // field wildcard (single level)\n prefix('*', function () {\n this.type = \"wildcard\";\n return this;\n });\n\n // descendant wildcard (multi-level)\n prefix('**', function () {\n this.type = \"descendant\";\n return this;\n });\n\n // parent operator\n prefix('%', function () {\n this.type = \"parent\";\n return this;\n });\n\n // function invocation\n infix(\"(\", operators['('], function (left) {\n // left is is what we are trying to invoke\n this.procedure = left;\n this.type = 'function';\n this.arguments = [];\n if (node.id !== ')') {\n for (; ;) {\n if (node.type === 'operator' && node.id === '?') {\n // partial function application\n this.type = 'partial';\n this.arguments.push(node);\n advance('?');\n } else {\n this.arguments.push(expression(0));\n }\n if (node.id !== ',') break;\n advance(',');\n }\n }\n advance(\")\", true);\n // if the name of the function is 'function' or λ, then this is function definition (lambda function)\n if (left.type === 'name' && (left.value === 'function' || left.value === '\\u03BB')) {\n // all of the args must be VARIABLE tokens\n this.arguments.forEach(function (arg, index) {\n if (arg.type !== 'variable') {\n return handleError({\n code: \"S0208\",\n stack: (new Error()).stack,\n position: arg.position,\n token: arg.value,\n value: index + 1\n });\n }\n });\n this.type = 'lambda';\n // is the next token a '<' - if so, parse the function signature\n if (node.id === '<') {\n var sigPos = node.position;\n var depth = 1;\n var sig = '<';\n while (depth > 0 && node.id !== '{' && node.id !== '(end)') {\n var tok = advance();\n if (tok.id === '>') {\n depth--;\n } else if (tok.id === '<') {\n depth++;\n }\n sig += tok.value;\n }\n advance('>');\n try {\n this.signature = parseSignature(sig);\n } catch (err) {\n // insert the position into this error\n err.position = sigPos + err.offset;\n return handleError(err);\n }\n }\n // parse the function body\n advance('{');\n this.body = expression(0);\n advance('}');\n }\n return this;\n });\n\n // parenthesis - block expression\n prefix(\"(\", function () {\n var expressions = [];\n while (node.id !== \")\") {\n expressions.push(expression(0));\n if (node.id !== \";\") {\n break;\n }\n advance(\";\");\n }\n advance(\")\", true);\n this.type = 'block';\n this.expressions = expressions;\n return this;\n });\n\n // array constructor\n prefix(\"[\", function () {\n var a = [];\n if (node.id !== \"]\") {\n for (; ;) {\n var item = expression(0);\n if (node.id === \"..\") {\n // range operator\n var range = {type: \"binary\", value: \"..\", position: node.position, lhs: item};\n advance(\"..\");\n range.rhs = expression(0);\n item = range;\n }\n a.push(item);\n if (node.id !== \",\") {\n break;\n }\n advance(\",\");\n }\n }\n advance(\"]\", true);\n this.expressions = a;\n this.type = \"unary\";\n return this;\n });\n\n // filter - predicate or array index\n infix(\"[\", operators['['], function (left) {\n if (node.id === \"]\") {\n // empty predicate means maintain singleton arrays in the output\n var step = left;\n while (step && step.type === 'binary' && step.value === '[') {\n step = step.lhs;\n }\n step.keepArray = true;\n advance(\"]\");\n return left;\n } else {\n this.lhs = left;\n this.rhs = expression(operators[']']);\n this.type = 'binary';\n advance(\"]\", true);\n return this;\n }\n });\n\n // order-by\n infix(\"^\", operators['^'], function (left) {\n advance(\"(\");\n var terms = [];\n for (; ;) {\n var term = {\n descending: false\n };\n if (node.id === \"<\") {\n // ascending sort\n advance(\"<\");\n } else if (node.id === \">\") {\n // descending sort\n term.descending = true;\n advance(\">\");\n } else {\n //unspecified - default to ascending\n }\n term.expression = expression(0);\n terms.push(term);\n if (node.id !== \",\") {\n break;\n }\n advance(\",\");\n }\n advance(\")\");\n this.lhs = left;\n this.rhs = terms;\n this.type = 'binary';\n return this;\n });\n\n var objectParser = function (left) {\n var a = [];\n if (node.id !== \"}\") {\n for (; ;) {\n var n = expression(0);\n advance(\":\");\n var v = expression(0);\n a.push([n, v]); // holds an array of name/value expression pairs\n if (node.id !== \",\") {\n break;\n }\n advance(\",\");\n }\n }\n advance(\"}\", true);\n if (typeof left === 'undefined') {\n // NUD - unary prefix form\n this.lhs = a;\n this.type = \"unary\";\n } else {\n // LED - binary infix form\n this.lhs = left;\n this.rhs = a;\n this.type = 'binary';\n }\n return this;\n };\n\n // object constructor\n prefix(\"{\", objectParser);\n\n // object grouping\n infix(\"{\", operators['{'], objectParser);\n\n // bind variable\n infixr(\":=\", operators[':='], function (left) {\n if (left.type !== 'variable') {\n return handleError({\n code: \"S0212\",\n stack: (new Error()).stack,\n position: left.position,\n token: left.value\n });\n }\n this.lhs = left;\n this.rhs = expression(operators[':='] - 1); // subtract 1 from bindingPower for right associative operators\n this.type = \"binary\";\n return this;\n });\n\n // focus variable bind\n infix(\"@\", operators['@'], function (left) {\n this.lhs = left;\n this.rhs = expression(operators['@']);\n if(this.rhs.type !== 'variable') {\n return handleError({\n code: \"S0214\",\n stack: (new Error()).stack,\n position: this.rhs.position,\n token: \"@\"\n });\n }\n this.type = \"binary\";\n return this;\n });\n\n // index (position) variable bind\n infix(\"#\", operators['#'], function (left) {\n this.lhs = left;\n this.rhs = expression(operators['#']);\n if(this.rhs.type !== 'variable') {\n return handleError({\n code: \"S0214\",\n stack: (new Error()).stack,\n position: this.rhs.position,\n token: \"#\"\n });\n }\n this.type = \"binary\";\n return this;\n });\n\n // if/then/else ternary operator ?:\n infix(\"?\", operators['?'], function (left) {\n this.type = 'condition';\n this.condition = left;\n this.then = expression(0);\n if (node.id === ':') {\n // else condition\n advance(\":\");\n this.else = expression(0);\n }\n return this;\n });\n\n // elvis/default operator\n infix(\"?:\", operators['?:'], function (left) {\n this.type = 'condition';\n this.condition = left;\n this.then = left;\n this.else = expression(0);\n return this;\n });\n\n // object transformer\n prefix(\"|\", function () {\n this.type = 'transform';\n this.pattern = expression(0);\n advance('|');\n this.update = expression(0);\n if (node.id === ',') {\n advance(',');\n this.delete = expression(0);\n }\n advance('|');\n return this;\n });\n\n // tail call optimization\n // this is invoked by the post parser to analyse lambda functions to see\n // if they make a tail call. If so, it is replaced by a thunk which will\n // be invoked by the trampoline loop during function application.\n // This enables tail-recursive functions to be written without growing the stack\n var tailCallOptimize = function (expr) {\n var result;\n if (expr.type === 'function' && !expr.predicate) {\n var thunk = {type: 'lambda', thunk: true, arguments: [], position: expr.position};\n thunk.body = expr;\n result = thunk;\n } else if (expr.type === 'condition') {\n // analyse both branches\n expr.then = tailCallOptimize(expr.then);\n if (typeof expr.else !== 'undefined') {\n expr.else = tailCallOptimize(expr.else);\n }\n result = expr;\n } else if (expr.type === 'block') {\n // only the last expression in the block\n var length = expr.expressions.length;\n if (length > 0) {\n expr.expressions[length - 1] = tailCallOptimize(expr.expressions[length - 1]);\n }\n result = expr;\n } else {\n result = expr;\n }\n return result;\n };\n\n var ancestorLabel = 0;\n var ancestorIndex = 0;\n var ancestry = [];\n\n var seekParent = function (node, slot) {\n switch (node.type) {\n case 'name':\n case 'wildcard':\n slot.level--;\n if(slot.level === 0) {\n if (typeof node.ancestor === 'undefined') {\n node.ancestor = slot;\n } else {\n // reuse the existing label\n ancestry[slot.index].slot.label = node.ancestor.label;\n node.ancestor = slot;\n }\n node.tuple = true;\n }\n break;\n case 'parent':\n slot.level++;\n break;\n case 'block':\n // look in last expression in the block\n if(node.expressions.length > 0) {\n node.tuple = true;\n slot = seekParent(node.expressions[node.expressions.length - 1], slot);\n }\n break;\n case 'path':\n // last step in path\n node.tuple = true;\n var index = node.steps.length - 1;\n slot = seekParent(node.steps[index--], slot);\n while (slot.level > 0 && index >= 0) {\n // check previous steps\n slot = seekParent(node.steps[index--], slot);\n }\n break;\n default:\n // error - can't derive ancestor\n throw {\n code: \"S0217\",\n token: node.type,\n position: node.position\n };\n }\n return slot;\n };\n\n var pushAncestry = function(result, value) {\n if(typeof value.seekingParent !== 'undefined' || value.type === 'parent') {\n var slots = (typeof value.seekingParent !== 'undefined') ? value.seekingParent : [];\n if (value.type === 'parent') {\n slots.push(value.slot);\n }\n if(typeof result.seekingParent === 'undefined') {\n result.seekingParent = slots;\n } else {\n Array.prototype.push.apply(result.seekingParent, slots);\n }\n }\n };\n\n var resolveAncestry = function(path) {\n var index = path.steps.length - 1;\n var laststep = path.steps[index];\n var slots = (typeof laststep.seekingParent !== 'undefined') ? laststep.seekingParent : [];\n if (laststep.type === 'parent') {\n slots.push(laststep.slot);\n }\n for(var is = 0; is < slots.length; is++) {\n var slot = slots[is];\n index = path.steps.length - 2;\n while (slot.level > 0) {\n if (index < 0) {\n if(typeof path.seekingParent === 'undefined') {\n path.seekingParent = [slot];\n } else {\n path.seekingParent.push(slot);\n }\n break;\n }\n // try previous step\n var step = path.steps[index--];\n // multiple contiguous steps that bind the focus should be skipped\n while(index >= 0 && step.focus && path.steps[index].focus) {\n step = path.steps[index--];\n }\n slot = seekParent(step, slot);\n }\n }\n };\n\n // post-parse stage\n // the purpose of this is to add as much semantic value to the parse tree as possible\n // in order to simplify the work of the evaluator.\n // This includes flattening the parts of the AST representing location paths,\n // converting them to arrays of steps which in turn may contain arrays of predicates.\n // following this, nodes containing '.' and '[' should be eliminated from the AST.\n var processAST = function (expr) {\n var result;\n switch (expr.type) {\n case 'binary':\n switch (expr.value) {\n case '.':\n var lstep = processAST(expr.lhs);\n\n if (lstep.type === 'path') {\n result = lstep;\n } else {\n result = {type: 'path', steps: [lstep]};\n }\n if(lstep.type === 'parent') {\n result.seekingParent = [lstep.slot];\n }\n var rest = processAST(expr.rhs);\n if (rest.type === 'function' &&\n rest.procedure.type === 'path' &&\n rest.procedure.steps.length === 1 &&\n rest.procedure.steps[0].type === 'name' &&\n result.steps[result.steps.length - 1].type === 'function') {\n // next function in chain of functions - will override a thenable\n result.steps[result.steps.length - 1].nextFunction = rest.procedure.steps[0].value;\n }\n if (rest.type === 'path') {\n Array.prototype.push.apply(result.steps, rest.steps);\n } else {\n if(typeof rest.predicate !== 'undefined') {\n rest.stages = rest.predicate;\n delete rest.predicate;\n }\n result.steps.push(rest);\n }\n // any steps within a path that are string literals, should be changed to 'name'\n result.steps.filter(function (step) {\n if (step.type === 'number' || step.type === 'value') {\n // don't allow steps to be numbers or the values true/false/null\n throw {\n code: \"S0213\",\n stack: (new Error()).stack,\n position: step.position,\n value: step.value\n };\n }\n return step.type === 'string';\n }).forEach(function (lit) {\n lit.type = 'name';\n });\n // any step that signals keeping a singleton array, should be flagged on the path\n if (result.steps.filter(function (step) {\n return step.keepArray === true;\n }).length > 0) {\n result.keepSingletonArray = true;\n }\n // if first step is a path constructor, flag it for special handling\n var firststep = result.steps[0];\n if (firststep.type === 'unary' && firststep.value === '[') {\n firststep.consarray = true;\n }\n // if the last step is an array constructor, flag it so it doesn't flatten\n var laststep = result.steps[result.steps.length - 1];\n if (laststep.type === 'unary' && laststep.value === '[') {\n laststep.consarray = true;\n }\n resolveAncestry(result);\n break;\n case '[':\n // predicated step\n // LHS is a step or a predicated step\n // RHS is the predicate expr\n result = processAST(expr.lhs);\n var step = result;\n var type = 'predicate';\n if (result.type === 'path') {\n step = result.steps[result.steps.length - 1];\n type = 'stages';\n }\n if (typeof step.group !== 'undefined') {\n throw {\n code: \"S0209\",\n stack: (new Error()).stack,\n position: expr.position\n };\n }\n if (typeof step[type] === 'undefined') {\n step[type] = [];\n }\n var predicate = processAST(expr.rhs);\n if(typeof predicate.seekingParent !== 'undefined') {\n predicate.seekingParent.forEach(slot => {\n if(slot.level === 1) {\n seekParent(step, slot);\n } else {\n slot.level--;\n }\n });\n pushAncestry(step, predicate);\n }\n step[type].push({type: 'filter', expr: predicate, position: expr.position});\n break;\n case '{':\n // group-by\n // LHS is a step or a predicated step\n // RHS is the object constructor expr\n result = processAST(expr.lhs);\n if (typeof result.group !== 'undefined') {\n throw {\n code: \"S0210\",\n stack: (new Error()).stack,\n position: expr.position\n };\n }\n // object constructor - process each pair\n result.group = {\n lhs: expr.rhs.map(function (pair) {\n return [processAST(pair[0]), processAST(pair[1])];\n }),\n position: expr.position\n };\n break;\n case '^':\n // order-by\n // LHS is the array to be ordered\n // RHS defines the terms\n result = processAST(expr.lhs);\n if (result.type !== 'path') {\n result = {type: 'path', steps: [result]};\n }\n var sortStep = {type: 'sort', position: expr.position};\n sortStep.terms = expr.rhs.map(function (terms) {\n var expression = processAST(terms.expression);\n pushAncestry(sortStep, expression);\n return {\n descending: terms.descending,\n expression: expression\n };\n });\n result.steps.push(sortStep);\n resolveAncestry(result);\n break;\n case ':=':\n result = {type: 'bind', value: expr.value, position: expr.position};\n result.lhs = processAST(expr.lhs);\n result.rhs = processAST(expr.rhs);\n pushAncestry(result, result.rhs);\n break;\n case '@':\n result = processAST(expr.lhs);\n step = result;\n if (result.type === 'path') {\n step = result.steps[result.steps.length - 1];\n }\n // throw error if there are any predicates defined at this point\n // at this point the only type of stages can be predicates\n if(typeof step.stages !== 'undefined' || typeof step.predicate !== 'undefined') {\n throw {\n code: \"S0215\",\n stack: (new Error()).stack,\n position: expr.position\n };\n }\n // also throw if this is applied after an 'order-by' clause\n if(step.type === 'sort') {\n throw {\n code: \"S0216\",\n stack: (new Error()).stack,\n position: expr.position\n };\n }\n if(expr.keepArray) {\n step.keepArray = true;\n }\n step.focus = expr.rhs.value;\n step.tuple = true;\n break;\n case '#':\n result = processAST(expr.lhs);\n step = result;\n if (result.type === 'path') {\n step = result.steps[result.steps.length - 1];\n } else {\n result = {type: 'path', steps: [result]};\n if (typeof step.predicate !== 'undefined') {\n step.stages = step.predicate;\n delete step.predicate;\n }\n }\n if (typeof step.stages === 'undefined') {\n step.index = expr.rhs.value;\n } else {\n step.stages.push({type: 'index', value: expr.rhs.value, position: expr.position});\n }\n step.tuple = true;\n break;\n case '~>':\n result = {type: 'apply', value: expr.value, position: expr.position};\n result.lhs = processAST(expr.lhs);\n result.rhs = processAST(expr.rhs);\n result.keepArray = result.lhs.keepArray || result.rhs.keepArray;\n break;\n default:\n result = {type: expr.type, value: expr.value, position: expr.position};\n result.lhs = processAST(expr.lhs);\n result.rhs = processAST(expr.rhs);\n pushAncestry(result, result.lhs);\n pushAncestry(result, result.rhs);\n }\n break;\n case 'unary':\n result = {type: expr.type, value: expr.value, position: expr.position};\n if (expr.value === '[') {\n // array constructor - process each item\n result.expressions = expr.expressions.map(function (item) {\n var value = processAST(item);\n pushAncestry(result, value);\n return value;\n });\n } else if (expr.value === '{') {\n // object constructor - process each pair\n result.lhs = expr.lhs.map(function (pair) {\n var key = processAST(pair[0]);\n pushAncestry(result, key);\n var value = processAST(pair[1]);\n pushAncestry(result, value);\n return [key, value];\n });\n } else {\n // all other unary expressions - just process the expression\n result.expression = processAST(expr.expression);\n // if unary minus on a number, then pre-process\n if (expr.value === '-' && result.expression.type === 'number') {\n result = result.expression;\n result.value = -result.value;\n } else {\n pushAncestry(result, result.expression);\n }\n }\n break;\n case 'function':\n case 'partial':\n result = {type: expr.type, name: expr.name, value: expr.value, position: expr.position};\n result.arguments = expr.arguments.map(function (arg) {\n var argAST = processAST(arg);\n pushAncestry(result, argAST);\n return argAST;\n });\n result.procedure = processAST(expr.procedure);\n break;\n case 'lambda':\n result = {\n type: expr.type,\n arguments: expr.arguments,\n signature: expr.signature,\n position: expr.position\n };\n var body = processAST(expr.body);\n result.body = tailCallOptimize(body);\n break;\n case 'condition':\n result = {type: expr.type, position: expr.position};\n result.condition = processAST(expr.condition);\n pushAncestry(result, result.condition);\n result.then = processAST(expr.then);\n pushAncestry(result, result.then);\n if (typeof expr.else !== 'undefined') {\n result.else = processAST(expr.else);\n pushAncestry(result, result.else);\n }\n break;\n case 'transform':\n result = {type: expr.type, position: expr.position};\n result.pattern = processAST(expr.pattern);\n result.update = processAST(expr.update);\n if (typeof expr.delete !== 'undefined') {\n result.delete = processAST(expr.delete);\n }\n break;\n case 'block':\n result = {type: expr.type, position: expr.position};\n // array of expressions - process each one\n result.expressions = expr.expressions.map(function (item) {\n var part = processAST(item);\n pushAncestry(result, part);\n if (part.consarray || (part.type === 'path' && part.steps[0].consarray)) {\n result.consarray = true;\n }\n return part;\n });\n // TODO scan the array of expressions to see if any of them assign variables\n // if so, need to mark the block as one that needs to create a new frame\n break;\n case 'name':\n result = {type: 'path', steps: [expr]};\n if (expr.keepArray) {\n result.keepSingletonArray = true;\n }\n break;\n case 'parent':\n result = {type: 'parent', slot: { label: '!' + ancestorLabel++, level: 1, index: ancestorIndex++ } };\n ancestry.push(result);\n break;\n case 'string':\n case 'number':\n case 'value':\n case 'wildcard':\n case 'descendant':\n case 'variable':\n case 'regex':\n result = expr;\n break;\n case 'operator':\n // the tokens 'and' and 'or' might have been used as a name rather than an operator\n if (expr.value === 'and' || expr.value === 'or' || expr.value === 'in') {\n expr.type = 'name';\n result = processAST(expr);\n } else /* istanbul ignore else */ if (expr.value === '?') {\n // partial application\n result = expr;\n } else {\n throw {\n code: \"S0201\",\n stack: (new Error()).stack,\n position: expr.position,\n token: expr.value\n };\n }\n break;\n case 'error':\n result = expr;\n if (expr.lhs) {\n result = processAST(expr.lhs);\n }\n break;\n default:\n var code = \"S0206\";\n /* istanbul ignore else */\n if (expr.id === '(end)') {\n code = \"S0207\";\n }\n var err = {\n code: code,\n position: expr.position,\n token: expr.value\n };\n if (recover) {\n errors.push(err);\n return {type: 'error', error: err};\n } else {\n err.stack = (new Error()).stack;\n throw err;\n }\n }\n if (expr.keepArray) {\n result.keepArray = true;\n }\n return result;\n };\n\n // now invoke the tokenizer and the parser and return the syntax tree\n lexer = tokenizer(source);\n advance();\n // parse the tokens\n var expr = expression(0);\n if (node.id !== '(end)') {\n var err = {\n code: \"S0201\",\n position: node.position,\n token: node.value\n };\n handleError(err);\n }\n expr = processAST(expr);\n\n if(expr.type === 'parent' || typeof expr.seekingParent !== 'undefined') {\n // error - trying to derive ancestor at top level\n throw {\n code: \"S0217\",\n token: expr.type,\n position: expr.position\n };\n }\n\n if (errors.length > 0) {\n expr.errors = errors;\n }\n\n return expr;\n };\n\n return parser;\n})();\n\nmodule.exports = parser;\n\n},{\"./signature\":5}],5:[function(require,module,exports){\n/**\n * © Copyright IBM Corp. 2016, 2018 All Rights Reserved\n * Project name: JSONata\n * This project is licensed under the MIT License, see LICENSE\n */\n\nvar utils = require('./utils');\n\nconst signature = (() => {\n 'use strict';\n\n // A mapping between the function signature symbols and the full plural of the type\n // Expected to be used in error messages\n var arraySignatureMapping = {\n \"a\": \"arrays\",\n \"b\": \"booleans\",\n \"f\": \"functions\",\n \"n\": \"numbers\",\n \"o\": \"objects\",\n \"s\": \"strings\"\n };\n\n /**\n * Parses a function signature definition and returns a validation function\n * @param {string} signature - the signature between the <angle brackets>\n * @returns {Function} validation function\n */\n function parseSignature(signature) {\n // create a Regex that represents this signature and return a function that when invoked,\n // returns the validated (possibly fixed-up) arguments, or throws a validation error\n // step through the signature, one symbol at a time\n var position = 1;\n var params = [];\n var param = {};\n var prevParam = param;\n while (position < signature.length) {\n var symbol = signature.charAt(position);\n if (symbol === ':') {\n // TODO figure out what to do with the return type\n // ignore it for now\n break;\n }\n\n var next = function () {\n params.push(param);\n prevParam = param;\n param = {};\n };\n\n var findClosingBracket = function (str, start, openSymbol, closeSymbol) {\n // returns the position of the closing symbol (e.g. bracket) in a string\n // that balances the opening symbol at position start\n var depth = 1;\n var position = start;\n while (position < str.length) {\n position++;\n symbol = str.charAt(position);\n if (symbol === closeSymbol) {\n depth--;\n if (depth === 0) {\n // we're done\n break; // out of while loop\n }\n } else if (symbol === openSymbol) {\n depth++;\n }\n }\n return position;\n };\n\n switch (symbol) {\n case 's': // string\n case 'n': // number\n case 'b': // boolean\n case 'l': // not so sure about expecting null?\n case 'o': // object\n param.regex = '[' + symbol + 'm]';\n param.type = symbol;\n next();\n break;\n case 'a': // array\n // normally treat any value as singleton array\n param.regex = '[asnblfom]';\n param.type = symbol;\n param.array = true;\n next();\n break;\n case 'f': // function\n param.regex = 'f';\n param.type = symbol;\n next();\n break;\n case 'j': // any JSON type\n param.regex = '[asnblom]';\n param.type = symbol;\n next();\n break;\n case 'x': // any type\n param.regex = '[asnblfom]';\n param.type = symbol;\n next();\n break;\n case '-': // use context if param not supplied\n prevParam.context = true;\n prevParam.contextRegex = new RegExp(prevParam.regex); // pre-compiled to test the context type at runtime\n prevParam.regex += '?';\n break;\n case '?': // optional param\n case '+': // one or more\n prevParam.regex += symbol;\n break;\n case '(': // choice of types\n // search forward for matching ')'\n var endParen = findClosingBracket(signature, position, '(', ')');\n var choice = signature.substring(position + 1, endParen);\n if (choice.indexOf('<') === -1) {\n // no parameterized types, simple regex\n param.regex = '[' + choice + 'm]';\n } else {\n // TODO harder\n throw {\n code: \"S0402\",\n stack: (new Error()).stack,\n value: choice,\n offset: position\n };\n }\n param.type = '(' + choice + ')';\n position = endParen;\n next();\n break;\n case '<': // type parameter - can only be applied to 'a' and 'f'\n if (prevParam.type === 'a' || prevParam.type === 'f') {\n // search forward for matching '>'\n var endPos = findClosingBracket(signature, position, '<', '>');\n prevParam.subtype = signature.substring(position + 1, endPos);\n position = endPos;\n } else {\n throw {\n code: \"S0401\",\n stack: (new Error()).stack,\n value: prevParam.type,\n offset: position\n };\n }\n break;\n }\n position++;\n }\n var regexStr = '^' +\n params.map(function (param) {\n return '(' + param.regex + ')';\n }).join('') +\n '$';\n var regex = new RegExp(regexStr);\n var getSymbol = function (value) {\n var symbol;\n if (utils.isFunction(value)) {\n symbol = 'f';\n } else {\n var type = typeof value;\n switch (type) {\n case 'string':\n symbol = 's';\n break;\n case 'number':\n symbol = 'n';\n break;\n case 'boolean':\n symbol = 'b';\n break;\n case 'object':\n if (value === null) {\n symbol = 'l';\n } else if (Array.isArray(value)) {\n symbol = 'a';\n } else {\n symbol = 'o';\n }\n break;\n case 'undefined':\n default:\n // any value can be undefined, but should be allowed to match\n symbol = 'm'; // m for missing\n }\n }\n return symbol;\n };\n\n var throwValidationError = function (badArgs, badSig) {\n // to figure out where this went wrong we need apply each component of the\n // regex to each argument until we get to the one that fails to match\n var partialPattern = '^';\n var goodTo = 0;\n for (var index = 0; index < params.length; index++) {\n partialPattern += params[index].regex;\n var match = badSig.match(partialPattern);\n if (match === null) {\n // failed here\n throw {\n code: \"T0410\",\n stack: (new Error()).stack,\n value: badArgs[goodTo],\n index: goodTo + 1\n };\n }\n goodTo = match[0].length;\n }\n // if it got this far, it's probably because of extraneous arguments (we\n // haven't added the trailing '$' in the regex yet.\n throw {\n code: \"T0410\",\n stack: (new Error()).stack,\n value: badArgs[goodTo],\n index: goodTo + 1\n };\n };\n\n return {\n definition: signature,\n validate: function (args, context) {\n var suppliedSig = '';\n args.forEach(function (arg) {\n suppliedSig += getSymbol(arg);\n });\n var isValid = regex.exec(suppliedSig);\n if (isValid) {\n var validatedArgs = [];\n var argIndex = 0;\n params.forEach(function (param, index) {\n var arg = args[argIndex];\n var match = isValid[index + 1];\n if (match === '') {\n if (param.context && param.contextRegex) {\n // substitute context value for missing arg\n // first check that the context value is the right type\n var contextType = getSymbol(context);\n // test contextType against the regex for this arg (without the trailing ?)\n if (param.contextRegex.test(contextType)) {\n validatedArgs.push(context);\n } else {\n // context value not compatible with this argument\n throw {\n code: \"T0411\",\n stack: (new Error()).stack,\n value: context,\n index: argIndex + 1\n };\n }\n } else {\n validatedArgs.push(arg);\n argIndex++;\n }\n } else {\n // may have matched multiple args (if the regex ends with a '+'\n // split into single tokens\n match.split('').forEach(function (single) {\n if (param.type === 'a') {\n if (single === 'm') {\n // missing (undefined)\n arg = undefined;\n } else {\n arg = args[argIndex];\n var arrayOK = true;\n // is there type information on the contents of the array?\n if (typeof param.subtype !== 'undefined') {\n if (single !== 'a' && match !== param.subtype) {\n arrayOK = false;\n } else if (single === 'a') {\n if (arg.length > 0) {\n var itemType = getSymbol(arg[0]);\n if (itemType !== param.subtype.charAt(0)) { // TODO recurse further\n arrayOK = false;\n } else {\n // make sure every item in the array is this type\n var differentItems = arg.filter(function (val) {\n return (getSymbol(val) !== itemType);\n });\n arrayOK = (differentItems.length === 0);\n }\n }\n }\n }\n if (!arrayOK) {\n throw {\n code: \"T0412\",\n stack: (new Error()).stack,\n value: arg,\n index: argIndex + 1,\n type: arraySignatureMapping[param.subtype]\n };\n }\n // the function expects an array. If it's not one, make it so\n if (single !== 'a') {\n arg = [arg];\n }\n }\n validatedArgs.push(arg);\n argIndex++;\n } else {\n validatedArgs.push(arg);\n argIndex++;\n }\n });\n }\n });\n return validatedArgs;\n }\n throwValidationError(args, suppliedSig);\n }\n };\n }\n\n return parseSignature;\n})();\n\nmodule.exports = signature;\n\n},{\"./utils\":6}],6:[function(require,module,exports){\n/**\n * © Copyright IBM Corp. 2016, 2018 All Rights Reserved\n * Project name: JSONata\n * This project is licensed under the MIT License, see LICENSE\n */\n\nconst utils = (() => {\n 'use strict';\n\n /**\n * Check if value is a finite number\n * @param {float} n - number to evaluate\n * @returns {boolean} True if n is a finite number\n */\n function isNumeric(n) {\n var isNum = false;\n if(typeof n === 'number') {\n isNum = !isNaN(n);\n if (isNum && !isFinite(n)) {\n throw {\n code: \"D1001\",\n value: n,\n stack: (new Error()).stack\n };\n }\n }\n return isNum;\n }\n\n /**\n * Returns true if the arg is an array of strings\n * @param {*} arg - the item to test\n * @returns {boolean} True if arg is an array of strings\n */\n function isArrayOfStrings(arg) {\n var result = false;\n /* istanbul ignore else */\n if(Array.isArray(arg)) {\n result = (arg.filter(function(item){return typeof item !== 'string';}).length === 0);\n }\n return result;\n }\n\n /**\n * Returns true if the arg is an array of numbers\n * @param {*} arg - the item to test\n * @returns {boolean} True if arg is an array of numbers\n */\n function isArrayOfNumbers(arg) {\n var result = false;\n if(Array.isArray(arg)) {\n result = (arg.filter(function(item){return !isNumeric(item);}).length === 0);\n }\n return result;\n }\n\n /**\n * Create an empty sequence to contain query results\n * @returns {Array} - empty sequence\n */\n function createSequence() {\n var sequence = [];\n sequence.sequence = true;\n if (arguments.length === 1) {\n sequence.push(arguments[0]);\n }\n return sequence;\n }\n\n /**\n * Tests if a value is a sequence\n * @param {*} value the value to test\n * @returns {boolean} true if it's a sequence\n */\n function isSequence(value) {\n return value.sequence === true && Array.isArray(value);\n }\n\n /**\n *\n * @param {Object} arg - expression to test\n * @returns {boolean} - true if it is a function (lambda or built-in)\n */\n function isFunction(arg) {\n return ((arg && (arg._jsonata_function === true || arg._jsonata_lambda === true)) || typeof arg === 'function');\n }\n\n /**\n * Returns the arity (number of arguments) of the function\n * @param {*} func - the function\n * @returns {*} - the arity\n */\n function getFunctionArity(func) {\n var arity = typeof func.arity === 'number' ? func.arity :\n typeof func.implementation === 'function' ? func.implementation.length :\n typeof func.length === 'number' ? func.length : func.arguments.length;\n return arity;\n }\n\n /**\n * Tests whether arg is a lambda function\n * @param {*} arg - the value to test\n * @returns {boolean} - true if it is a lambda function\n */\n function isLambda(arg) {\n return arg && arg._jsonata_lambda === true;\n }\n\n // istanbul ignore next\n var iteratorSymbol = (typeof Symbol === \"function\" ? Symbol : {}).iterator || \"@@iterator\";\n\n /**\n * @param {Object} arg - expression to test\n * @returns {boolean} - true if it is iterable\n */\n function isIterable(arg) {\n return (\n typeof arg === 'object' &&\n arg !== null &&\n iteratorSymbol in arg &&\n 'next' in arg &&\n typeof arg.next === 'function'\n );\n }\n\n /**\n * Compares two values for equality\n * @param {*} lhs first value\n * @param {*} rhs second value\n * @returns {boolean} true if they are deep equal\n */\n function isDeepEqual(lhs, rhs) {\n if (lhs === rhs) {\n return true;\n }\n if(typeof lhs === 'object' && typeof rhs === 'object' && lhs !== null && rhs !== null) {\n if(Array.isArray(lhs) && Array.isArray(rhs)) {\n // both arrays (or sequences)\n // must be the same length\n if(lhs.length !== rhs.length) {\n return false;\n }\n // must contain same values in same order\n for(var ii = 0; ii < lhs.length; ii++) {\n if(!isDeepEqual(lhs[ii], rhs[ii])) {\n return false;\n }\n }\n return true;\n }\n // both objects\n // must have the same set of keys (in any order)\n var lkeys = Object.getOwnPropertyNames(lhs);\n var rkeys = Object.getOwnPropertyNames(rhs);\n if(lkeys.length !== rkeys.length) {\n return false;\n }\n lkeys = lkeys.sort();\n rkeys = rkeys.sort();\n for(ii=0; ii < lkeys.length; ii++) {\n if(lkeys[ii] !== rkeys[ii]) {\n return false;\n }\n }\n // must have the same values\n for(ii=0; ii < lkeys.length; ii++) {\n var key = lkeys[ii];\n if(!isDeepEqual(lhs[key], rhs[key])) {\n return false;\n }\n }\n return true;\n }\n return false;\n }\n\n /**\n * @param {Object} arg - expression to test\n * @returns {boolean} - true if it is a promise\n */\n function isPromise(arg) {\n return (\n typeof arg === 'object' &&\n arg !== null &&\n 'then' in arg &&\n typeof arg.then === 'function'\n );\n }\n\n /**\n * converts a string to an array of characters\n * @param {string} str - the input string\n * @returns {Array} - the array of characters\n */\n function stringToArray(str) {\n var arr = [];\n for (let char of str) {\n arr.push(char);\n }\n return arr;\n }\n\n return {\n isNumeric,\n isArrayOfStrings,\n isArrayOfNumbers,\n createSequence,\n isSequence,\n isFunction,\n isLambda,\n isIterable,\n getFunctionArity,\n isDeepEqual,\n stringToArray,\n isPromise\n };\n})();\n\nmodule.exports = utils;\n\n},{}]},{},[3])(3)\n});\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.jsonata = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n/**\n * © Copyright IBM Corp. 2018 All Rights Reserved\n * Project name: JSONata\n * This project is licensed under the MIT License, see LICENSE\n */\n\nconst utils = require('./utils');\n\n/**\n * DateTime formatting and parsing functions\n * Implements the xpath-functions format-date-time specification\n * @type {{formatInteger, formatDateTime, parseInteger, parseDateTime}}\n */\nconst dateTime = (function () {\n 'use strict';\n\n const stringToArray = utils.stringToArray;\n\n const few = ['Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten',\n 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen'];\n const ordinals = ['Zeroth', 'First', 'Second', 'Third', 'Fourth', 'Fifth', 'Sixth', 'Seventh', 'Eighth', 'Ninth', 'Tenth',\n 'Eleventh', 'Twelfth', 'Thirteenth', 'Fourteenth', 'Fifteenth', 'Sixteenth', 'Seventeenth', 'Eighteenth', 'Nineteenth'];\n const decades = ['Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety', 'Hundred'];\n const magnitudes = ['Thousand', 'Million', 'Billion', 'Trillion'];\n\n /**\n * converts a number into english words\n * @param {string} value - the value to format\n * @param {boolean} ordinal - ordinal or cardinal form\n * @returns {string} - representation in words\n */\n function numberToWords(value, ordinal) {\n var lookup = function (num, prev, ord) {\n var words = '';\n if (num <= 19) {\n words = (prev ? ' and ' : '') + (ord ? ordinals[num] : few[num]);\n } else if (num < 100) {\n const tens = Math.floor(num / 10);\n const remainder = num % 10;\n words = (prev ? ' and ' : '') + decades[tens - 2];\n if (remainder > 0) {\n words += '-' + lookup(remainder, false, ord);\n } else if (ord) {\n words = words.substring(0, words.length - 1) + 'ieth';\n }\n } else if (num < 1000) {\n const hundreds = Math.floor(num / 100);\n const remainder = num % 100;\n words = (prev ? ', ' : '') + few[hundreds] + ' Hundred';\n if (remainder > 0) {\n words += lookup(remainder, true, ord);\n } else if (ord) {\n words += 'th';\n }\n } else {\n var mag = Math.floor(Math.log10(num) / 3);\n if (mag > magnitudes.length) {\n mag = magnitudes.length; // the largest word\n }\n const factor = Math.pow(10, mag * 3);\n const mant = Math.floor(num / factor);\n const remainder = num - mant * factor;\n words = (prev ? ', ' : '') + lookup(mant, false, false) + ' ' + magnitudes[mag - 1];\n if (remainder > 0) {\n words += lookup(remainder, true, ord);\n } else if (ord) {\n words += 'th';\n }\n }\n return words;\n };\n\n var words = lookup(value, false, ordinal);\n return words;\n }\n\n const wordValues = {};\n few.forEach(function (word, index) {\n wordValues[word.toLowerCase()] = index;\n });\n ordinals.forEach(function (word, index) {\n wordValues[word.toLowerCase()] = index;\n });\n decades.forEach(function (word, index) {\n const lword = word.toLowerCase();\n wordValues[lword] = (index + 2) * 10;\n wordValues[lword.substring(0, word.length - 1) + 'ieth'] = wordValues[lword];\n });\n wordValues.hundredth = 100;\n magnitudes.forEach(function (word, index) {\n const lword = word.toLowerCase();\n const val = Math.pow(10, (index + 1) * 3);\n wordValues[lword] = val;\n wordValues[lword + 'th'] = val;\n });\n\n /**\n * Converts a number in english words to numeric value\n * @param {string} text - the number in words\n * @returns {number} - the numeric value\n */\n function wordsToNumber(text) {\n const parts = text.split(/,\\s|\\sand\\s|[\\s\\\\-]/);\n const values = parts.map(part => wordValues[part]);\n let segs = [0];\n values.forEach(value => {\n if (value < 100) {\n let top = segs.pop();\n if (top >= 1000) {\n segs.push(top);\n top = 0;\n }\n segs.push(top + value);\n } else {\n segs.push(segs.pop() * value);\n }\n });\n const result = segs.reduce((a, b) => a + b, 0);\n return result;\n }\n\n const romanNumerals = [\n [1000, 'm'],\n [900, 'cm'],\n [500, 'd'],\n [400, 'cd'],\n [100, 'c'],\n [90, 'xc'],\n [50, 'l'],\n [40, 'xl'],\n [10, 'x'],\n [9, 'ix'],\n [5, 'v'],\n [4, 'iv'],\n [1, 'i']\n ];\n\n const romanValues = {'M': 1000, 'D': 500, 'C': 100, 'L': 50, 'X': 10, 'V': 5, 'I': 1};\n\n /**\n * converts a number to roman numerals\n * @param {number} value - the number\n * @returns {string} - the number in roman numerals\n */\n function decimalToRoman(value) {\n for (var index = 0; index < romanNumerals.length; index++) {\n const numeral = romanNumerals[index];\n if (value >= numeral[0]) {\n return numeral[1] + decimalToRoman(value - numeral[0]);\n }\n }\n return '';\n }\n\n /**\n * converts roman numerals to a number\n * @param {string} roman - roman number\n * @returns {number} - the numeric value\n */\n function romanToDecimal(roman) {\n var decimal = 0;\n var max = 1;\n for (var i = roman.length - 1; i >= 0; i--) {\n const digit = roman[i];\n const value = romanValues[digit];\n if (value < max) {\n decimal -= value;\n } else {\n max = value;\n decimal += value;\n }\n }\n return decimal;\n }\n\n /**\n * converts a number to spreadsheet style letters\n * @param {number} value - the number\n * @param {string} aChar - the character representing the start of the sequence, e.g. 'A'\n * @returns {string} - the letters\n */\n function decimalToLetters(value, aChar) {\n var letters = [];\n var aCode = aChar.charCodeAt(0);\n while (value > 0) {\n letters.unshift(String.fromCharCode((value - 1) % 26 + aCode));\n value = Math.floor((value - 1) / 26);\n }\n return letters.join('');\n }\n\n /**\n * converts spreadsheet style letters to a number\n * @param {string} letters - the letters\n * @param {string} aChar - the character representing the start of the sequence, e.g. 'A'\n * @returns {number} - the numeric value\n */\n function lettersToDecimal(letters, aChar) {\n var aCode = aChar.charCodeAt(0);\n var decimal = 0;\n for (var i = 0; i < letters.length; i++) {\n decimal += (letters.charCodeAt(letters.length - i - 1) - aCode + 1) * Math.pow(26, i);\n }\n return decimal;\n }\n\n /**\n * Formats an integer as specified by the XPath fn:format-integer function\n * See https://www.w3.org/TR/xpath-functions-31/#func-format-integer\n * @param {number} value - the number to be formatted\n * @param {string} picture - the picture string that specifies the format\n * @returns {string} - the formatted number\n */\n function formatInteger(value, picture) {\n if (typeof value === 'undefined') {\n return undefined;\n }\n\n value = Math.floor(value);\n\n const format = analyseIntegerPicture(picture);\n return _formatInteger(value, format);\n }\n\n const formats = {\n DECIMAL: 'decimal',\n LETTERS: 'letters',\n ROMAN: 'roman',\n WORDS: 'words',\n SEQUENCE: 'sequence'\n };\n\n const tcase = {\n UPPER: 'upper',\n LOWER: 'lower',\n TITLE: 'title'\n };\n\n /**\n * formats an integer using a preprocessed representation of the picture string\n * @param {number} value - the number to be formatted\n * @param {object} format - the preprocessed representation of the pucture string\n * @returns {string} - the formatted number\n * @private\n */\n function _formatInteger(value, format) {\n let formattedInteger;\n const negative = value < 0;\n value = Math.abs(value);\n switch (format.primary) {\n case formats.LETTERS:\n formattedInteger = decimalToLetters(value, format.case === tcase.UPPER ? 'A' : 'a');\n break;\n case formats.ROMAN:\n formattedInteger = decimalToRoman(value);\n if (format.case === tcase.UPPER) {\n formattedInteger = formattedInteger.toUpperCase();\n }\n break;\n case formats.WORDS:\n formattedInteger = numberToWords(value, format.ordinal);\n if (format.case === tcase.UPPER) {\n formattedInteger = formattedInteger.toUpperCase();\n } else if (format.case === tcase.LOWER) {\n formattedInteger = formattedInteger.toLowerCase();\n }\n break;\n case formats.DECIMAL:\n formattedInteger = '' + value;\n // TODO use functionPad\n var padLength = format.mandatoryDigits - formattedInteger.length;\n if (padLength > 0) {\n var padding = (new Array(padLength + 1)).join('0');\n formattedInteger = padding + formattedInteger;\n }\n if (format.zeroCode !== 0x30) {\n formattedInteger = stringToArray(formattedInteger).map(code => {\n return String.fromCodePoint(code.codePointAt(0) + format.zeroCode - 0x30);\n }).join('');\n }\n // insert the grouping-separator-signs, if any\n if (format.regular) {\n const n = Math.floor((formattedInteger.length - 1) / format.groupingSeparators.position);\n for (let ii = n; ii > 0; ii--) {\n const pos = formattedInteger.length - ii * format.groupingSeparators.position;\n formattedInteger = formattedInteger.substr(0, pos) + format.groupingSeparators.character + formattedInteger.substr(pos);\n }\n } else {\n format.groupingSeparators.reverse().forEach(separator => {\n const pos = formattedInteger.length - separator.position;\n formattedInteger = formattedInteger.substr(0, pos) + separator.character + formattedInteger.substr(pos);\n });\n }\n\n if (format.ordinal) {\n var suffix123 = {'1': 'st', '2': 'nd', '3': 'rd'};\n var lastDigit = formattedInteger[formattedInteger.length - 1];\n var suffix = suffix123[lastDigit];\n if (!suffix || (formattedInteger.length > 1 && formattedInteger[formattedInteger.length - 2] === '1')) {\n suffix = 'th';\n }\n formattedInteger = formattedInteger + suffix;\n }\n break;\n case formats.SEQUENCE:\n throw {\n code: 'D3130',\n value: format.token\n };\n }\n if (negative) {\n formattedInteger = '-' + formattedInteger;\n }\n\n return formattedInteger;\n }\n\n //TODO what about decimal groups in the unicode supplementary planes (surrogate pairs) ???\n const decimalGroups = [0x30, 0x0660, 0x06F0, 0x07C0, 0x0966, 0x09E6, 0x0A66, 0x0AE6, 0x0B66, 0x0BE6, 0x0C66, 0x0CE6, 0x0D66, 0x0DE6, 0x0E50, 0x0ED0, 0x0F20, 0x1040, 0x1090, 0x17E0, 0x1810, 0x1946, 0x19D0, 0x1A80, 0x1A90, 0x1B50, 0x1BB0, 0x1C40, 0x1C50, 0xA620, 0xA8D0, 0xA900, 0xA9D0, 0xA9F0, 0xAA50, 0xABF0, 0xFF10];\n\n /**\n * preprocesses the picture string\n * @param {string} picture - picture string\n * @returns {{type: string, primary: string, case: string, ordinal: boolean}} - analysed picture\n */\n function analyseIntegerPicture(picture) {\n const format = {\n type: 'integer',\n primary: formats.DECIMAL,\n case: tcase.LOWER,\n ordinal: false\n };\n\n let primaryFormat, formatModifier;\n const semicolon = picture.lastIndexOf(';');\n if (semicolon === -1) {\n primaryFormat = picture;\n } else {\n primaryFormat = picture.substring(0, semicolon);\n formatModifier = picture.substring(semicolon + 1);\n if (formatModifier[0] === 'o') {\n format.ordinal = true;\n }\n }\n\n /* eslnt-disable-next no-fallthrough */\n switch (primaryFormat) {\n case 'A':\n format.case = tcase.UPPER;\n /* eslnt-disable-next-line no-fallthrough */\n case 'a':\n format.primary = formats.LETTERS;\n break;\n case 'I':\n format.case = tcase.UPPER;\n /* eslnt-disable-next-line no-fallthrough */\n case 'i':\n format.primary = formats.ROMAN;\n break;\n case 'W':\n format.case = tcase.UPPER;\n format.primary = formats.WORDS;\n break;\n case 'Ww':\n format.case = tcase.TITLE;\n format.primary = formats.WORDS;\n break;\n case 'w':\n format.primary = formats.WORDS;\n break;\n default: {\n // this is a decimal-digit-pattern if it contains a decimal digit (from any unicode decimal digit group)\n let zeroCode = null;\n let mandatoryDigits = 0;\n let optionalDigits = 0;\n let groupingSeparators = [];\n let separatorPosition = 0;\n const formatCodepoints = stringToArray(primaryFormat).map(c => c.codePointAt(0)).reverse(); // reverse the array to determine positions of grouping-separator-signs\n formatCodepoints.forEach((codePoint) => {\n // step though each char in the picture to determine the digit group\n let digit = false;\n for (let ii = 0; ii < decimalGroups.length; ii++) {\n const group = decimalGroups[ii];\n if (codePoint >= group && codePoint <= group + 9) {\n // codepoint is part of this decimal group\n digit = true;\n mandatoryDigits++;\n separatorPosition++;\n if (zeroCode === null) {\n zeroCode = group;\n } else if (group !== zeroCode) {\n // error! different decimal groups in the same pattern\n throw {\n code: 'D3131'\n };\n }\n break;\n }\n }\n if (!digit) {\n if (codePoint === 0x23) { // # - optional-digit-sign\n separatorPosition++;\n optionalDigits++;\n } else {\n // neither a decimal-digit-sign ot optional-digit-sign, assume it is a grouping-separator-sign\n groupingSeparators.push({\n position: separatorPosition,\n character: String.fromCodePoint(codePoint)\n });\n }\n }\n });\n if (mandatoryDigits > 0) {\n format.primary = formats.DECIMAL;\n // TODO validate decimal-digit-pattern\n\n // the decimal digit family (codepoint offset)\n format.zeroCode = zeroCode;\n // the number of mandatory digits\n format.mandatoryDigits = mandatoryDigits;\n // the number of optional digits\n format.optionalDigits = optionalDigits;\n // grouping separator template\n // are the grouping-separator-signs 'regular'?\n const regularRepeat = function (separators) {\n // are the grouping positions regular? i.e. same interval between each of them\n // is there at least one separator?\n if (separators.length === 0) {\n return 0;\n }\n // are all the characters the same?\n const sepChar = separators[0].character;\n for (let ii = 1; ii < separators.length; ii++) {\n if (separators[ii].character !== sepChar) {\n return 0;\n }\n }\n // are they equally spaced?\n const indexes = separators.map(separator => separator.position);\n const gcd = function (a, b) {\n return b === 0 ? a : gcd(b, a % b);\n };\n // find the greatest common divisor of all the positions\n const factor = indexes.reduce(gcd);\n // is every position separated by this divisor? If so, it's regular\n for (let index = 1; index <= indexes.length; index++) {\n if (indexes.indexOf(index * factor) === -1) {\n return 0;\n }\n }\n return factor;\n };\n\n const regular = regularRepeat(groupingSeparators);\n if (regular > 0) {\n format.regular = true;\n format.groupingSeparators = {\n position: regular,\n character: groupingSeparators[0].character\n };\n } else {\n format.regular = false;\n format.groupingSeparators = groupingSeparators;\n }\n\n } else {\n // this is a 'numbering sequence' which the spec says is implementation-defined\n // this implementation doesn't support any numbering sequences at the moment.\n format.primary = formats.SEQUENCE;\n format.token = primaryFormat;\n }\n }\n }\n\n return format;\n }\n\n const defaultPresentationModifiers = {\n Y: '1', M: '1', D: '1', d: '1', F: 'n', W: '1', w: '1', X: '1', x: '1', H: '1', h: '1',\n P: 'n', m: '01', s: '01', f: '1', Z: '01:01', z: '01:01', C: 'n', E: 'n'\n };\n\n // §9.8.4.1 the format specifier is an array of string literals and variable markers\n /**\n * analyse the date-time picture string\n * @param {string} picture - picture string\n * @returns {{type: string, parts: Array}} - the analysed string\n */\n function analyseDateTimePicture(picture) {\n var spec = [];\n const format = {\n type: 'datetime',\n parts: spec\n };\n const addLiteral = function (start, end) {\n if (end > start) {\n let literal = picture.substring(start, end);\n // replace any doubled ]] with single ]\n // what if there are instances of single ']' ? - the spec doesn't say\n literal = literal.split(']]').join(']');\n spec.push({type: 'literal', value: literal});\n }\n };\n\n var start = 0, pos = 0;\n while (pos < picture.length) {\n if (picture.charAt(pos) === '[') {\n // check it's not a doubled [[\n if (picture.charAt(pos + 1) === '[') {\n // literal [\n addLiteral(start, pos);\n spec.push({type: 'literal', value: '['});\n pos += 2;\n start = pos;\n continue;\n }\n // start of variable marker\n // push the string literal (if there is one) onto the array\n addLiteral(start, pos);\n start = pos;\n // search forward to closing ]\n pos = picture.indexOf(']', start);\n // TODO handle error case if pos === -1\n if(pos === -1) {\n // error - no closing bracket\n throw {\n code: 'D3135'\n };\n }\n let marker = picture.substring(start + 1, pos);\n // whitespace within a variable marker is ignored (i.e. remove it)\n marker = marker.split(/\\s+/).join('');\n var def = {\n type: 'marker',\n component: marker.charAt(0) // 1. The component specifier is always present and is always a single letter.\n };\n var comma = marker.lastIndexOf(','); // 2. The width modifier may be recognized by the presence of a comma\n var presMod; // the presentation modifiers\n if (comma !== -1) {\n // §9.8.4.2 The Width Modifier\n const widthMod = marker.substring(comma + 1);\n const dash = widthMod.indexOf('-');\n let min, max;\n const parseWidth = function (wm) {\n if (typeof wm === 'undefined' || wm === '*') {\n return undefined;\n } else {\n // TODO validate wm is an unsigned int\n return parseInt(wm);\n }\n };\n if (dash === -1) {\n min = widthMod;\n } else {\n min = widthMod.substring(0, dash);\n max = widthMod.substring(dash + 1);\n }\n const widthDef = {\n min: parseWidth(min),\n max: parseWidth(max)\n };\n def.width = widthDef;\n presMod = marker.substring(1, comma);\n } else {\n presMod = marker.substring(1);\n }\n if (presMod.length === 1) {\n def.presentation1 = presMod; // first presentation modifier\n //TODO validate the first presentation modifier - it's either N, n, Nn or it passes analyseIntegerPicture\n } else if (presMod.length > 1) {\n var lastChar = presMod.charAt(presMod.length - 1);\n if ('atco'.indexOf(lastChar) !== -1) {\n def.presentation2 = lastChar;\n if (lastChar === 'o') {\n def.ordinal = true;\n }\n // 'c' means 'cardinal' and is the default (i.e. not 'ordinal')\n // 'a' & 't' are ignored (not sure of their relevance to English numbering)\n def.presentation1 = presMod.substring(0, presMod.length - 1);\n } else {\n def.presentation1 = presMod;\n //TODO validate the first presentation modifier - it's either N, n, Nn or it passes analyseIntegerPicture,\n // doesn't use ] as grouping separator, and if grouping separator is , then must have width modifier\n }\n } else {\n // no presentation modifier specified - apply the default;\n def.presentation1 = defaultPresentationModifiers[def.component];\n }\n if (typeof def.presentation1 === 'undefined') {\n // unknown component specifier\n throw {\n code: 'D3132',\n value: def.component\n };\n }\n if (def.presentation1[0] === 'n') {\n def.names = tcase.LOWER;\n } else if (def.presentation1[0] === 'N') {\n if (def.presentation1[1] === 'n') {\n def.names = tcase.TITLE;\n } else {\n def.names = tcase.UPPER;\n }\n } else if ('YMDdFWwXxHhmsf'.indexOf(def.component) !== -1) {\n var integerPattern = def.presentation1;\n if (def.presentation2) {\n integerPattern += ';' + def.presentation2;\n }\n def.integerFormat = analyseIntegerPicture(integerPattern);\n if (def.width && def.width.min !== undefined) {\n if (def.integerFormat.mandatoryDigits < def.width.min) {\n def.integerFormat.mandatoryDigits = def.width.min;\n }\n }\n if (def.component === 'Y') {\n // §9.8.4.4\n def.n = -1;\n if (def.width && def.width.max !== undefined) {\n def.n = def.width.max;\n def.integerFormat.mandatoryDigits = def.n;\n } else {\n var w = def.integerFormat.mandatoryDigits + def.integerFormat.optionalDigits;\n if (w >= 2) {\n def.n = w;\n }\n }\n }\n // if the previous part is also an integer with no intervening markup, then its width for parsing must be precisely defined\n const previousPart = spec[spec.length - 1];\n if (previousPart && previousPart.integerFormat) {\n previousPart.integerFormat.parseWidth = previousPart.integerFormat.mandatoryDigits;\n }\n }\n if (def.component === 'Z' || def.component === 'z') {\n def.integerFormat = analyseIntegerPicture(def.presentation1);\n }\n spec.push(def);\n start = pos + 1;\n }\n pos++;\n }\n addLiteral(start, pos);\n return format;\n }\n\n const days = ['', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\n const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n const millisInADay = 1000 * 60 * 60 * 24;\n\n const startOfFirstWeek = function (ym) {\n // ISO 8601 defines the first week of the year to be the week that contains the first Thursday\n // XPath F&O extends this same definition for the first week of a month\n // the week starts on a Monday - calculate the millis for the start of the first week\n // millis for given 1st Jan of that year (at 00:00 UTC)\n const jan1 = Date.UTC(ym.year, ym.month);\n var dayOfJan1 = (new Date(jan1)).getUTCDay();\n if (dayOfJan1 === 0) {\n dayOfJan1 = 7;\n }\n // if Jan 1 is Fri, Sat or Sun, then add the number of days (in millis) to jan1 to get the start of week 1\n return dayOfJan1 > 4 ? jan1 + (8 - dayOfJan1) * millisInADay : jan1 - (dayOfJan1 - 1) * millisInADay;\n };\n\n const yearMonth = function (year, month) {\n return {\n year: year,\n month: month,\n nextMonth: function () {\n return (month === 11) ? yearMonth(year + 1, 0) : yearMonth(year, month + 1);\n },\n previousMonth: function () {\n return (month === 0) ? yearMonth(year - 1, 11) : yearMonth(year, month - 1);\n },\n nextYear: function () {\n return yearMonth(year + 1, month);\n },\n previousYear: function () {\n return yearMonth(year - 1, month);\n }\n };\n };\n\n const deltaWeeks = function (start, end) {\n return (end - start) / (millisInADay * 7) + 1;\n };\n\n const getDateTimeFragment = (date, component) => {\n let componentValue;\n switch (component) {\n case 'Y': // year\n componentValue = date.getUTCFullYear();\n break;\n case 'M': // month in year\n componentValue = date.getUTCMonth() + 1;\n break;\n case 'D': // day in month\n componentValue = date.getUTCDate();\n break;\n case 'd': { // day in year\n // millis for given date (at 00:00 UTC)\n const today = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n // millis for given 1st Jan of that year (at 00:00 UTC)\n const firstJan = Date.UTC(date.getUTCFullYear(), 0);\n componentValue = (today - firstJan) / millisInADay + 1;\n break;\n }\n case 'F': // day of week\n componentValue = date.getUTCDay();\n if (componentValue === 0) {\n // ISO 8601 defines days 1-7: Mon-Sun\n componentValue = 7;\n }\n break;\n case 'W': { // week in year\n const thisYear = yearMonth(date.getUTCFullYear(), 0);\n const startOfWeek1 = startOfFirstWeek(thisYear);\n const today = Date.UTC(thisYear.year, date.getUTCMonth(), date.getUTCDate());\n let week = deltaWeeks(startOfWeek1, today);\n if (week > 52) {\n // might be first week of the following year\n const startOfFollowingYear = startOfFirstWeek(thisYear.nextYear());\n if (today >= startOfFollowingYear) {\n week = 1;\n }\n } else if (week < 1) {\n // must be end of the previous year\n const startOfPreviousYear = startOfFirstWeek(thisYear.previousYear());\n week = deltaWeeks(startOfPreviousYear, today);\n }\n componentValue = Math.floor(week);\n break;\n }\n case 'w': { // week in month\n const thisMonth = yearMonth(date.getUTCFullYear(), date.getUTCMonth());\n const startOfWeek1 = startOfFirstWeek(thisMonth);\n const today = Date.UTC(thisMonth.year, thisMonth.month, date.getUTCDate());\n let week = deltaWeeks(startOfWeek1, today);\n if (week > 4) {\n // might be first week of the following month\n const startOfFollowingMonth = startOfFirstWeek(thisMonth.nextMonth());\n if (today >= startOfFollowingMonth) {\n week = 1;\n }\n } else if (week < 1) {\n // must be end of the previous month\n const startOfPreviousMonth = startOfFirstWeek(thisMonth.previousMonth());\n week = deltaWeeks(startOfPreviousMonth, today);\n }\n componentValue = Math.floor(week);\n break;\n }\n case 'X': { // ISO week-numbering year\n // Extension: The F&O spec says nothing about how to access the year associated with the week-of-the-year\n // e.g. Sat 1 Jan 2005 is in the 53rd week of 2004.\n // The 'W' component specifier gives 53, but 'Y' will give 2005.\n // I propose to add 'X' as the component specifier to give the ISO week-numbering year (2004 in this example)\n const thisYear = yearMonth(date.getUTCFullYear(), 0);\n const startOfISOYear = startOfFirstWeek(thisYear);\n const endOfISOYear = startOfFirstWeek(thisYear.nextYear());\n const now = date.getTime();\n if (now < startOfISOYear) {\n componentValue = thisYear.year - 1;\n } else if (now >= endOfISOYear) {\n componentValue = thisYear.year + 1;\n } else {\n componentValue = thisYear.year;\n }\n break;\n }\n case 'x': { // ISO week-numbering month\n // Extension: The F&O spec says nothing about how to access the month associated with the week-of-the-month\n // e.g. Sat 1 Jan 2005 is in the 5th week of December 2004.\n // The 'w' component specifier gives 5, but 'W' will give January and 'Y' will give 2005.\n // I propose to add 'x' as the component specifier to give the 'week-numbering' month (December in this example)\n const thisMonth = yearMonth(date.getUTCFullYear(), date.getUTCMonth());\n const startOfISOMonth = startOfFirstWeek(thisMonth);\n const nextMonth = thisMonth.nextMonth();\n const endOfISOMonth = startOfFirstWeek(nextMonth);\n const now = date.getTime();\n if (now < startOfISOMonth) {\n componentValue = thisMonth.previousMonth().month + 1;\n } else if (now >= endOfISOMonth) {\n componentValue = nextMonth.month + 1;\n } else {\n componentValue = thisMonth.month + 1;\n }\n break;\n }\n case 'H': // hour in day (24 hours)\n componentValue = date.getUTCHours();\n break;\n case 'h': // hour in half-day (12 hours)\n componentValue = date.getUTCHours();\n componentValue = componentValue % 12;\n if (componentValue === 0) {\n componentValue = 12;\n }\n break;\n case 'P': // am/pm marker\n componentValue = date.getUTCHours() >= 12 ? 'pm' : 'am';\n break;\n case 'm': // minute in hour\n componentValue = date.getUTCMinutes();\n break;\n case 's': // second in minute\n componentValue = date.getUTCSeconds();\n break;\n case 'f': // fractional seconds\n componentValue = date.getUTCMilliseconds();\n break;\n case 'Z': // timezone\n case 'z':\n // since the date object is constructed from epoch millis, the TZ component is always be UTC.\n break;\n case 'C': // calendar name\n componentValue = 'ISO';\n break;\n case 'E': // era\n componentValue = 'ISO';\n break;\n }\n return componentValue;\n };\n\n let iso8601Spec = null;\n\n /**\n * formats the date/time as specified by the XPath fn:format-dateTime function\n * @param {number} millis - the timestamp to be formatted, in millis since the epoch\n * @param {string} picture - the picture string that specifies the format\n * @param {string} timezone - the timezone to use\n * @returns {string} - the formatted timestamp\n */\n function formatDateTime(millis, picture, timezone) {\n var offsetHours = 0;\n var offsetMinutes = 0;\n\n if (typeof timezone !== 'undefined') {\n // parse the hour and minute offsets\n // assume for now the format supplied is +hhmm\n const offset = parseInt(timezone);\n offsetHours = Math.floor(offset / 100);\n offsetMinutes = offset % 100;\n }\n\n var formatComponent = function (date, markerSpec) {\n var componentValue = getDateTimeFragment(date, markerSpec.component);\n\n // §9.8.4.3 Formatting Integer-Valued Date/Time Components\n if ('YMDdFWwXxHhms'.indexOf(markerSpec.component) !== -1) {\n if (markerSpec.component === 'Y') {\n // §9.8.4.4 Formatting the Year Component\n if (markerSpec.n !== -1) {\n componentValue = componentValue % Math.pow(10, markerSpec.n);\n }\n }\n if (markerSpec.names) {\n if (markerSpec.component === 'M' || markerSpec.component === 'x') {\n componentValue = months[componentValue - 1];\n } else if (markerSpec.component === 'F') {\n componentValue = days[componentValue];\n } else {\n throw {\n code: 'D3133',\n value: markerSpec.component\n };\n }\n if (markerSpec.names === tcase.UPPER) {\n componentValue = componentValue.toUpperCase();\n } else if (markerSpec.names === tcase.LOWER) {\n componentValue = componentValue.toLowerCase();\n }\n if (markerSpec.width && componentValue.length > markerSpec.width.max) {\n componentValue = componentValue.substring(0, markerSpec.width.max);\n }\n } else {\n componentValue = _formatInteger(componentValue, markerSpec.integerFormat);\n }\n } else if (markerSpec.component === 'f') {\n // TODO §9.8.4.5 Formatting Fractional Seconds\n componentValue = _formatInteger(componentValue, markerSpec.integerFormat);\n } else if (markerSpec.component === 'Z' || markerSpec.component === 'z') {\n // §9.8.4.6 Formatting timezones\n const offset = offsetHours * 100 + offsetMinutes;\n if (markerSpec.integerFormat.regular) {\n componentValue = _formatInteger(offset, markerSpec.integerFormat);\n } else {\n const numDigits = markerSpec.integerFormat.mandatoryDigits;\n if (numDigits === 1 || numDigits === 2) {\n componentValue = _formatInteger(offsetHours, markerSpec.integerFormat);\n if (offsetMinutes !== 0) {\n componentValue += ':' + formatInteger(offsetMinutes, '00');\n }\n } else if (numDigits === 3 || numDigits === 4) {\n componentValue = _formatInteger(offset, markerSpec.integerFormat);\n } else {\n throw {\n code: 'D3134',\n value: numDigits\n };\n }\n }\n if (offset >= 0) {\n componentValue = '+' + componentValue;\n }\n if (markerSpec.component === 'z') {\n componentValue = 'GMT' + componentValue;\n }\n if (offset === 0 && markerSpec.presentation2 === 't') {\n componentValue = 'Z';\n }\n } else if (markerSpec.component === 'P') {\n // §9.8.4.7 Formatting Other Components\n // Formatting P for am/pm\n // getDateTimeFragment() always returns am/pm lower case so check for UPPER here\n if (markerSpec.names === tcase.UPPER) {\n componentValue = componentValue.toUpperCase();\n }\n }\n return componentValue;\n };\n\n let formatSpec;\n if(typeof picture === 'undefined') {\n // default to ISO 8601 format\n if (iso8601Spec === null) {\n iso8601Spec = analyseDateTimePicture('[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01].[f001][Z01:01t]');\n }\n formatSpec = iso8601Spec;\n } else {\n formatSpec = analyseDateTimePicture(picture);\n }\n\n const offsetMillis = (60 * offsetHours + offsetMinutes) * 60 * 1000;\n const dateTime = new Date(millis + offsetMillis);\n\n let result = '';\n formatSpec.parts.forEach(function (part) {\n if (part.type === 'literal') {\n result += part.value;\n } else {\n result += formatComponent(dateTime, part);\n }\n });\n\n return result;\n }\n\n /**\n * Generate a regex to parse integers or timestamps\n * @param {object} formatSpec - object representing the format\n * @returns {object} - regex\n */\n function generateRegex(formatSpec) {\n var matcher = {};\n if (formatSpec.type === 'datetime') {\n matcher.type = 'datetime';\n matcher.parts = formatSpec.parts.map(function (part) {\n var res = {};\n if (part.type === 'literal') {\n res.regex = part.value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n } else if (part.component === 'Z' || part.component === 'z') {\n // timezone\n let separator;\n if (!Array.isArray(part.integerFormat.groupingSeparators)) {\n separator = part.integerFormat.groupingSeparators;\n }\n res.regex = '';\n if (part.component === 'z') {\n res.regex = 'GMT';\n }\n res.regex += '[-+][0-9]+';\n if (separator) {\n res.regex += separator.character + '[0-9]+';\n }\n res.parse = function(value) {\n if (part.component === 'z') {\n value = value.substring(3); // remove the leading GMT\n }\n let offsetHours = 0, offsetMinutes = 0;\n if (separator) {\n offsetHours = Number.parseInt(value.substring(0, value.indexOf(separator.character)));\n offsetMinutes = Number.parseInt(value.substring(value.indexOf(separator.character) + 1));\n } else {\n // depends on number of digits\n const numdigits = value.length - 1;\n if (numdigits <= 2) {\n // just hour offset\n offsetHours = Number.parseInt(value);\n } else {\n offsetHours = Number.parseInt(value.substring(0, 3));\n offsetMinutes = Number.parseInt(value.substring(3));\n }\n }\n return offsetHours * 60 + offsetMinutes;\n };\n } else if (part.integerFormat) {\n res = generateRegex(part.integerFormat);\n } else {\n // must be a month or day name\n res.regex = '[a-zA-Z]+';\n var lookup = {};\n if (part.component === 'M' || part.component === 'x') {\n // months\n months.forEach(function (name, index) {\n if (part.width && part.width.max) {\n lookup[name.substring(0, part.width.max)] = index + 1;\n } else {\n lookup[name] = index + 1;\n }\n });\n } else if (part.component === 'F') {\n // days\n days.forEach(function (name, index) {\n if (index > 0) {\n if (part.width && part.width.max) {\n lookup[name.substring(0, part.width.max)] = index;\n } else {\n lookup[name] = index;\n }\n }\n });\n } else if (part.component === 'P') {\n lookup = {'am': 0, 'AM': 0, 'pm': 1, 'PM': 1};\n } else {\n // unsupported 'name' option for this component\n throw {\n code: 'D3133',\n value: part.component\n };\n }\n res.parse = function (value) {\n return lookup[value];\n };\n }\n res.component = part.component;\n return res;\n });\n } else { // type === 'integer'\n matcher.type = 'integer';\n const isUpper = formatSpec.case === tcase.UPPER;\n\n switch (formatSpec.primary) {\n case formats.LETTERS:\n matcher.regex = isUpper ? '[A-Z]+' : '[a-z]+';\n matcher.parse = function (value) {\n return lettersToDecimal(value, isUpper ? 'A' : 'a');\n };\n break;\n case formats.ROMAN:\n matcher.regex = isUpper ? '[MDCLXVI]+' : '[mdclxvi]+';\n matcher.parse = function (value) {\n return romanToDecimal(isUpper ? value : value.toUpperCase());\n };\n break;\n case formats.WORDS:\n matcher.regex = '(?:' + Object.keys(wordValues).concat('and', '[\\\\-, ]').join('|') + ')+';\n matcher.parse = function (value) {\n return wordsToNumber(value.toLowerCase());\n };\n break;\n case formats.DECIMAL:\n matcher.regex = '[0-9]';\n if (formatSpec.parseWidth) {\n matcher.regex += `{${formatSpec.parseWidth}}`;\n } else {\n matcher.regex += '+';\n }\n if (formatSpec.ordinal) {\n // ordinals\n matcher.regex += '(?:th|st|nd|rd)';\n }\n matcher.parse = function (value) {\n let digits = value;\n if (formatSpec.ordinal) {\n // strip off the suffix\n digits = value.substring(0, value.length - 2);\n }\n // strip out the separators\n if (formatSpec.regular) {\n digits = digits.split(',').join('');\n } else {\n formatSpec.groupingSeparators.forEach(sep => {\n digits = digits.split(sep.character).join('');\n });\n }\n if (formatSpec.zeroCode !== 0x30) {\n // apply offset\n digits = digits.split('').map(char => String.fromCodePoint(char.codePointAt(0) - formatSpec.zeroCode + 0x30)).join('');\n }\n return parseInt(digits);\n };\n break;\n case formats.SEQUENCE:\n throw {\n code: 'D3130',\n value: formatSpec.token\n };\n }\n\n }\n return matcher;\n }\n\n /**\n * parse a string containing an integer as specified by the picture string\n * @param {string} value - the string to parse\n * @param {string} picture - the picture string\n * @returns {number} - the parsed number\n */\n function parseInteger(value, picture) {\n if (typeof value === 'undefined') {\n return undefined;\n }\n\n const formatSpec = analyseIntegerPicture(picture);\n const matchSpec = generateRegex(formatSpec);\n //const fullRegex = '^' + matchSpec.regex + '$';\n //const matcher = new RegExp(fullRegex);\n // TODO validate input based on the matcher regex\n const result = matchSpec.parse(value);\n return result;\n }\n\n /**\n * parse a string containing a timestamp as specified by the picture string\n * @param {string} timestamp - the string to parse\n * @param {string} picture - the picture string\n * @returns {number} - the parsed timestamp in millis since the epoch\n */\n function parseDateTime(timestamp, picture) {\n const formatSpec = analyseDateTimePicture(picture);\n const matchSpec = generateRegex(formatSpec);\n const fullRegex = '^' + matchSpec.parts.map(part => '(' + part.regex + ')').join('') + '$';\n\n const matcher = new RegExp(fullRegex, 'i'); // TODO can cache this against the picture\n var info = matcher.exec(timestamp);\n if (info !== null) {\n // validate what we've just parsed - do we have enough information to create a timestamp?\n // rules:\n // The date is specified by one of:\n // {Y, M, D} (dateA)\n // or {Y, d} (dateB)\n // or {Y, x, w, F} (dateC)\n // or {X, W, F} (dateD)\n // The time is specified by one of:\n // {H, m, s, f} (timeA)\n // or {P, h, m, s, f} (timeB)\n // All sets can have an optional Z\n // To create a timestamp (epoch millis) we need both date and time, but we can default missing\n // information according to the following rules:\n // - line up one combination of the above from date, and one from time, most significant value (MSV) to least significant (LSV\n // - for the values that have been captured, if there are any gaps between MSV and LSV, then throw an error\n // (e.g.) if hour and seconds, but not minutes is given - throw\n // (e.g.) if month, hour and minutes, but not day-of-month is given - throw\n // - anything right of the LSV should be defaulted to zero\n // (e.g.) if hour and minutes given, default seconds and fractional seconds to zero\n // (e.g.) if date only given, default the time to 0:00:00.000 (midnight)\n // - anything left of the MSV should be defaulted to the value of that component returned by $now()\n // (e.g.) if time only given, default the date to today\n // (e.g.) if month and date given, default to this year (and midnight, by previous rule)\n // -- default values for X, x, W, w, F will be derived from the values returned by $now()\n\n // implement the above rules\n // determine which of the above date/time combinations we have by using bit masks\n\n // Y X M x W w d D F P H h m s f Z\n // dateA 1 0 1 0 0 0 0 1 ? 0 - must not appear\n // dateB 1 0 0 0 0 0 1 0 ? 1 - can appear - relevant\n // dateC 0 1 0 1 0 1 0 0 1 ? - can appear - ignored\n // dateD 0 1 0 0 1 0 0 0 1\n // timeA 0 1 0 1 1 1\n // timeB 1 0 1 1 1 1\n\n // create bitmasks based on the above\n // date mask YXMxWwdD\n const dmA = 161; // binary 10100001\n const dmB = 130; // binary 10000010\n const dmC = 84; // binary 01010100\n const dmD = 72; // binary 01001000\n // time mask PHhmsf\n const tmA = 23; // binary 010111\n const tmB = 47; // binary 101111\n\n const components = {};\n for (let i = 1; i < info.length; i++) {\n const mpart = matchSpec.parts[i - 1];\n if (mpart.parse) {\n components[mpart.component] = mpart.parse(info[i]);\n }\n }\n\n if(Object.getOwnPropertyNames(components).length === 0) {\n // nothing specified\n return undefined;\n }\n\n let mask = 0;\n\n const shift = bit => {\n mask <<= 1;\n mask += bit ? 1 : 0;\n };\n\n const isType = type => {\n // shouldn't match any 0's, must match at least one 1\n return !(~type & mask) && !!(type & mask);\n };\n\n 'YXMxWwdD'.split('').forEach(part => shift(components[part]));\n\n const dateA = isType(dmA);\n const dateB = !dateA && isType(dmB);\n const dateC = isType(dmC);\n const dateD = !dateC && isType(dmD);\n\n mask = 0;\n 'PHhmsf'.split('').forEach(part => shift(components[part]));\n\n const timeA = isType(tmA);\n const timeB = !timeA && isType(tmB);\n\n // should only be zero or one date type and zero or one time type\n\n const dateComps = dateB ? 'YD' : dateC ? 'XxwF' : dateD? 'XWF' : 'YMD';\n const timeComps = timeB ? 'Phmsf' : 'Hmsf';\n\n const comps = dateComps + timeComps;\n\n // step through the candidate parts from most significant to least significant\n // default the most significant unspecified parts to current timestamp component\n // default the least significant unspecified parts to zero\n // if any gaps in between the specified parts, throw an error\n\n const now = this.environment.timestamp; // must get the fixed timestamp from jsonata\n\n let startSpecified = false;\n let endSpecified = false;\n comps.split('').forEach(part => {\n if(typeof components[part] === 'undefined') {\n if(startSpecified) {\n // past the specified block - default to zero\n components[part] = ('MDd'.indexOf(part) !== -1) ? 1 : 0;\n endSpecified = true;\n } else {\n // haven't hit the specified block yet, default to current timestamp\n components[part] = getDateTimeFragment(now, part);\n }\n } else {\n startSpecified = true;\n if(endSpecified) {\n throw {\n code: 'D3136'\n };\n }\n }\n });\n\n // validate and fill in components\n if (components.M > 0) {\n components.M -= 1; // Date.UTC requires a zero-indexed month\n } else {\n components.M = 0; // default to January\n }\n if (dateB) {\n // millis for given 1st Jan of that year (at 00:00 UTC)\n const firstJan = Date.UTC(components.Y, 0);\n const offsetMillis = (components.d - 1) * 1000 * 60 * 60 * 24;\n const derivedDate = new Date(firstJan + offsetMillis);\n components.M = derivedDate.getUTCMonth();\n components.D = derivedDate.getUTCDate();\n }\n if (dateC) {\n // TODO implement this\n // parsing this format not currently supported\n throw {\n code: 'D3136'\n };\n }\n if (dateD) {\n // TODO implement this\n // parsing this format (ISO week date) not currently supported\n throw {\n code: 'D3136'\n };\n }\n if (timeB) {\n // 12hr to 24hr\n components.H = components.h === 12 ? 0 : components.h;\n if (components.P === 1) {\n components.H += 12;\n }\n }\n\n var millis = Date.UTC(components.Y, components.M, components.D, components.H, components.m, components.s, components.f);\n if(components.Z || components.z) {\n // adjust for timezone\n millis -= (components.Z || components.z) * 60 * 1000;\n }\n return millis;\n }\n }\n\n // Regular expression to match an ISO 8601 formatted timestamp\n var iso8601regex = new RegExp('^\\\\d{4}(-[01]\\\\d)*(-[0-3]\\\\d)*(T[0-2]\\\\d:[0-5]\\\\d:[0-5]\\\\d)*(\\\\.\\\\d+)?([+-][0-2]\\\\d:?[0-5]\\\\d|Z)?$');\n\n /**\n * Converts an ISO 8601 timestamp to milliseconds since the epoch\n *\n * @param {string} timestamp - the timestamp to be converted\n * @param {string} [picture] - the picture string defining the format of the timestamp (defaults to ISO 8601)\n * @returns {Number} - milliseconds since the epoch\n */\n function toMillis(timestamp, picture) {\n // undefined inputs always return undefined\n if(typeof timestamp === 'undefined') {\n return undefined;\n }\n\n if(typeof picture === 'undefined') {\n if (!iso8601regex.test(timestamp)) {\n throw {\n stack: (new Error()).stack,\n code: \"D3110\",\n value: timestamp\n };\n }\n\n return Date.parse(timestamp);\n } else {\n return parseDateTime.call(this, timestamp, picture);\n }\n }\n\n /**\n * Converts milliseconds since the epoch to an ISO 8601 timestamp\n * @param {Number} millis - milliseconds since the epoch to be converted\n * @param {string} [picture] - the picture string defining the format of the timestamp (defaults to ISO 8601)\n * @param {string} [timezone] - the timezone to format the timestamp in (defaults to UTC)\n * @returns {String} - the formatted timestamp\n */\n function fromMillis(millis, picture, timezone) {\n // undefined inputs always return undefined\n if(typeof millis === 'undefined') {\n return undefined;\n }\n\n return formatDateTime.call(this, millis, picture, timezone);\n }\n\n return {\n formatInteger, parseInteger, fromMillis, toMillis\n };\n})();\n\nmodule.exports = dateTime;\n\n},{\"./utils\":6}],2:[function(require,module,exports){\n(function (global){(function (){\n/**\n * © Copyright IBM Corp. 2016, 2018 All Rights Reserved\n * Project name: JSONata\n * This project is licensed under the MIT License, see LICENSE\n */\n\nvar utils = require('./utils');\n\nconst functions = (() => {\n 'use strict';\n\n var isNumeric = utils.isNumeric;\n var isArrayOfStrings = utils.isArrayOfStrings;\n var isArrayOfNumbers = utils.isArrayOfNumbers;\n var createSequence = utils.createSequence;\n var isSequence = utils.isSequence;\n var isFunction = utils.isFunction;\n var isLambda = utils.isLambda;\n var isPromise = utils.isPromise;\n var getFunctionArity = utils.getFunctionArity;\n var deepEquals = utils.isDeepEqual;\n var stringToArray = utils.stringToArray;\n\n /**\n * Sum function\n * @param {Object} args - Arguments\n * @returns {number} Total value of arguments\n */\n function sum(args) {\n // undefined inputs always return undefined\n if (typeof args === 'undefined') {\n return undefined;\n }\n\n var total = 0;\n args.forEach(function (num) {\n total += num;\n });\n return total;\n }\n\n /**\n * Count function\n * @param {Object} args - Arguments\n * @returns {number} Number of elements in the array\n */\n function count(args) {\n // undefined inputs always return undefined\n if (typeof args === 'undefined') {\n return 0;\n }\n\n return args.length;\n }\n\n /**\n * Max function\n * @param {Object} args - Arguments\n * @returns {number} Max element in the array\n */\n function max(args) {\n // undefined inputs always return undefined\n if (typeof args === 'undefined' || args.length === 0) {\n return undefined;\n }\n\n return Math.max.apply(Math, args);\n }\n\n /**\n * Min function\n * @param {Object} args - Arguments\n * @returns {number} Min element in the array\n */\n function min(args) {\n // undefined inputs always return undefined\n if (typeof args === 'undefined' || args.length === 0) {\n return undefined;\n }\n\n return Math.min.apply(Math, args);\n }\n\n /**\n * Average function\n * @param {Object} args - Arguments\n * @returns {number} Average element in the array\n */\n function average(args) {\n // undefined inputs always return undefined\n if (typeof args === 'undefined' || args.length === 0) {\n return undefined;\n }\n\n var total = 0;\n args.forEach(function (num) {\n total += num;\n });\n return total / args.length;\n }\n\n /**\n * Stringify arguments\n * @param {Object} arg - Arguments\n * @param {boolean} [prettify] - Pretty print the result\n * @returns {String} String from arguments\n */\n function string(arg, prettify = false) {\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n var str;\n\n if (typeof arg === 'string') {\n // already a string\n str = arg;\n } else if (isFunction(arg)) {\n // functions (built-in and lambda convert to empty string\n str = '';\n } else if (typeof arg === 'number' && !isFinite(arg)) {\n throw {\n code: \"D3001\",\n value: arg,\n stack: (new Error()).stack\n };\n } else {\n var space = prettify ? 2 : 0;\n if(Array.isArray(arg) && arg.outerWrapper) {\n arg = arg[0];\n }\n str = JSON.stringify(arg, function (key, val) {\n return (typeof val !== 'undefined' && val !== null && val.toPrecision && isNumeric(val)) ? Number(val.toPrecision(15)) :\n (val && isFunction(val)) ? '' : val;\n }, space);\n }\n return str;\n }\n\n /**\n * Create substring based on character number and length\n * @param {String} str - String to evaluate\n * @param {Integer} start - Character number to start substring\n * @param {Integer} [length] - Number of characters in substring\n * @returns {string|*} Substring\n */\n function substring(str, start, length) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n var strArray = stringToArray(str);\n var strLength = strArray.length;\n\n if (strLength + start < 0) {\n start = 0;\n }\n\n if (typeof length !== 'undefined') {\n if (length <= 0) {\n return '';\n }\n var end = start >= 0 ? start + length : strLength + start + length;\n return strArray.slice(start, end).join('');\n }\n\n return strArray.slice(start).join('');\n }\n\n /**\n * Create substring up until a character\n * @param {String} str - String to evaluate\n * @param {String} chars - Character to define substring boundary\n * @returns {*} Substring\n */\n function substringBefore(str, chars) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n var pos = str.indexOf(chars);\n if (pos > -1) {\n return str.substr(0, pos);\n } else {\n return str;\n }\n }\n\n /**\n * Create substring after a character\n * @param {String} str - String to evaluate\n * @param {String} chars - Character to define substring boundary\n * @returns {*} Substring\n */\n function substringAfter(str, chars) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n var pos = str.indexOf(chars);\n if (pos > -1) {\n return str.substr(pos + chars.length);\n } else {\n return str;\n }\n }\n\n /**\n * Lowercase a string\n * @param {String} str - String to evaluate\n * @returns {string} Lowercase string\n */\n function lowercase(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n return str.toLowerCase();\n }\n\n /**\n * Uppercase a string\n * @param {String} str - String to evaluate\n * @returns {string} Uppercase string\n */\n function uppercase(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n return str.toUpperCase();\n }\n\n /**\n * length of a string\n * @param {String} str - string\n * @returns {Number} The number of characters in the string\n */\n function length(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n return stringToArray(str).length;\n }\n\n /**\n * Normalize and trim whitespace within a string\n * @param {string} str - string to be trimmed\n * @returns {string} - trimmed string\n */\n function trim(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n // normalize whitespace\n var result = str.replace(/[ \\t\\n\\r]+/gm, ' ');\n if (result.charAt(0) === ' ') {\n // strip leading space\n result = result.substring(1);\n }\n if (result.charAt(result.length - 1) === ' ') {\n // strip trailing space\n result = result.substring(0, result.length - 1);\n }\n return result;\n }\n\n /**\n * Pad a string to a minimum width by adding characters to the start or end\n * @param {string} str - string to be padded\n * @param {number} width - the minimum width; +ve pads to the right, -ve pads to the left\n * @param {string} [char] - the pad character(s); defaults to ' '\n * @returns {string} - padded string\n */\n function pad(str, width, char) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n if (typeof char === 'undefined' || char.length === 0) {\n char = ' ';\n }\n\n var result;\n width = Math.trunc(width);\n var padLength = Math.abs(width) - length(str);\n if (padLength > 0) {\n var padding = (new Array(padLength + 1)).join(char);\n if (char.length > 1) {\n padding = substring(padding, 0, padLength);\n }\n if (width > 0) {\n result = str + padding;\n } else {\n result = padding + str;\n }\n } else {\n result = str;\n }\n return result;\n }\n\n /**\n * Evaluate the matcher function against the str arg\n *\n * @param {*} matcher - matching function (native or lambda)\n * @param {string} str - the string to match against\n * @returns {object} - structure that represents the match(es)\n */\n function evaluateMatcher(matcher, str) {\n var result = matcher.apply(this, [str]); // eslint-disable-line no-useless-call\n if(isPromise(result)) {\n result = result;\n }\n if(result && !(typeof result.start === 'number' || result.end === 'number' || Array.isArray(result.groups) || isFunction(result.next))) {\n // the matcher function didn't return the correct structure\n throw {\n code: \"T1010\",\n stack: (new Error()).stack,\n };\n }\n return result;\n }\n\n /**\n * Tests if the str contains the token\n * @param {String} str - string to test\n * @param {String} token - substring or regex to find\n * @returns {Boolean} - true if str contains token\n */\n function contains(str, token) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n var result;\n\n if (typeof token === 'string') {\n result = (str.indexOf(token) !== -1);\n } else {\n var matches = evaluateMatcher(token, str);\n result = (typeof matches !== 'undefined');\n }\n\n return result;\n }\n\n /**\n * Match a string with a regex returning an array of object containing details of each match\n * @param {String} str - string\n * @param {String} regex - the regex applied to the string\n * @param {Integer} [limit] - max number of matches to return\n * @returns {Array} The array of match objects\n */\n function match(str, regex, limit) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n // limit, if specified, must be a non-negative number\n if (limit < 0) {\n throw {\n stack: (new Error()).stack,\n value: limit,\n code: 'D3040',\n index: 3\n };\n }\n\n var result = createSequence();\n\n if (typeof limit === 'undefined' || limit > 0) {\n var count = 0;\n var matches = evaluateMatcher(regex, str);\n if (typeof matches !== 'undefined') {\n while (typeof matches !== 'undefined' && (typeof limit === 'undefined' || count < limit)) {\n result.push({\n match: matches.match,\n index: matches.start,\n groups: matches.groups\n });\n matches = evaluateMatcher(matches.next);\n count++;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Match a string with a regex returning an array of object containing details of each match\n * @param {String} str - string\n * @param {String} pattern - the substring/regex applied to the string\n * @param {String} replacement - text to replace the matched substrings\n * @param {Integer} [limit] - max number of matches to return\n * @returns {Array} The array of match objects\n */\n function replace(str, pattern, replacement, limit) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n var self = this;\n\n // pattern cannot be an empty string\n if (pattern === '') {\n throw {\n code: \"D3010\",\n stack: (new Error()).stack,\n value: pattern,\n index: 2\n };\n }\n\n // limit, if specified, must be a non-negative number\n if (limit < 0) {\n throw {\n code: \"D3011\",\n stack: (new Error()).stack,\n value: limit,\n index: 4\n };\n }\n\n var replacer;\n if (typeof replacement === 'string') {\n replacer = function (regexMatch) {\n var substitute = '';\n // scan forward, copying the replacement text into the substitute string\n // and replace any occurrence of $n with the values matched by the regex\n var position = 0;\n var index = replacement.indexOf('$', position);\n while (index !== -1 && position < replacement.length) {\n substitute += replacement.substring(position, index);\n position = index + 1;\n var dollarVal = replacement.charAt(position);\n if (dollarVal === '$') {\n // literal $\n substitute += '$';\n position++;\n } else if (dollarVal === '0') {\n substitute += regexMatch.match;\n position++;\n } else {\n var maxDigits;\n if (regexMatch.groups.length === 0) {\n // no sub-matches; any $ followed by a digit will be replaced by an empty string\n maxDigits = 1;\n } else {\n // max number of digits to parse following the $\n maxDigits = Math.floor(Math.log(regexMatch.groups.length) * Math.LOG10E) + 1;\n }\n index = parseInt(replacement.substring(position, position + maxDigits), 10);\n if (maxDigits > 1 && index > regexMatch.groups.length) {\n index = parseInt(replacement.substring(position, position + maxDigits - 1), 10);\n }\n if (!isNaN(index)) {\n if (regexMatch.groups.length > 0) {\n var submatch = regexMatch.groups[index - 1];\n if (typeof submatch !== 'undefined') {\n substitute += submatch;\n }\n }\n position += index.toString().length;\n } else {\n // not a capture group, treat the $ as literal\n substitute += '$';\n }\n }\n index = replacement.indexOf('$', position);\n }\n substitute += replacement.substring(position);\n return substitute;\n };\n } else {\n replacer = replacement;\n }\n\n var result = '';\n var position = 0;\n\n if (typeof limit === 'undefined' || limit > 0) {\n var count = 0;\n if (typeof pattern === 'string') {\n var index = str.indexOf(pattern, position);\n while (index !== -1 && (typeof limit === 'undefined' || count < limit)) {\n result += str.substring(position, index);\n result += replacement;\n position = index + pattern.length;\n count++;\n index = str.indexOf(pattern, position);\n }\n result += str.substring(position);\n } else {\n var matches = evaluateMatcher(pattern, str);\n if (typeof matches !== 'undefined') {\n while (typeof matches !== 'undefined' && (typeof limit === 'undefined' || count < limit)) {\n result += str.substring(position, matches.start);\n var replacedWith = replacer.apply(self, [matches]);\n if (isPromise(replacedWith)) {\n replacedWith = replacedWith;\n }\n // check replacedWith is a string\n if (typeof replacedWith === 'string') {\n result += replacedWith;\n } else {\n // not a string - throw error\n throw {\n code: \"D3012\",\n stack: (new Error()).stack,\n value: replacedWith\n };\n }\n position = matches.start + matches.match.length;\n count++;\n matches = evaluateMatcher(matches.next);\n }\n result += str.substring(position);\n } else {\n result = str;\n }\n }\n } else {\n result = str;\n }\n\n return result;\n }\n\n /**\n * Base64 encode a string\n * @param {String} str - string\n * @returns {String} Base 64 encoding of the binary data\n */\n function base64encode(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n // Use btoa in a browser, or Buffer in Node.js\n\n var btoa = typeof window !== 'undefined' ?\n /* istanbul ignore next */ window.btoa :\n function (str) {\n // Simply doing `new Buffer` at this point causes Browserify to pull\n // in the entire Buffer browser library, which is large and unnecessary.\n // Using `global.Buffer` defeats this.\n return new global.Buffer.from(str, 'binary').toString('base64'); // eslint-disable-line new-cap\n };\n return btoa(str);\n }\n\n /**\n * Base64 decode a string\n * @param {String} str - string\n * @returns {String} Base 64 encoding of the binary data\n */\n function base64decode(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n // Use btoa in a browser, or Buffer in Node.js\n var atob = typeof window !== 'undefined' ?\n /* istanbul ignore next */ window.atob :\n function (str) {\n // Simply doing `new Buffer` at this point causes Browserify to pull\n // in the entire Buffer browser library, which is large and unnecessary.\n // Using `global.Buffer` defeats this.\n return new global.Buffer.from(str, 'base64').toString('binary'); // eslint-disable-line new-cap\n };\n return atob(str);\n }\n\n /**\n * Encode a string into a component for a url\n * @param {String} str - String to encode\n * @returns {string} Encoded string\n */\n function encodeUrlComponent(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n // Catch URIErrors when URI sequence is malformed\n var returnVal;\n try {\n returnVal = encodeURIComponent(str);\n } catch (e) {\n throw {\n code: \"D3140\",\n stack: (new Error()).stack,\n value: str,\n functionName: \"encodeUrlComponent\"\n };\n }\n return returnVal;\n }\n\n /**\n * Encode a string into a url\n * @param {String} str - String to encode\n * @returns {string} Encoded string\n */\n function encodeUrl(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n // Catch URIErrors when URI sequence is malformed\n var returnVal;\n try {\n returnVal = encodeURI(str);\n } catch (e) {\n throw {\n code: \"D3140\",\n stack: (new Error()).stack,\n value: str,\n functionName: \"encodeUrl\"\n };\n }\n return returnVal;\n }\n\n /**\n * Decode a string from a component for a url\n * @param {String} str - String to decode\n * @returns {string} Decoded string\n */\n function decodeUrlComponent(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n // Catch URIErrors when URI sequence is malformed\n var returnVal;\n try {\n returnVal = decodeURIComponent(str);\n } catch (e) {\n throw {\n code: \"D3140\",\n stack: (new Error()).stack,\n value: str,\n functionName: \"decodeUrlComponent\"\n };\n }\n return returnVal;\n }\n\n /**\n * Decode a string from a url\n * @param {String} str - String to decode\n * @returns {string} Decoded string\n */\n function decodeUrl(str) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n // Catch URIErrors when URI sequence is malformed\n var returnVal;\n try {\n returnVal = decodeURI(str);\n } catch (e) {\n throw {\n code: \"D3140\",\n stack: (new Error()).stack,\n value: str,\n functionName: \"decodeUrl\"\n };\n }\n return returnVal;\n }\n\n /**\n * Split a string into an array of substrings\n * @param {String} str - string\n * @param {String} separator - the token or regex that splits the string\n * @param {Integer} [limit] - max number of substrings\n * @returns {Array} The array of string\n */\n function split(str, separator, limit) {\n // undefined inputs always return undefined\n if (typeof str === 'undefined') {\n return undefined;\n }\n\n // limit, if specified, must be a non-negative number\n if (limit < 0) {\n throw {\n code: \"D3020\",\n stack: (new Error()).stack,\n value: limit,\n index: 3\n };\n }\n\n var result = [];\n\n if (typeof limit === 'undefined' || limit > 0) {\n if (typeof separator === 'string') {\n result = str.split(separator, limit);\n } else {\n var count = 0;\n var matches = evaluateMatcher(separator, str);\n if (typeof matches !== 'undefined') {\n var start = 0;\n while (typeof matches !== 'undefined' && (typeof limit === 'undefined' || count < limit)) {\n result.push(str.substring(start, matches.start));\n start = matches.end;\n matches = evaluateMatcher(matches.next);\n count++;\n }\n if (typeof limit === 'undefined' || count < limit) {\n result.push(str.substring(start));\n }\n } else {\n result.push(str);\n }\n }\n }\n\n return result;\n }\n\n /**\n * Join an array of strings\n * @param {Array} strs - array of string\n * @param {String} [separator] - the token that splits the string\n * @returns {String} The concatenated string\n */\n function join(strs, separator) {\n // undefined inputs always return undefined\n if (typeof strs === 'undefined') {\n return undefined;\n }\n\n // if separator is not specified, default to empty string\n if (typeof separator === 'undefined') {\n separator = \"\";\n }\n\n return strs.join(separator);\n }\n\n /**\n * Formats a number into a decimal string representation using XPath 3.1 F&O fn:format-number spec\n * @param {number} value - number to format\n * @param {String} picture - picture string definition\n * @param {Object} [options] - override locale defaults\n * @returns {String} The formatted string\n */\n function formatNumber(value, picture, options) {\n // undefined inputs always return undefined\n if (typeof value === 'undefined') {\n return undefined;\n }\n\n var defaults = {\n \"decimal-separator\": \".\",\n \"grouping-separator\": \",\",\n \"exponent-separator\": \"e\",\n \"infinity\": \"Infinity\",\n \"minus-sign\": \"-\",\n \"NaN\": \"NaN\",\n \"percent\": \"%\",\n \"per-mille\": \"\\u2030\",\n \"zero-digit\": \"0\",\n \"digit\": \"#\",\n \"pattern-separator\": \";\"\n };\n\n // if `options` is specified, then its entries override defaults\n var properties = defaults;\n if (typeof options !== 'undefined') {\n Object.keys(options).forEach(function (key) {\n properties[key] = options[key];\n });\n }\n\n var decimalDigitFamily = [];\n var zeroCharCode = properties['zero-digit'].charCodeAt(0);\n for (var ii = zeroCharCode; ii < zeroCharCode + 10; ii++) {\n decimalDigitFamily.push(String.fromCharCode(ii));\n }\n\n var activeChars = decimalDigitFamily.concat([properties['decimal-separator'], properties['exponent-separator'], properties['grouping-separator'], properties.digit, properties['pattern-separator']]);\n\n var subPictures = picture.split(properties['pattern-separator']);\n\n if (subPictures.length > 2) {\n throw {\n code: 'D3080',\n stack: (new Error()).stack\n };\n }\n\n var splitParts = function (subpicture) {\n var prefix = (function () {\n var ch;\n for (var ii = 0; ii < subpicture.length; ii++) {\n ch = subpicture.charAt(ii);\n if (activeChars.indexOf(ch) !== -1 && ch !== properties['exponent-separator']) {\n return subpicture.substring(0, ii);\n }\n }\n })();\n var suffix = (function () {\n var ch;\n for (var ii = subpicture.length - 1; ii >= 0; ii--) {\n ch = subpicture.charAt(ii);\n if (activeChars.indexOf(ch) !== -1 && ch !== properties['exponent-separator']) {\n return subpicture.substring(ii + 1);\n }\n }\n })();\n var activePart = subpicture.substring(prefix.length, subpicture.length - suffix.length);\n var mantissaPart, exponentPart, integerPart, fractionalPart;\n var exponentPosition = subpicture.indexOf(properties['exponent-separator'], prefix.length);\n if (exponentPosition === -1 || exponentPosition > subpicture.length - suffix.length) {\n mantissaPart = activePart;\n exponentPart = undefined;\n } else {\n mantissaPart = activePart.substring(0, exponentPosition);\n exponentPart = activePart.substring(exponentPosition + 1);\n }\n var decimalPosition = mantissaPart.indexOf(properties['decimal-separator']);\n if (decimalPosition === -1) {\n integerPart = mantissaPart;\n fractionalPart = suffix;\n } else {\n integerPart = mantissaPart.substring(0, decimalPosition);\n fractionalPart = mantissaPart.substring(decimalPosition + 1);\n }\n return {\n prefix: prefix,\n suffix: suffix,\n activePart: activePart,\n mantissaPart: mantissaPart,\n exponentPart: exponentPart,\n integerPart: integerPart,\n fractionalPart: fractionalPart,\n subpicture: subpicture\n };\n };\n\n // validate the picture string, F&O 4.7.3\n var validate = function (parts) {\n var error;\n var ii;\n var subpicture = parts.subpicture;\n var decimalPos = subpicture.indexOf(properties['decimal-separator']);\n if (decimalPos !== subpicture.lastIndexOf(properties['decimal-separator'])) {\n error = 'D3081';\n }\n if (subpicture.indexOf(properties.percent) !== subpicture.lastIndexOf(properties.percent)) {\n error = 'D3082';\n }\n if (subpicture.indexOf(properties['per-mille']) !== subpicture.lastIndexOf(properties['per-mille'])) {\n error = 'D3083';\n }\n if (subpicture.indexOf(properties.percent) !== -1 && subpicture.indexOf(properties['per-mille']) !== -1) {\n error = 'D3084';\n }\n var valid = false;\n for (ii = 0; ii < parts.mantissaPart.length; ii++) {\n var ch = parts.mantissaPart.charAt(ii);\n if (decimalDigitFamily.indexOf(ch) !== -1 || ch === properties.digit) {\n valid = true;\n break;\n }\n }\n if (!valid) {\n error = 'D3085';\n }\n var charTypes = parts.activePart.split('').map(function (char) {\n return activeChars.indexOf(char) === -1 ? 'p' : 'a';\n }).join('');\n if (charTypes.indexOf('p') !== -1) {\n error = 'D3086';\n }\n if (decimalPos !== -1) {\n if (subpicture.charAt(decimalPos - 1) === properties['grouping-separator'] || subpicture.charAt(decimalPos + 1) === properties['grouping-separator']) {\n error = 'D3087';\n }\n } else if (parts.integerPart.charAt(parts.integerPart.length - 1) === properties['grouping-separator']) {\n error = 'D3088';\n }\n if (subpicture.indexOf(properties['grouping-separator'] + properties['grouping-separator']) !== -1) {\n error = 'D3089';\n }\n var optionalDigitPos = parts.integerPart.indexOf(properties.digit);\n if (optionalDigitPos !== -1 && parts.integerPart.substring(0, optionalDigitPos).split('').filter(function (char) {\n return decimalDigitFamily.indexOf(char) > -1;\n }).length > 0) {\n error = 'D3090';\n }\n optionalDigitPos = parts.fractionalPart.lastIndexOf(properties.digit);\n if (optionalDigitPos !== -1 && parts.fractionalPart.substring(optionalDigitPos).split('').filter(function (char) {\n return decimalDigitFamily.indexOf(char) > -1;\n }).length > 0) {\n error = 'D3091';\n }\n var exponentExists = (typeof parts.exponentPart === 'string');\n if (exponentExists && parts.exponentPart.length > 0 && (subpicture.indexOf(properties.percent) !== -1 || subpicture.indexOf(properties['per-mille']) !== -1)) {\n error = 'D3092';\n }\n if (exponentExists && (parts.exponentPart.length === 0 || parts.exponentPart.split('').filter(function (char) {\n return decimalDigitFamily.indexOf(char) === -1;\n }).length > 0)) {\n error = 'D3093';\n }\n if (error) {\n throw {\n code: error,\n stack: (new Error()).stack\n };\n }\n };\n\n // analyse the picture string, F&O 4.7.4\n var analyse = function (parts) {\n var getGroupingPositions = function (part, toLeft) {\n var positions = [];\n var groupingPosition = part.indexOf(properties['grouping-separator']);\n while (groupingPosition !== -1) {\n var charsToTheRight = (toLeft ? part.substring(0, groupingPosition) : part.substring(groupingPosition)).split('').filter(function (char) {\n return decimalDigitFamily.indexOf(char) !== -1 || char === properties.digit;\n }).length;\n positions.push(charsToTheRight);\n groupingPosition = parts.integerPart.indexOf(properties['grouping-separator'], groupingPosition + 1);\n }\n return positions;\n };\n var integerPartGroupingPositions = getGroupingPositions(parts.integerPart);\n var regular = function (indexes) {\n // are the grouping positions regular? i.e. same interval between each of them\n if (indexes.length === 0) {\n return 0;\n }\n var gcd = function (a, b) {\n return b === 0 ? a : gcd(b, a % b);\n };\n // find the greatest common divisor of all the positions\n var factor = indexes.reduce(gcd);\n // is every position separated by this divisor? If so, it's regular\n for (var index = 1; index <= indexes.length; index++) {\n if (indexes.indexOf(index * factor) === -1) {\n return 0;\n }\n }\n return factor;\n };\n\n var regularGrouping = regular(integerPartGroupingPositions);\n var fractionalPartGroupingPositions = getGroupingPositions(parts.fractionalPart, true);\n\n var minimumIntegerPartSize = parts.integerPart.split('').filter(function (char) {\n return decimalDigitFamily.indexOf(char) !== -1;\n }).length;\n var scalingFactor = minimumIntegerPartSize;\n\n var fractionalPartArray = parts.fractionalPart.split('');\n var minimumFactionalPartSize = fractionalPartArray.filter(function (char) {\n return decimalDigitFamily.indexOf(char) !== -1;\n }).length;\n var maximumFactionalPartSize = fractionalPartArray.filter(function (char) {\n return decimalDigitFamily.indexOf(char) !== -1 || char === properties.digit;\n }).length;\n var exponentPresent = typeof parts.exponentPart === 'string';\n if (minimumIntegerPartSize === 0 && maximumFactionalPartSize === 0) {\n if (exponentPresent) {\n minimumFactionalPartSize = 1;\n maximumFactionalPartSize = 1;\n } else {\n minimumIntegerPartSize = 1;\n }\n }\n if (exponentPresent && minimumIntegerPartSize === 0 && parts.integerPart.indexOf(properties.digit) !== -1) {\n minimumIntegerPartSize = 1;\n }\n if (minimumIntegerPartSize === 0 && minimumFactionalPartSize === 0) {\n minimumFactionalPartSize = 1;\n }\n var minimumExponentSize = 0;\n if (exponentPresent) {\n minimumExponentSize = parts.exponentPart.split('').filter(function (char) {\n return decimalDigitFamily.indexOf(char) !== -1;\n }).length;\n }\n\n return {\n integerPartGroupingPositions: integerPartGroupingPositions,\n regularGrouping: regularGrouping,\n minimumIntegerPartSize: minimumIntegerPartSize,\n scalingFactor: scalingFactor,\n prefix: parts.prefix,\n fractionalPartGroupingPositions: fractionalPartGroupingPositions,\n minimumFactionalPartSize: minimumFactionalPartSize,\n maximumFactionalPartSize: maximumFactionalPartSize,\n minimumExponentSize: minimumExponentSize,\n suffix: parts.suffix,\n picture: parts.subpicture\n };\n };\n\n var parts = subPictures.map(splitParts);\n parts.forEach(validate);\n\n var variables = parts.map(analyse);\n\n var minus_sign = properties['minus-sign'];\n var zero_digit = properties['zero-digit'];\n var decimal_separator = properties['decimal-separator'];\n var grouping_separator = properties['grouping-separator'];\n\n if (variables.length === 1) {\n variables.push(JSON.parse(JSON.stringify(variables[0])));\n variables[1].prefix = minus_sign + variables[1].prefix;\n }\n\n // TODO cache the result of the analysis\n\n // format the number\n // bullet 1: TODO: NaN - not sure we'd ever get this in JSON\n var pic;\n // bullet 2:\n if (value >= 0) {\n pic = variables[0];\n } else {\n pic = variables[1];\n }\n var adjustedNumber;\n // bullet 3:\n if (pic.picture.indexOf(properties.percent) !== -1) {\n adjustedNumber = value * 100;\n } else if (pic.picture.indexOf(properties['per-mille']) !== -1) {\n adjustedNumber = value * 1000;\n } else {\n adjustedNumber = value;\n }\n // bullet 4:\n // TODO: infinity - not sure we'd ever get this in JSON\n // bullet 5:\n var mantissa, exponent;\n if (pic.minimumExponentSize === 0) {\n mantissa = adjustedNumber;\n } else {\n // mantissa * 10^exponent = adjustedNumber\n var maxMantissa = Math.pow(10, pic.scalingFactor);\n var minMantissa = Math.pow(10, pic.scalingFactor - 1);\n mantissa = adjustedNumber;\n exponent = 0;\n while (mantissa < minMantissa) {\n mantissa *= 10;\n exponent -= 1;\n }\n while (mantissa > maxMantissa) {\n mantissa /= 10;\n exponent += 1;\n }\n }\n // bullet 6:\n var roundedNumber = round(mantissa, pic.maximumFactionalPartSize);\n // bullet 7:\n var makeString = function (value, dp) {\n var str = Math.abs(value).toFixed(dp);\n if (zero_digit !== '0') {\n str = str.split('').map(function (digit) {\n if (digit >= '0' && digit <= '9') {\n return decimalDigitFamily[digit.charCodeAt(0) - 48];\n } else {\n return digit;\n }\n }).join('');\n }\n return str;\n };\n var stringValue = makeString(roundedNumber, pic.maximumFactionalPartSize);\n var decimalPos = stringValue.indexOf('.');\n if (decimalPos === -1) {\n stringValue = stringValue + decimal_separator;\n } else {\n stringValue = stringValue.replace('.', decimal_separator);\n }\n while (stringValue.charAt(0) === zero_digit) {\n stringValue = stringValue.substring(1);\n }\n while (stringValue.charAt(stringValue.length - 1) === zero_digit) {\n stringValue = stringValue.substring(0, stringValue.length - 1);\n }\n // bullets 8 & 9:\n decimalPos = stringValue.indexOf(decimal_separator);\n var padLeft = pic.minimumIntegerPartSize - decimalPos;\n var padRight = pic.minimumFactionalPartSize - (stringValue.length - decimalPos - 1);\n stringValue = (padLeft > 0 ? new Array(padLeft + 1).join(zero_digit) : '') + stringValue;\n stringValue = stringValue + (padRight > 0 ? new Array(padRight + 1).join(zero_digit) : '');\n decimalPos = stringValue.indexOf(decimal_separator);\n // bullet 10:\n if (pic.regularGrouping > 0) {\n var groupCount = Math.floor((decimalPos - 1) / pic.regularGrouping);\n for (var group = 1; group <= groupCount; group++) {\n stringValue = [stringValue.slice(0, decimalPos - group * pic.regularGrouping), grouping_separator, stringValue.slice(decimalPos - group * pic.regularGrouping)].join('');\n }\n } else {\n pic.integerPartGroupingPositions.forEach(function (pos) {\n stringValue = [stringValue.slice(0, decimalPos - pos), grouping_separator, stringValue.slice(decimalPos - pos)].join('');\n decimalPos++;\n });\n }\n // bullet 11:\n decimalPos = stringValue.indexOf(decimal_separator);\n pic.fractionalPartGroupingPositions.forEach(function (pos) {\n stringValue = [stringValue.slice(0, pos + decimalPos + 1), grouping_separator, stringValue.slice(pos + decimalPos + 1)].join('');\n });\n // bullet 12:\n decimalPos = stringValue.indexOf(decimal_separator);\n if (pic.picture.indexOf(decimal_separator) === -1 || decimalPos === stringValue.length - 1) {\n stringValue = stringValue.substring(0, stringValue.length - 1);\n }\n // bullet 13:\n if (typeof exponent !== 'undefined') {\n var stringExponent = makeString(exponent, 0);\n padLeft = pic.minimumExponentSize - stringExponent.length;\n if (padLeft > 0) {\n stringExponent = new Array(padLeft + 1).join(zero_digit) + stringExponent;\n }\n stringValue = stringValue + properties['exponent-separator'] + (exponent < 0 ? minus_sign : '') + stringExponent;\n }\n // bullet 14:\n stringValue = pic.prefix + stringValue + pic.suffix;\n return stringValue;\n }\n\n /**\n * Converts a number to a string using a specified number base\n * @param {number} value - the number to convert\n * @param {number} [radix] - the number base; must be between 2 and 36. Defaults to 10\n * @returns {string} - the converted string\n */\n function formatBase(value, radix) {\n // undefined inputs always return undefined\n if (typeof value === 'undefined') {\n return undefined;\n }\n\n value = round(value);\n\n if (typeof radix === 'undefined') {\n radix = 10;\n } else {\n radix = round(radix);\n }\n\n if (radix < 2 || radix > 36) {\n throw {\n code: 'D3100',\n stack: (new Error()).stack,\n value: radix\n };\n\n }\n\n var result = value.toString(radix);\n\n return result;\n }\n\n /**\n * Cast argument to number\n * @param {Object} arg - Argument\n * @returns {Number} numeric value of argument\n */\n function number(arg) {\n var result;\n\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n if (typeof arg === 'number') {\n // already a number\n result = arg;\n } else if (typeof arg === 'string' && /^-?[0-9]+(\\.[0-9]+)?([Ee][-+]?[0-9]+)?$/.test(arg) && !isNaN(parseFloat(arg)) && isFinite(arg)) {\n result = parseFloat(arg);\n } else if (typeof arg === 'string' && /^(0[xX][0-9A-Fa-f]+)|(0[oO][0-7]+)|(0[bB][0-1]+)$/.test(arg)) {\n result = Number(arg);\n } else if (arg === true) {\n // boolean true casts to 1\n result = 1;\n } else if (arg === false) {\n // boolean false casts to 0\n result = 0;\n } else {\n throw {\n code: \"D3030\",\n value: arg,\n stack: (new Error()).stack,\n index: 1\n };\n }\n return result;\n }\n\n /**\n * Absolute value of a number\n * @param {Number} arg - Argument\n * @returns {Number} absolute value of argument\n */\n function abs(arg) {\n var result;\n\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n result = Math.abs(arg);\n return result;\n }\n\n /**\n * Rounds a number down to integer\n * @param {Number} arg - Argument\n * @returns {Number} rounded integer\n */\n function floor(arg) {\n var result;\n\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n result = Math.floor(arg);\n return result;\n }\n\n /**\n * Rounds a number up to integer\n * @param {Number} arg - Argument\n * @returns {Number} rounded integer\n */\n function ceil(arg) {\n var result;\n\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n result = Math.ceil(arg);\n return result;\n }\n\n /**\n * Round to half even\n * @param {Number} arg - Argument\n * @param {Number} [precision] - number of decimal places\n * @returns {Number} rounded integer\n */\n function round(arg, precision) {\n var result;\n\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n if (precision) {\n // shift the decimal place - this needs to be done in a string since multiplying\n // by a power of ten can introduce floating point precision errors which mess up\n // this rounding algorithm - See 'Decimal rounding' in\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n // Shift\n var value = arg.toString().split('e');\n arg = +(value[0] + 'e' + (value[1] ? (+value[1] + precision) : precision));\n\n }\n\n // round up to nearest int\n result = Math.round(arg);\n var diff = result - arg;\n if (Math.abs(diff) === 0.5 && Math.abs(result % 2) === 1) {\n // rounded the wrong way - adjust to nearest even number\n result = result - 1;\n }\n if (precision) {\n // Shift back\n value = result.toString().split('e');\n /* istanbul ignore next */\n result = +(value[0] + 'e' + (value[1] ? (+value[1] - precision) : -precision));\n }\n if (Object.is(result, -0)) { // ESLint rule 'no-compare-neg-zero' suggests this way\n // JSON doesn't do -0\n result = 0;\n }\n return result;\n }\n\n /**\n * Square root of number\n * @param {Number} arg - Argument\n * @returns {Number} square root\n */\n function sqrt(arg) {\n var result;\n\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n if (arg < 0) {\n throw {\n stack: (new Error()).stack,\n code: \"D3060\",\n index: 1,\n value: arg\n };\n }\n\n result = Math.sqrt(arg);\n\n return result;\n }\n\n /**\n * Raises number to the power of the second number\n * @param {Number} arg - the base\n * @param {Number} exp - the exponent\n * @returns {Number} rounded integer\n */\n function power(arg, exp) {\n var result;\n\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n result = Math.pow(arg, exp);\n\n if (!isFinite(result)) {\n throw {\n stack: (new Error()).stack,\n code: \"D3061\",\n index: 1,\n value: arg,\n exp: exp\n };\n }\n\n return result;\n }\n\n /**\n * Returns a random number 0 <= n < 1\n * @returns {number} random number\n */\n function random() {\n return Math.random();\n }\n\n /**\n * Evaluate an input and return a boolean\n * @param {*} arg - Arguments\n * @returns {boolean} Boolean\n */\n function boolean(arg) {\n // cast arg to its effective boolean value\n // boolean: unchanged\n // string: zero-length -> false; otherwise -> true\n // number: 0 -> false; otherwise -> true\n // null -> false\n // array: empty -> false; length > 1 -> true\n // object: empty -> false; non-empty -> true\n // function -> false\n\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n var result = false;\n if (Array.isArray(arg)) {\n if (arg.length === 1) {\n result = boolean(arg[0]);\n } else if (arg.length > 1) {\n var trues = arg.filter(function (val) {\n return boolean(val);\n });\n result = trues.length > 0;\n }\n } else if (typeof arg === 'string') {\n if (arg.length > 0) {\n result = true;\n }\n } else if (isNumeric(arg)) {\n if (arg !== 0) {\n result = true;\n }\n } else if (arg !== null && typeof arg === 'object' && !isFunction(arg)) {\n if (Object.keys(arg).length > 0) {\n result = true;\n }\n } else if (typeof arg === 'boolean' && arg === true) {\n result = true;\n }\n return result;\n }\n\n /**\n * returns the Boolean NOT of the arg\n * @param {*} arg - argument\n * @returns {boolean} - NOT arg\n */\n function not(arg) {\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n return !boolean(arg);\n }\n\n /**\n * Helper function to build the arguments to be supplied to the function arg of the\n * HOFs map, filter, each, sift and single\n * @param {function} func - the function to be invoked\n * @param {*} arg1 - the first (required) arg - the value\n * @param {*} arg2 - the second (optional) arg - the position (index or key)\n * @param {*} arg3 - the third (optional) arg - the whole structure (array or object)\n * @returns {*[]} the argument list\n */\n function hofFuncArgs(func, arg1, arg2, arg3) {\n var func_args = [arg1]; // the first arg (the value) is required\n // the other two are optional - only supply it if the function can take it\n var length = getFunctionArity(func);\n if (length >= 2) {\n func_args.push(arg2);\n }\n if (length >= 3) {\n func_args.push(arg3);\n }\n return func_args;\n }\n\n /**\n * Create a map from an array of arguments\n * @param {Array} [arr] - array to map over\n * @param {Function} func - function to apply\n * @returns {Array} Map array\n */\n function map(arr, func) {\n // undefined inputs always return undefined\n if (typeof arr === 'undefined') {\n return undefined;\n }\n\n var result = createSequence();\n // do the map - iterate over the arrays, and invoke func\n for (var i = 0; i < arr.length; i++) {\n var func_args = hofFuncArgs(func, arr[i], i, arr);\n // invoke func\n var res = func.apply(this, func_args);\n if (typeof res !== 'undefined') {\n result.push(res);\n }\n }\n\n return result;\n }\n\n /**\n * Create a map from an array of arguments\n * @param {Array} [arr] - array to filter\n * @param {Function} func - predicate function\n * @returns {Array} Map array\n */\n function filter(arr, func) {\n // undefined inputs always return undefined\n if (typeof arr === 'undefined') {\n return undefined;\n }\n\n var result = createSequence();\n\n for (var i = 0; i < arr.length; i++) {\n var entry = arr[i];\n var func_args = hofFuncArgs(func, entry, i, arr);\n // invoke func\n var res = func.apply(this, func_args);\n if (boolean(res)) {\n result.push(entry);\n }\n }\n\n return result;\n }\n\n /**\n * Given an array, find the single element matching a specified condition\n * Throws an exception if the number of matching elements is not exactly one\n * @param {Array} [arr] - array to filter\n * @param {Function} [func] - predicate function\n * @returns {*} Matching element\n */\n function single(arr, func) {\n // undefined inputs always return undefined\n if (typeof arr === 'undefined') {\n return undefined;\n }\n\n var hasFoundMatch = false;\n var result;\n\n for (var i = 0; i < arr.length; i++) {\n var entry = arr[i];\n var positiveResult = true;\n if (typeof func !== 'undefined') {\n var func_args = hofFuncArgs(func, entry, i, arr);\n // invoke func\n var res = func.apply(this, func_args);\n positiveResult = boolean(res);\n }\n if (positiveResult) {\n if(!hasFoundMatch) {\n result = entry;\n hasFoundMatch = true;\n } else {\n throw {\n stack: (new Error()).stack,\n code: \"D3138\",\n index: i\n };\n }\n }\n }\n\n if(!hasFoundMatch) {\n throw {\n stack: (new Error()).stack,\n code: \"D3139\"\n };\n }\n\n return result;\n }\n\n /**\n * Convolves (zips) each value from a set of arrays\n * @param {Array} [args] - arrays to zip\n * @returns {Array} Zipped array\n */\n function zip() {\n // this can take a variable number of arguments\n var result = [];\n var args = Array.prototype.slice.call(arguments);\n // length of the shortest array\n var length = Math.min.apply(Math, args.map(function (arg) {\n if (Array.isArray(arg)) {\n return arg.length;\n }\n return 0;\n }));\n for (var i = 0; i < length; i++) {\n var tuple = args.map((arg) => {\n return arg[i];\n });\n result.push(tuple);\n }\n return result;\n }\n\n /**\n * Fold left function\n * @param {Array} sequence - Sequence\n * @param {Function} func - Function\n * @param {Object} init - Initial value\n * @returns {*} Result\n */\n function foldLeft(sequence, func, init) {\n // undefined inputs always return undefined\n if (typeof sequence === 'undefined') {\n return undefined;\n }\n\n var result;\n\n var arity = getFunctionArity(func);\n if (arity < 2) {\n throw {\n stack: (new Error()).stack,\n code: \"D3050\",\n index: 1\n };\n }\n\n var index;\n if (typeof init === 'undefined' && sequence.length > 0) {\n result = sequence[0];\n index = 1;\n } else {\n result = init;\n index = 0;\n }\n\n while (index < sequence.length) {\n var args = [result, sequence[index]];\n if (arity >= 3) {\n args.push(index);\n }\n if (arity >= 4) {\n args.push(sequence);\n }\n result = func.apply(this, args);\n index++;\n }\n\n return result;\n }\n\n /**\n * Return keys for an object\n * @param {Object} arg - Object\n * @returns {Array} Array of keys\n */\n function keys(arg) {\n var result = createSequence();\n\n if (Array.isArray(arg)) {\n // merge the keys of all of the items in the array\n var merge = {};\n arg.forEach(function (item) {\n var allkeys = keys(item);\n allkeys.forEach(function (key) {\n merge[key] = true;\n });\n });\n result = keys(merge);\n } else if (arg !== null && typeof arg === 'object' && !isFunction(arg)) {\n Object.keys(arg).forEach(key => result.push(key));\n }\n return result;\n }\n\n /**\n * Return value from an object for a given key\n * @param {Object} input - Object/Array\n * @param {String} key - Key in object\n * @returns {*} Value of key in object\n */\n function lookup(input, key) {\n // lookup the 'name' item in the input\n var result;\n if (Array.isArray(input)) {\n result = createSequence();\n for(var ii = 0; ii < input.length; ii++) {\n var res = lookup(input[ii], key);\n if (typeof res !== 'undefined') {\n if (Array.isArray(res)) {\n res.forEach(val => result.push(val));\n } else {\n result.push(res);\n }\n }\n }\n } else if (input !== null && typeof input === 'object' && !isFunction(input)) {\n result = input[key];\n }\n return result;\n }\n\n /**\n * Append second argument to first\n * @param {Array|Object} arg1 - First argument\n * @param {Array|Object} arg2 - Second argument\n * @returns {*} Appended arguments\n */\n function append(arg1, arg2) {\n // disregard undefined args\n if (typeof arg1 === 'undefined') {\n return arg2;\n }\n if (typeof arg2 === 'undefined') {\n return arg1;\n }\n // if either argument is not an array, make it so\n if (!Array.isArray(arg1)) {\n arg1 = createSequence(arg1);\n }\n if (!Array.isArray(arg2)) {\n arg2 = [arg2];\n }\n return arg1.concat(arg2);\n }\n\n /**\n * Determines if the argument is undefined\n * @param {*} arg - argument\n * @returns {boolean} False if argument undefined, otherwise true\n */\n function exists(arg) {\n if (typeof arg === 'undefined') {\n return false;\n } else {\n return true;\n }\n }\n\n /**\n * Splits an object into an array of object with one property each\n * @param {*} arg - the object to split\n * @returns {*} - the array\n */\n function spread(arg) {\n var result = createSequence();\n\n if (Array.isArray(arg)) {\n // spread all of the items in the array\n arg.forEach(function (item) {\n result = append(result, spread(item));\n });\n } else if (arg !== null && typeof arg === 'object' && !isLambda(arg)) {\n for (var key in arg) {\n var obj = {};\n obj[key] = arg[key];\n result.push(obj);\n }\n } else {\n result = arg;\n }\n return result;\n }\n\n /**\n * Merges an array of objects into a single object. Duplicate properties are\n * overridden by entries later in the array\n * @param {*} arg - the objects to merge\n * @returns {*} - the object\n */\n function merge(arg) {\n // undefined inputs always return undefined\n if (typeof arg === 'undefined') {\n return undefined;\n }\n\n var result = {};\n\n arg.forEach(function (obj) {\n for (var prop in obj) {\n result[prop] = obj[prop];\n }\n });\n return result;\n }\n\n /**\n * Reverses the order of items in an array\n * @param {Array} arr - the array to reverse\n * @returns {Array} - the reversed array\n */\n function reverse(arr) {\n // undefined inputs always return undefined\n if (typeof arr === 'undefined') {\n return undefined;\n }\n\n if (arr.length <= 1) {\n return arr;\n }\n\n var length = arr.length;\n var result = new Array(length);\n for (var i = 0; i < length; i++) {\n result[length - i - 1] = arr[i];\n }\n\n return result;\n }\n\n /**\n *\n * @param {*} obj - the input object to iterate over\n * @param {*} func - the function to apply to each key/value pair\n * @returns {Array} - the resultant array\n */\n function each(obj, func) {\n var result = createSequence();\n\n for (var key in obj) {\n var func_args = hofFuncArgs(func, obj[key], key, obj);\n // invoke func\n var val = func.apply(this, func_args);\n if(typeof val !== 'undefined') {\n result.push(val);\n }\n }\n\n return result;\n }\n\n /**\n *\n * @param {string} [message] - the message to attach to the error\n * @throws custom error with code 'D3137'\n */\n function error(message) {\n throw {\n code: \"D3137\",\n stack: (new Error()).stack,\n message: message || \"$error() function evaluated\"\n };\n }\n\n /**\n *\n * @param {boolean} condition - the condition to evaluate\n * @param {string} [message] - the message to attach to the error\n * @throws custom error with code 'D3137'\n * @returns {undefined}\n */\n function assert(condition, message) {\n if(!condition) {\n throw {\n code: \"D3141\",\n stack: (new Error()).stack,\n message: message || \"$assert() statement failed\"\n };\n }\n\n return undefined;\n }\n\n /**\n *\n * @param {*} [value] - the input to which the type will be checked\n * @returns {string} - the type of the input\n */\n function type(value) {\n if (value === undefined) {\n return undefined;\n }\n\n if (value === null) {\n return 'null';\n }\n\n if (isNumeric(value)) {\n return 'number';\n }\n\n if (typeof value === 'string') {\n return 'string';\n }\n\n if (typeof value === 'boolean') {\n return 'boolean';\n }\n\n if(Array.isArray(value)) {\n return 'array';\n }\n\n if(isFunction(value)) {\n return 'function';\n }\n\n return 'object';\n }\n\n /**\n * Implements the merge sort (stable) with optional comparator function\n *\n * @param {Array} arr - the array to sort\n * @param {*} comparator - comparator function\n * @returns {Array} - sorted array\n */\n function sort(arr, comparator) {\n // undefined inputs always return undefined\n if (typeof arr === 'undefined') {\n return undefined;\n }\n\n if (arr.length <= 1) {\n return arr;\n }\n\n var comp;\n if (typeof comparator === 'undefined') {\n // inject a default comparator - only works for numeric or string arrays\n if (!isArrayOfNumbers(arr) && !isArrayOfStrings(arr)) {\n throw {\n stack: (new Error()).stack,\n code: \"D3070\",\n index: 1\n };\n }\n\n comp = function (a, b) {\n return a > b;\n };\n } else {\n // for internal usage of functionSort (i.e. order-by syntax)\n comp = comparator;\n }\n\n var merge = function (l, r) {\n var merge_iter = function (result, left, right) {\n if (left.length === 0) {\n Array.prototype.push.apply(result, right);\n } else if (right.length === 0) {\n Array.prototype.push.apply(result, left);\n } else if ( comp(left[0], right[0])) { // invoke the comparator function\n // if it returns true - swap left and right\n result.push(right[0]);\n merge_iter(result, left, right.slice(1));\n } else {\n // otherwise keep the same order\n result.push(left[0]);\n merge_iter(result, left.slice(1), right);\n }\n };\n var merged = [];\n merge_iter(merged, l, r);\n return merged;\n };\n\n var msort = function (array) {\n if (!Array.isArray(array) || array.length <= 1) {\n return array;\n } else {\n var middle = Math.floor(array.length / 2);\n var left = array.slice(0, middle);\n var right = array.slice(middle);\n left = msort(left);\n right = msort(right);\n return merge(left, right);\n }\n };\n\n var result = msort(arr);\n\n return result;\n }\n\n /**\n * Randomly shuffles the contents of an array\n * @param {Array} arr - the input array\n * @returns {Array} the shuffled array\n */\n function shuffle(arr) {\n // undefined inputs always return undefined\n if (typeof arr === 'undefined') {\n return undefined;\n }\n\n if (arr.length <= 1) {\n return arr;\n }\n\n // shuffle using the 'inside-out' variant of the Fisher-Yates algorithm\n var result = new Array(arr.length);\n for (var i = 0; i < arr.length; i++) {\n var j = Math.floor(Math.random() * (i + 1)); // random integer such that 0 ≤ j ≤ i\n if (i !== j) {\n result[i] = result[j];\n }\n result[j] = arr[i];\n }\n\n return result;\n }\n\n /**\n * Returns the values that appear in a sequence, with duplicates eliminated.\n * @param {Array} arr - An array or sequence of values\n * @returns {Array} - sequence of distinct values\n */\n function distinct(arr) {\n // undefined inputs always return undefined\n if (typeof arr === 'undefined') {\n return undefined;\n }\n\n if(!Array.isArray(arr) || arr.length <= 1) {\n return arr;\n }\n\n var results = isSequence(arr) ? createSequence() : [];\n\n for(var ii = 0; ii < arr.length; ii++) {\n var value = arr[ii];\n // is this value already in the result sequence?\n var includes = false;\n for(var jj = 0; jj < results.length; jj++) {\n if (deepEquals(value, results[jj])) {\n includes = true;\n break;\n }\n }\n if(!includes) {\n results.push(value);\n }\n }\n return results;\n }\n\n /**\n * Applies a predicate function to each key/value pair in an object, and returns an object containing\n * only the key/value pairs that passed the predicate\n *\n * @param {object} arg - the object to be sifted\n * @param {object} func - the predicate function (lambda or native)\n * @returns {object} - sifted object\n */\n function sift(arg, func) {\n var result = {};\n\n for (var item in arg) {\n var entry = arg[item];\n var func_args = hofFuncArgs(func, entry, item, arg);\n // invoke func\n var res = func.apply(this, func_args);\n if (boolean(res)) {\n result[item] = entry;\n }\n }\n\n // empty objects should be changed to undefined\n if (Object.keys(result).length === 0) {\n result = undefined;\n }\n\n return result;\n }\n\n return {\n sum, count, max, min, average,\n string, substring, substringBefore, substringAfter, lowercase, uppercase, length, trim, pad,\n match, contains, replace, split, join,\n formatNumber, formatBase, number, floor, ceil, round, abs, sqrt, power, random,\n boolean, not,\n map, zip, filter, single, foldLeft, sift,\n keys, lookup, append, exists, spread, merge, reverse, each, error, assert, type, sort, shuffle, distinct,\n base64encode, base64decode, encodeUrlComponent, encodeUrl, decodeUrlComponent, decodeUrl\n };\n})();\n\nmodule.exports = functions;\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./utils\":6}],3:[function(require,module,exports){\n/**\n * © Copyright IBM Corp. 2016, 2017 All Rights Reserved\n * Project name: JSONata\n * This project is licensed under the MIT License, see LICENSE\n */\n\n/**\n * @module JSONata\n * @description JSON query and transformation language\n */\n\nvar datetime = require('./datetime');\nvar fn = require('./functions');\nvar utils = require('./utils');\nvar parser = require('./parser');\nvar parseSignature = require('./signature');\n\n/**\n * jsonata\n * @function\n * @param {Object} expr - JSONata expression\n * @returns {{evaluate: evaluate, assign: assign}} Evaluated expression\n */\nvar jsonata = (function() {\n 'use strict';\n\n var isNumeric = utils.isNumeric;\n var isArrayOfStrings = utils.isArrayOfStrings;\n var isArrayOfNumbers = utils.isArrayOfNumbers;\n var createSequence = utils.createSequence;\n var isSequence = utils.isSequence;\n var isFunction = utils.isFunction;\n var isLambda = utils.isLambda;\n var isIterable = utils.isIterable;\n var isPromise = utils.isPromise;\n var getFunctionArity = utils.getFunctionArity;\n var isDeepEqual = utils.isDeepEqual;\n\n // Start of Evaluator code\n\n var staticFrame = createFrame(null);\n\n /**\n * Evaluate expression against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n function evaluate(expr, input, environment) {\n var result;\n\n var entryCallback = environment.lookup(Symbol.for('jsonata.__evaluate_entry'));\n if(entryCallback) {\n entryCallback(expr, input, environment);\n }\n\n switch (expr.type) {\n case 'path':\n result = evaluatePath(expr, input, environment);\n break;\n case 'binary':\n result = evaluateBinary(expr, input, environment);\n break;\n case 'unary':\n result = evaluateUnary(expr, input, environment);\n break;\n case 'name':\n result = evaluateName(expr, input, environment);\n break;\n case 'string':\n case 'number':\n case 'value':\n result = evaluateLiteral(expr, input, environment);\n break;\n case 'wildcard':\n result = evaluateWildcard(expr, input, environment);\n break;\n case 'descendant':\n result = evaluateDescendants(expr, input, environment);\n break;\n case 'parent':\n result = environment.lookup(expr.slot.label);\n break;\n case 'condition':\n result = evaluateCondition(expr, input, environment);\n break;\n case 'block':\n result = evaluateBlock(expr, input, environment);\n break;\n case 'bind':\n result = evaluateBindExpression(expr, input, environment);\n break;\n case 'regex':\n result = evaluateRegex(expr, input, environment);\n break;\n case 'function':\n result = evaluateFunction(expr, input, environment);\n break;\n case 'variable':\n result = evaluateVariable(expr, input, environment);\n break;\n case 'lambda':\n result = evaluateLambda(expr, input, environment);\n break;\n case 'partial':\n result = evaluatePartialApplication(expr, input, environment);\n break;\n case 'apply':\n result = evaluateApplyExpression(expr, input, environment);\n break;\n case 'transform':\n result = evaluateTransformExpression(expr, input, environment);\n break;\n }\n\n if (Object.prototype.hasOwnProperty.call(expr, 'predicate')) {\n for(var ii = 0; ii < expr.predicate.length; ii++) {\n result = evaluateFilter(expr.predicate[ii].expr, result, environment);\n }\n }\n\n if (expr.type !== 'path' && Object.prototype.hasOwnProperty.call(expr, 'group')) {\n result = evaluateGroupExpression(expr.group, result, environment);\n }\n\n var exitCallback = environment.lookup(Symbol.for('jsonata.__evaluate_exit'));\n if(exitCallback) {\n exitCallback(expr, input, environment, result);\n }\n\n if(result && isSequence(result) && !result.tupleStream) {\n if(expr.keepArray) {\n result.keepSingleton = true;\n }\n if(result.length === 0) {\n result = undefined;\n } else if(result.length === 1) {\n result = result.keepSingleton ? result : result[0];\n }\n\n }\n\n return result;\n }\n\n /**\n * Evaluate path expression against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n function evaluatePath(expr, input, environment) {\n var inputSequence;\n // expr is an array of steps\n // if the first step is a variable reference ($...), including root reference ($$),\n // then the path is absolute rather than relative\n if (Array.isArray(input) && expr.steps[0].type !== 'variable') {\n inputSequence = input;\n } else {\n // if input is not an array, make it so\n inputSequence = createSequence(input);\n }\n\n var resultSequence;\n var isTupleStream = false;\n var tupleBindings = undefined;\n\n // evaluate each step in turn\n for(var ii = 0; ii < expr.steps.length; ii++) {\n var step = expr.steps[ii];\n\n if(step.tuple) {\n isTupleStream = true;\n }\n\n // if the first step is an explicit array constructor, then just evaluate that (i.e. don't iterate over a context array)\n if(ii === 0 && step.consarray) {\n resultSequence = evaluate(step, inputSequence, environment);\n } else {\n if(isTupleStream) {\n tupleBindings = evaluateTupleStep(step, inputSequence, tupleBindings, environment);\n } else {\n resultSequence = evaluateStep(step, inputSequence, environment, ii === expr.steps.length - 1);\n }\n }\n\n if (!isTupleStream && (typeof resultSequence === 'undefined' || resultSequence.length === 0)) {\n break;\n }\n\n if(typeof step.focus === 'undefined') {\n inputSequence = resultSequence;\n }\n\n }\n\n if(isTupleStream) {\n if(expr.tuple) {\n // tuple stream is carrying ancestry information - keep this\n resultSequence = tupleBindings;\n } else {\n resultSequence = createSequence();\n for (ii = 0; ii < tupleBindings.length; ii++) {\n resultSequence.push(tupleBindings[ii]['@']);\n }\n }\n }\n\n if(expr.keepSingletonArray) {\n // if the array is explicitly constructed in the expression and marked to promote singleton sequences to array\n if(Array.isArray(resultSequence) && resultSequence.cons && !resultSequence.sequence) {\n resultSequence = createSequence(resultSequence);\n }\n resultSequence.keepSingleton = true;\n }\n\n if (expr.hasOwnProperty('group')) {\n resultSequence = evaluateGroupExpression(expr.group, isTupleStream ? tupleBindings : resultSequence, environment)\n }\n\n return resultSequence;\n }\n\n function createFrameFromTuple(environment, tuple) {\n var frame = createFrame(environment);\n for(const prop in tuple) {\n frame.bind(prop, tuple[prop]);\n }\n return frame;\n }\n\n /**\n * Evaluate a step within a path\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @param {boolean} lastStep - flag the last step in a path\n * @returns {*} Evaluated input data\n */\n function evaluateStep(expr, input, environment, lastStep) {\n var result;\n if(expr.type === 'sort') {\n result = evaluateSortExpression(expr, input, environment);\n if(expr.stages) {\n result = evaluateStages(expr.stages, result, environment);\n }\n return result;\n }\n\n result = createSequence();\n\n for(var ii = 0; ii < input.length; ii++) {\n var res = evaluate(expr, input[ii], environment);\n if(expr.stages) {\n for(var ss = 0; ss < expr.stages.length; ss++) {\n res = evaluateFilter(expr.stages[ss].expr, res, environment);\n }\n }\n if(typeof res !== 'undefined') {\n result.push(res);\n }\n }\n\n var resultSequence = createSequence();\n if(lastStep && result.length === 1 && Array.isArray(result[0]) && !isSequence(result[0])) {\n resultSequence = result[0];\n } else {\n // flatten the sequence\n result.forEach(function(res) {\n if (!Array.isArray(res) || res.cons) {\n // it's not an array - just push into the result sequence\n resultSequence.push(res);\n } else {\n // res is a sequence - flatten it into the parent sequence\n res.forEach(val => resultSequence.push(val));\n }\n });\n }\n\n return resultSequence;\n }\n\n function evaluateStages(stages, input, environment) {\n var result = input;\n for(var ss = 0; ss < stages.length; ss++) {\n var stage = stages[ss];\n switch(stage.type) {\n case 'filter':\n result = evaluateFilter(stage.expr, result, environment);\n break;\n case 'index':\n for(var ee = 0; ee < result.length; ee++) {\n var tuple = result[ee];\n tuple[stage.value] = ee;\n }\n break;\n }\n }\n return result;\n }\n\n /**\n * Evaluate a step within a path\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} tupleBindings - The tuple stream\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n function evaluateTupleStep(expr, input, tupleBindings, environment) {\n var result;\n if(expr.type === 'sort') {\n if(tupleBindings) {\n result = evaluateSortExpression(expr, tupleBindings, environment);\n } else {\n var sorted = evaluateSortExpression(expr, input, environment);\n result = createSequence();\n result.tupleStream = true;\n for(var ss = 0; ss < sorted.length; ss++) {\n var tuple = {'@': sorted[ss]};\n tuple[expr.index] = ss;\n result.push(tuple);\n }\n }\n if(expr.stages) {\n result = evaluateStages(expr.stages, result, environment);\n }\n return result;\n }\n\n result = createSequence();\n result.tupleStream = true;\n var stepEnv = environment;\n if(tupleBindings === undefined) {\n tupleBindings = input.map(item => { return {'@': item} });\n }\n\n for(var ee = 0; ee < tupleBindings.length; ee++) {\n stepEnv = createFrameFromTuple(environment, tupleBindings[ee]);\n var res = evaluate(expr, tupleBindings[ee]['@'], stepEnv);\n // res is the binding sequence for the output tuple stream\n if(typeof res !== 'undefined') {\n if (!Array.isArray(res)) {\n res = [res];\n }\n for (var bb = 0; bb < res.length; bb++) {\n tuple = {};\n Object.assign(tuple, tupleBindings[ee]);\n if(res.tupleStream) {\n Object.assign(tuple, res[bb]);\n } else {\n if (expr.focus) {\n tuple[expr.focus] = res[bb];\n tuple['@'] = tupleBindings[ee]['@'];\n } else {\n tuple['@'] = res[bb];\n }\n if (expr.index) {\n tuple[expr.index] = bb;\n }\n if (expr.ancestor) {\n tuple[expr.ancestor.label] = tupleBindings[ee]['@'];\n }\n }\n result.push(tuple);\n }\n }\n }\n\n if(expr.stages) {\n result = evaluateStages(expr.stages, result, environment);\n }\n\n return result;\n }\n\n /**\n * Apply filter predicate to input data\n * @param {Object} predicate - filter expression\n * @param {Object} input - Input data to apply predicates against\n * @param {Object} environment - Environment\n * @returns {*} Result after applying predicates\n */\n function evaluateFilter(predicate, input, environment) {\n var results = createSequence();\n if( input && input.tupleStream) {\n results.tupleStream = true;\n }\n if (!Array.isArray(input)) {\n input = createSequence(input);\n }\n if (predicate.type === 'number') {\n var index = Math.floor(predicate.value); // round it down\n if (index < 0) {\n // count in from end of array\n index = input.length + index;\n }\n var item = input[index];\n if(typeof item !== 'undefined') {\n if(Array.isArray(item)) {\n results = item;\n } else {\n results.push(item);\n }\n }\n } else {\n for (index = 0; index < input.length; index++) {\n var item = input[index];\n var context = item;\n var env = environment;\n if(input.tupleStream) {\n context = item['@'];\n env = createFrameFromTuple(environment, item);\n }\n var res = evaluate(predicate, context, env);\n if (isNumeric(res)) {\n res = [res];\n }\n if (isArrayOfNumbers(res)) {\n res.forEach(function (ires) {\n // round it down\n var ii = Math.floor(ires);\n if (ii < 0) {\n // count in from end of array\n ii = input.length + ii;\n }\n if (ii === index) {\n results.push(item);\n }\n });\n } else if (fn.boolean(res)) { // truthy\n results.push(item);\n }\n }\n }\n return results;\n }\n\n /**\n * Evaluate binary expression against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n function evaluateBinary(expr, input, environment) {\n var result;\n var lhs = evaluate(expr.lhs, input, environment);\n var op = expr.value;\n\n //defer evaluation of RHS to allow short-circuiting\n var evalrhs = () => evaluate(expr.rhs, input, environment);\n if (op === \"and\" || op === \"or\") {\n try {\n return evaluateBooleanExpression(lhs, evalrhs, op);\n } catch(err) {\n err.position = expr.position;\n err.token = op;\n throw err;\n }\n }\n\n var rhs = evalrhs();\n try {\n switch (op) {\n case '+':\n case '-':\n case '*':\n case '/':\n case '%':\n result = evaluateNumericExpression(lhs, rhs, op);\n break;\n case '=':\n case '!=':\n result = evaluateEqualityExpression(lhs, rhs, op);\n break;\n case '<':\n case '<=':\n case '>':\n case '>=':\n result = evaluateComparisonExpression(lhs, rhs, op);\n break;\n case '&':\n result = evaluateStringConcat(lhs, rhs);\n break;\n case '..':\n result = evaluateRangeExpression(lhs, rhs);\n break;\n case 'in':\n result = evaluateIncludesExpression(lhs, rhs);\n break;\n }\n } catch(err) {\n err.position = expr.position;\n err.token = op;\n throw err;\n }\n return result;\n }\n\n /**\n * Evaluate unary expression against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n function evaluateUnary(expr, input, environment) {\n var result;\n\n switch (expr.value) {\n case '-':\n result = evaluate(expr.expression, input, environment);\n if(typeof result === 'undefined') {\n result = undefined;\n } else if (isNumeric(result)) {\n result = -result;\n } else {\n throw {\n code: \"D1002\",\n stack: (new Error()).stack,\n position: expr.position,\n token: expr.value,\n value: result\n };\n }\n break;\n case '[':\n // array constructor - evaluate each item\n result = [];\n let generators = expr.expressions\n .map((item, idx) => {\n environment.isParallelCall = idx > 0\n return [item, evaluate(item, input, environment)]\n });\n for (let generator of generators) {\n var [item, value] = generator;\n if (typeof value !== 'undefined') {\n if(item.value === '[') {\n result.push(value);\n } else {\n result = fn.append(result, value);\n }\n }\n }\n if(expr.consarray) {\n Object.defineProperty(result, 'cons', {\n enumerable: false,\n configurable: false,\n value: true\n });\n }\n break;\n case '{':\n // object constructor - apply grouping\n result = evaluateGroupExpression(expr, input, environment);\n break;\n\n }\n return result;\n }\n\n /**\n * Evaluate name object against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n function evaluateName(expr, input, environment) {\n // lookup the 'name' item in the input\n return fn.lookup(input, expr.value);\n }\n\n /**\n * Evaluate literal against input data\n * @param {Object} expr - JSONata expression\n * @returns {*} Evaluated input data\n */\n function evaluateLiteral(expr) {\n return expr.value;\n }\n\n /**\n * Evaluate wildcard against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @returns {*} Evaluated input data\n */\n function evaluateWildcard(expr, input) {\n var results = createSequence();\n if (Array.isArray(input) && input.outerWrapper && input.length > 0) {\n input = input[0];\n }\n if (input !== null && typeof input === 'object') {\n Object.keys(input).forEach(function (key) {\n var value = input[key];\n if(Array.isArray(value)) {\n value = flatten(value);\n results = fn.append(results, value);\n } else {\n results.push(value);\n }\n });\n }\n\n // result = normalizeSequence(results);\n return results;\n }\n\n /**\n * Returns a flattened array\n * @param {Array} arg - the array to be flatten\n * @param {Array} flattened - carries the flattened array - if not defined, will initialize to []\n * @returns {Array} - the flattened array\n */\n function flatten(arg, flattened) {\n if(typeof flattened === 'undefined') {\n flattened = [];\n }\n if(Array.isArray(arg)) {\n arg.forEach(function (item) {\n flatten(item, flattened);\n });\n } else {\n flattened.push(arg);\n }\n return flattened;\n }\n\n /**\n * Evaluate descendants against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @returns {*} Evaluated input data\n */\n function evaluateDescendants(expr, input) {\n var result;\n var resultSequence = createSequence();\n if (typeof input !== 'undefined') {\n // traverse all descendants of this object/array\n recurseDescendants(input, resultSequence);\n if (resultSequence.length === 1) {\n result = resultSequence[0];\n } else {\n result = resultSequence;\n }\n }\n return result;\n }\n\n /**\n * Recurse through descendants\n * @param {Object} input - Input data\n * @param {Object} results - Results\n */\n function recurseDescendants(input, results) {\n // this is the equivalent of //* in XPath\n if (!Array.isArray(input)) {\n results.push(input);\n }\n if (Array.isArray(input)) {\n input.forEach(function (member) {\n recurseDescendants(member, results);\n });\n } else if (input !== null && typeof input === 'object') {\n Object.keys(input).forEach(function (key) {\n recurseDescendants(input[key], results);\n });\n }\n }\n\n /**\n * Evaluate numeric expression against input data\n * @param {Object} lhs - LHS value\n * @param {Object} rhs - RHS value\n * @param {Object} op - opcode\n * @returns {*} Result\n */\n function evaluateNumericExpression(lhs, rhs, op) {\n var result;\n\n if (typeof lhs !== 'undefined' && !isNumeric(lhs)) {\n throw {\n code: \"T2001\",\n stack: (new Error()).stack,\n value: lhs\n };\n }\n if (typeof rhs !== 'undefined' && !isNumeric(rhs)) {\n throw {\n code: \"T2002\",\n stack: (new Error()).stack,\n value: rhs\n };\n }\n\n if (typeof lhs === 'undefined' || typeof rhs === 'undefined') {\n // if either side is undefined, the result is undefined\n return result;\n }\n\n switch (op) {\n case '+':\n result = lhs + rhs;\n break;\n case '-':\n result = lhs - rhs;\n break;\n case '*':\n result = lhs * rhs;\n break;\n case '/':\n result = lhs / rhs;\n break;\n case '%':\n result = lhs % rhs;\n break;\n }\n return result;\n }\n\n /**\n * Evaluate equality expression against input data\n * @param {Object} lhs - LHS value\n * @param {Object} rhs - RHS value\n * @param {Object} op - opcode\n * @returns {*} Result\n */\n function evaluateEqualityExpression(lhs, rhs, op) {\n var result;\n\n // type checks\n var ltype = typeof lhs;\n var rtype = typeof rhs;\n\n if (ltype === 'undefined' || rtype === 'undefined') {\n // if either side is undefined, the result is false\n return false;\n }\n\n switch (op) {\n case '=':\n result = isDeepEqual(lhs, rhs);\n break;\n case '!=':\n result = !isDeepEqual(lhs, rhs);\n break;\n }\n return result;\n }\n\n /**\n * Evaluate comparison expression against input data\n * @param {Object} lhs - LHS value\n * @param {Object} rhs - RHS value\n * @param {Object} op - opcode\n * @returns {*} Result\n */\n function evaluateComparisonExpression(lhs, rhs, op) {\n var result;\n\n // type checks\n var ltype = typeof lhs;\n var rtype = typeof rhs;\n\n var lcomparable = (ltype === 'undefined' || ltype === 'string' || ltype === 'number');\n var rcomparable = (rtype === 'undefined' || rtype === 'string' || rtype === 'number');\n\n // if either aa or bb are not comparable (string or numeric) values, then throw an error\n if (!lcomparable || !rcomparable) {\n throw {\n code: \"T2010\",\n stack: (new Error()).stack,\n value: !(ltype === 'string' || ltype === 'number') ? lhs : rhs\n };\n }\n\n // if either side is undefined, the result is undefined\n if (ltype === 'undefined' || rtype === 'undefined') {\n return undefined;\n }\n\n //if aa and bb are not of the same type\n if (ltype !== rtype) {\n throw {\n code: \"T2009\",\n stack: (new Error()).stack,\n value: lhs,\n value2: rhs\n };\n }\n\n switch (op) {\n case '<':\n result = lhs < rhs;\n break;\n case '<=':\n result = lhs <= rhs;\n break;\n case '>':\n result = lhs > rhs;\n break;\n case '>=':\n result = lhs >= rhs;\n break;\n }\n return result;\n }\n\n /**\n * Inclusion operator - in\n *\n * @param {Object} lhs - LHS value\n * @param {Object} rhs - RHS value\n * @returns {boolean} - true if lhs is a member of rhs\n */\n function evaluateIncludesExpression(lhs, rhs) {\n var result = false;\n\n if (typeof lhs === 'undefined' || typeof rhs === 'undefined') {\n // if either side is undefined, the result is false\n return false;\n }\n\n if(!Array.isArray(rhs)) {\n rhs = [rhs];\n }\n\n for(var i = 0; i < rhs.length; i++) {\n if(rhs[i] === lhs) {\n result = true;\n break;\n }\n }\n\n return result;\n }\n\n /**\n * Evaluate boolean expression against input data\n * @param {Object} lhs - LHS value\n * @param {Function} evalrhs - function to evaluate RHS value\n * @param {Object} op - opcode\n * @returns {*} Result\n */\n function evaluateBooleanExpression(lhs, evalrhs, op) {\n var result;\n\n var lBool = boolize(lhs);\n\n switch (op) {\n case 'and':\n result = lBool && boolize( evalrhs());\n break;\n case 'or':\n result = lBool || boolize( evalrhs());\n break;\n }\n return result;\n }\n\n function boolize(value) {\n var booledValue = fn.boolean(value);\n return typeof booledValue === 'undefined' ? false : booledValue;\n }\n\n /**\n * Evaluate string concatenation against input data\n * @param {Object} lhs - LHS value\n * @param {Object} rhs - RHS value\n * @returns {string|*} Concatenated string\n */\n function evaluateStringConcat(lhs, rhs) {\n var result;\n\n var lstr = '';\n var rstr = '';\n if (typeof lhs !== 'undefined') {\n lstr = fn.string(lhs);\n }\n if (typeof rhs !== 'undefined') {\n rstr = fn.string(rhs);\n }\n\n result = lstr.concat(rstr);\n return result;\n }\n\n /**\n * Evaluate group expression against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {{}} Evaluated input data\n */\n function evaluateGroupExpression(expr, input, environment) {\n var result = {};\n var groups = {};\n var reduce = input && input.tupleStream ? true : false;\n // group the input sequence by 'key' expression\n if (!Array.isArray(input)) {\n input = createSequence(input);\n }\n // if the array is empty, add an undefined entry to enable literal JSON object to be generated\n if (input.length === 0) {\n input.push(undefined);\n }\n\n for(var itemIndex = 0; itemIndex < input.length; itemIndex++) {\n var item = input[itemIndex];\n var env = reduce ? createFrameFromTuple(environment, item) : environment;\n for(var pairIndex = 0; pairIndex < expr.lhs.length; pairIndex++) {\n var pair = expr.lhs[pairIndex];\n var key = evaluate(pair[0], reduce ? item['@'] : item, env);\n // key has to be a string\n if (typeof key !== 'string' && key !== undefined) {\n throw {\n code: \"T1003\",\n stack: (new Error()).stack,\n position: expr.position,\n value: key\n };\n }\n\n if (key !== undefined) {\n var entry = {data: item, exprIndex: pairIndex};\n if (groups.hasOwnProperty(key)) {\n // a value already exists in this slot\n if(groups[key].exprIndex !== pairIndex) {\n // this key has been generated by another expression in this group\n // when multiple key expressions evaluate to the same key, then error D1009 must be thrown\n throw {\n code: \"D1009\",\n stack: (new Error()).stack,\n position: expr.position,\n value: key\n };\n }\n\n // append it as an array\n groups[key].data = fn.append(groups[key].data, item);\n } else {\n groups[key] = entry;\n }\n }\n }\n }\n\n // iterate over the groups to evaluate the 'value' expression\n let generators = Object.keys(groups).map((key, idx) => {\n let entry = groups[key];\n var context = entry.data;\n var env = environment;\n if (reduce) {\n var tuple = reduceTupleStream(entry.data);\n context = tuple['@'];\n delete tuple['@'];\n env = createFrameFromTuple(environment, tuple);\n }\n environment.isParallelCall = idx > 0\n return [key, evaluate(expr.lhs[entry.exprIndex][1], context, env)];\n });\n\n for (let generator of generators) {\n var [key, value] = generator;\n if(typeof value !== 'undefined') {\n result[key] = value;\n }\n }\n\n return result;\n }\n\n function reduceTupleStream(tupleStream) {\n if(!Array.isArray(tupleStream)) {\n return tupleStream;\n }\n var result = {};\n Object.assign(result, tupleStream[0]);\n for(var ii = 1; ii < tupleStream.length; ii++) {\n for(const prop in tupleStream[ii]) {\n result[prop] = fn.append(result[prop], tupleStream[ii][prop]);\n }\n }\n return result;\n }\n\n /**\n * Evaluate range expression against input data\n * @param {Object} lhs - LHS value\n * @param {Object} rhs - RHS value\n * @returns {Array} Resultant array\n */\n function evaluateRangeExpression(lhs, rhs) {\n var result;\n\n if (typeof lhs !== 'undefined' && !Number.isInteger(lhs)) {\n throw {\n code: \"T2003\",\n stack: (new Error()).stack,\n value: lhs\n };\n }\n if (typeof rhs !== 'undefined' && !Number.isInteger(rhs)) {\n throw {\n code: \"T2004\",\n stack: (new Error()).stack,\n value: rhs\n };\n }\n\n if (typeof lhs === 'undefined' || typeof rhs === 'undefined') {\n // if either side is undefined, the result is undefined\n return result;\n }\n\n if (lhs > rhs) {\n // if the lhs is greater than the rhs, return undefined\n return result;\n }\n\n // limit the size of the array to ten million entries (1e7)\n // this is an implementation defined limit to protect against\n // memory and performance issues. This value may increase in the future.\n var size = rhs - lhs + 1;\n if(size > 1e7) {\n throw {\n code: \"D2014\",\n stack: (new Error()).stack,\n value: size\n };\n }\n\n result = new Array(size);\n for (var item = lhs, index = 0; item <= rhs; item++, index++) {\n result[index] = item;\n }\n result.sequence = true;\n return result;\n }\n\n /**\n * Evaluate bind expression against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n function evaluateBindExpression(expr, input, environment) {\n // The RHS is the expression to evaluate\n // The LHS is the name of the variable to bind to - should be a VARIABLE token (enforced by parser)\n var value = evaluate(expr.rhs, input, environment);\n environment.bind(expr.lhs.value, value);\n return value;\n }\n\n /**\n * Evaluate condition against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n function evaluateCondition(expr, input, environment) {\n var result;\n var condition = evaluate(expr.condition, input, environment);\n if (fn.boolean(condition)) {\n result = evaluate(expr.then, input, environment);\n } else if (typeof expr.else !== 'undefined') {\n result = evaluate(expr.else, input, environment);\n }\n return result;\n }\n\n /**\n * Evaluate block against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n function evaluateBlock(expr, input, environment) {\n var result;\n // create a new frame to limit the scope of variable assignments\n // TODO, only do this if the post-parse stage has flagged this as required\n var frame = createFrame(environment);\n // invoke each expression in turn\n // only return the result of the last one\n for(var ii = 0; ii < expr.expressions.length; ii++) {\n result = evaluate(expr.expressions[ii], input, frame);\n }\n\n return result;\n }\n\n /**\n * Prepare a regex\n * @param {Object} expr - expression containing regex\n * @returns {Function} Higher order function representing prepared regex\n */\n function evaluateRegex(expr) {\n var re = new jsonata.RegexEngine(expr.value);\n var closure = function(str, fromIndex) {\n var result;\n re.lastIndex = fromIndex || 0;\n var match = re.exec(str);\n if(match !== null) {\n result = {\n match: match[0],\n start: match.index,\n end: match.index + match[0].length,\n groups: []\n };\n if(match.length > 1) {\n for(var i = 1; i < match.length; i++) {\n result.groups.push(match[i]);\n }\n }\n result.next = function() {\n if(re.lastIndex >= str.length) {\n return undefined;\n } else {\n var next = closure(str, re.lastIndex);\n if(next && next.match === '') {\n // matches zero length string; this will never progress\n throw {\n code: \"D1004\",\n stack: (new Error()).stack,\n position: expr.position,\n value: expr.value.source\n };\n }\n return next;\n }\n };\n }\n\n return result;\n };\n return closure;\n }\n\n /**\n * Evaluate variable against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n function evaluateVariable(expr, input, environment) {\n // lookup the variable value in the environment\n var result;\n // if the variable name is empty string, then it refers to context value\n if (expr.value === '') {\n result = input && input.outerWrapper ? input[0] : input;\n } else {\n result = environment.lookup(expr.value);\n }\n return result;\n }\n\n /**\n * sort / order-by operator\n * @param {Object} expr - AST for operator\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Ordered sequence\n */\n function evaluateSortExpression(expr, input, environment) {\n var result;\n\n // evaluate the lhs, then sort the results in order according to rhs expression\n var lhs = input;\n var isTupleSort = input.tupleStream ? true : false;\n\n // sort the lhs array\n // use comparator function\n var comparator = function(a, b) { \n // expr.terms is an array of order-by in priority order\n var comp = 0;\n for(var index = 0; comp === 0 && index < expr.terms.length; index++) {\n var term = expr.terms[index];\n //evaluate the sort term in the context of a\n var context = a;\n var env = environment;\n if(isTupleSort) {\n context = a['@'];\n env = createFrameFromTuple(environment, a);\n }\n var aa = evaluate(term.expression, context, env);\n //evaluate the sort term in the context of b\n context = b;\n env = environment;\n if(isTupleSort) {\n context = b['@'];\n env = createFrameFromTuple(environment, b);\n }\n var bb = evaluate(term.expression, context, env);\n\n // type checks\n var atype = typeof aa;\n var btype = typeof bb;\n // undefined should be last in sort order\n if(atype === 'undefined') {\n // swap them, unless btype is also undefined\n comp = (btype === 'undefined') ? 0 : 1;\n continue;\n }\n if(btype === 'undefined') {\n comp = -1;\n continue;\n }\n\n // if aa or bb are not string or numeric values, then throw an error\n if(!(atype === 'string' || atype === 'number') || !(btype === 'string' || btype === 'number')) {\n throw {\n code: \"T2008\",\n stack: (new Error()).stack,\n position: expr.position,\n value: !(atype === 'string' || atype === 'number') ? aa : bb\n };\n }\n\n //if aa and bb are not of the same type\n if(atype !== btype) {\n throw {\n code: \"T2007\",\n stack: (new Error()).stack,\n position: expr.position,\n value: aa,\n value2: bb\n };\n }\n if(aa === bb) {\n // both the same - move on to next term\n continue;\n } else if (aa < bb) {\n comp = -1;\n } else {\n comp = 1;\n }\n if(term.descending === true) {\n comp = -comp;\n }\n }\n // only swap a & b if comp equals 1\n return comp === 1;\n };\n\n var focus = {\n environment: environment,\n input: input\n };\n // the `focus` is passed in as the `this` for the invoked function\n result = fn.sort.apply(focus, [lhs, comparator]);\n\n return result;\n }\n\n /**\n * create a transformer function\n * @param {Object} expr - AST for operator\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} tranformer function\n */\n function evaluateTransformExpression(expr, input, environment) {\n // create a function to implement the transform definition\n var transformer = function (obj) { // signature <(oa):o>\n // undefined inputs always return undefined\n if(typeof obj === 'undefined') {\n return undefined;\n }\n\n // this function returns a copy of obj with changes specified by the pattern/operation\n var cloneFunction = environment.lookup('clone');\n if(!isFunction(cloneFunction)) {\n // throw type error\n throw {\n code: \"T2013\",\n stack: (new Error()).stack,\n position: expr.position\n };\n }\n var result = apply(cloneFunction, [obj], null, environment);\n var matches = evaluate(expr.pattern, result, environment);\n if(typeof matches !== 'undefined') {\n if(!Array.isArray(matches)) {\n matches = [matches];\n }\n for(var ii = 0; ii < matches.length; ii++) {\n var match = matches[ii];\n if (match && (match.isPrototypeOf(result) || match instanceof Object.constructor)) {\n throw {\n code: \"D1010\",\n stack: (new Error()).stack,\n position: expr.position\n };\n }\n // evaluate the update value for each match\n var update = evaluate(expr.update, match, environment);\n // update must be an object\n var updateType = typeof update;\n if(updateType !== 'undefined') {\n if(updateType !== 'object' || update === null || Array.isArray(update)) {\n // throw type error\n throw {\n code: \"T2011\",\n stack: (new Error()).stack,\n position: expr.update.position,\n value: update\n };\n }\n // merge the update\n for(var prop in update) {\n match[prop] = update[prop];\n }\n }\n\n // delete, if specified, must be an array of strings (or single string)\n if(typeof expr.delete !== 'undefined') {\n var deletions = evaluate(expr.delete, match, environment);\n if(typeof deletions !== 'undefined') {\n var val = deletions;\n if (!Array.isArray(deletions)) {\n deletions = [deletions];\n }\n if (!isArrayOfStrings(deletions)) {\n // throw type error\n throw {\n code: \"T2012\",\n stack: (new Error()).stack,\n position: expr.delete.position,\n value: val\n };\n }\n for (var jj = 0; jj < deletions.length; jj++) {\n if(typeof match === 'object' && match !== null) {\n delete match[deletions[jj]];\n }\n }\n }\n }\n }\n }\n\n return result;\n };\n\n return defineFunction(transformer, '<(oa):o>');\n }\n\n var chainAST = parser('function($f, $g) { function($x){ $g($f($x)) } }');\n\n /**\n * Apply the function on the RHS using the sequence on the LHS as the first argument\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n function evaluateApplyExpression(expr, input, environment) {\n var result;\n\n\n var lhs = evaluate(expr.lhs, input, environment);\n if(expr.rhs.type === 'function') {\n // this is a function _invocation_; invoke it with lhs expression as the first argument\n result = evaluateFunction(expr.rhs, input, environment, { context: lhs });\n } else {\n var func = evaluate(expr.rhs, input, environment);\n\n if(!isFunction(func)) {\n throw {\n code: \"T2006\",\n stack: (new Error()).stack,\n position: expr.position,\n value: func\n };\n }\n\n if(isFunction(lhs)) {\n // this is function chaining (func1 ~> func2)\n // λ($f, $g) { λ($x){ $g($f($x)) } }\n var chain = evaluate(chainAST, null, environment);\n result = apply(chain, [lhs, func], null, environment);\n } else {\n result = apply(func, [lhs], null, environment);\n }\n\n }\n\n return result;\n }\n\n /**\n * Evaluate function against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n function evaluateFunction(expr, input, environment, applyto) {\n var result;\n\n // create the procedure\n // can't assume that expr.procedure is a lambda type directly\n // could be an expression that evaluates to a function (e.g. variable reference, parens expr etc.\n // evaluate it generically first, then check that it is a function. Throw error if not.\n var proc = evaluate(expr.procedure, input, environment);\n\n if (typeof proc === 'undefined' && expr.procedure.type === 'path' && environment.lookup(expr.procedure.steps[0].value)) {\n // help the user out here if they simply forgot the leading $\n throw {\n code: \"T1005\",\n stack: (new Error()).stack,\n position: expr.position,\n token: expr.procedure.steps[0].value\n };\n }\n\n var evaluatedArgs = [];\n if(typeof applyto !== 'undefined') {\n evaluatedArgs.push(applyto.context);\n }\n // eager evaluation - evaluate the arguments\n for (var jj = 0; jj < expr.arguments.length; jj++) {\n const arg = evaluate(expr.arguments[jj], input, environment);\n if(isFunction(arg)) {\n // wrap this in a closure\n const closure = function (...params) {\n // invoke func\n return apply(arg, params, null, environment);\n };\n closure.arity = getFunctionArity(arg);\n evaluatedArgs.push(closure);\n } else {\n evaluatedArgs.push(arg);\n }\n }\n // apply the procedure\n var procName = expr.procedure.type === 'path' ? expr.procedure.steps[0].value : expr.procedure.value;\n try {\n if(typeof proc === 'object') {\n proc.token = procName;\n proc.position = expr.position;\n }\n result = apply(proc, evaluatedArgs, input, environment);\n } catch (err) {\n if(!err.position) {\n // add the position field to the error\n err.position = expr.position;\n }\n if (!err.token) {\n // and the function identifier\n err.token = procName;\n }\n throw err;\n }\n return result;\n }\n\n /**\n * Apply procedure or function\n * @param {Object} proc - Procedure\n * @param {Array} args - Arguments\n * @param {Object} input - input\n * @param {Object} environment - environment\n * @returns {*} Result of procedure\n */\n function apply(proc, args, input, environment) {\n var result;\n result = applyInner(proc, args, input, environment);\n while(isLambda(result) && result.thunk === true) {\n // trampoline loop - this gets invoked as a result of tail-call optimization\n // the function returned a tail-call thunk\n // unpack it, evaluate its arguments, and apply the tail call\n var next = evaluate(result.body.procedure, result.input, result.environment);\n if(result.body.procedure.type === 'variable') {\n next.token = result.body.procedure.value;\n }\n next.position = result.body.procedure.position;\n var evaluatedArgs = [];\n for(var ii = 0; ii < result.body.arguments.length; ii++) {\n evaluatedArgs.push( evaluate(result.body.arguments[ii], result.input, result.environment));\n }\n\n result = applyInner(next, evaluatedArgs, input, environment);\n }\n return result;\n }\n\n /**\n * Apply procedure or function\n * @param {Object} proc - Procedure\n * @param {Array} args - Arguments\n * @param {Object} input - input\n * @param {Object} environment - environment\n * @returns {*} Result of procedure\n */\n function applyInner(proc, args, input, environment) {\n var result;\n try {\n var validatedArgs = args;\n if (proc) {\n validatedArgs = validateArguments(proc.signature, args, input);\n }\n\n if (isLambda(proc)) {\n result = applyProcedure(proc, validatedArgs);\n } else if (proc && proc._jsonata_function === true) {\n var focus = {\n environment: environment,\n input: input\n };\n // the `focus` is passed in as the `this` for the invoked function\n result = proc.implementation.apply(focus, validatedArgs);\n // `proc.implementation` might be a generator function\n // and `result` might be a generator - if so, yield\n if (isIterable(result)) {\n result = result.next().value;\n }\n if (isPromise(result)) {\n result = result;\n }\n } else if (typeof proc === 'function') {\n // typically these are functions that are returned by the invocation of plugin functions\n // the `input` is being passed in as the `this` for the invoked function\n // this is so that functions that return objects containing functions can chain\n // e.g. ( $func())\n result = proc.apply(input, validatedArgs);\n if (isPromise(result)) {\n result = result;\n }\n } else {\n throw {\n code: \"T1006\",\n stack: (new Error()).stack\n };\n }\n } catch(err) {\n if(proc) {\n if (typeof err.token == 'undefined' && typeof proc.token !== 'undefined') {\n err.token = proc.token;\n }\n err.position = proc.position || err.position;\n }\n throw err;\n }\n return result;\n }\n\n /**\n * Evaluate lambda against input data\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {{lambda: boolean, input: *, environment: *, arguments: *, body: *}} Evaluated input data\n */\n function evaluateLambda(expr, input, environment) {\n // make a function (closure)\n var procedure = {\n _jsonata_lambda: true,\n input: input,\n environment: environment,\n arguments: expr.arguments,\n signature: expr.signature,\n body: expr.body\n };\n if(expr.thunk === true) {\n procedure.thunk = true;\n }\n procedure.apply = function(self, args) {\n return apply(procedure, args, input, !!self ? self.environment : environment);\n };\n return procedure;\n }\n\n /**\n * Evaluate partial application\n * @param {Object} expr - JSONata expression\n * @param {Object} input - Input data to evaluate against\n * @param {Object} environment - Environment\n * @returns {*} Evaluated input data\n */\n function evaluatePartialApplication(expr, input, environment) {\n // partially apply a function\n var result;\n // evaluate the arguments\n var evaluatedArgs = [];\n for(var ii = 0; ii < expr.arguments.length; ii++) {\n var arg = expr.arguments[ii];\n if (arg.type === 'operator' && arg.value === '?') {\n evaluatedArgs.push(arg);\n } else {\n evaluatedArgs.push( evaluate(arg, input, environment));\n }\n }\n // lookup the procedure\n var proc = evaluate(expr.procedure, input, environment);\n if (typeof proc === 'undefined' && expr.procedure.type === 'path' && environment.lookup(expr.procedure.steps[0].value)) {\n // help the user out here if they simply forgot the leading $\n throw {\n code: \"T1007\",\n stack: (new Error()).stack,\n position: expr.position,\n token: expr.procedure.steps[0].value\n };\n }\n if (isLambda(proc)) {\n result = partialApplyProcedure(proc, evaluatedArgs);\n } else if (proc && proc._jsonata_function === true) {\n result = partialApplyNativeFunction(proc.implementation, evaluatedArgs);\n } else if (typeof proc === 'function') {\n result = partialApplyNativeFunction(proc, evaluatedArgs);\n } else {\n throw {\n code: \"T1008\",\n stack: (new Error()).stack,\n position: expr.position,\n token: expr.procedure.type === 'path' ? expr.procedure.steps[0].value : expr.procedure.value\n };\n }\n return result;\n }\n\n /**\n * Validate the arguments against the signature validator (if it exists)\n * @param {Function} signature - validator function\n * @param {Array} args - function arguments\n * @param {*} context - context value\n * @returns {Array} - validated arguments\n */\n function validateArguments(signature, args, context) {\n if(typeof signature === 'undefined') {\n // nothing to validate\n return args;\n }\n var validatedArgs = signature.validate(args, context);\n return validatedArgs;\n }\n\n /**\n * Apply procedure\n * @param {Object} proc - Procedure\n * @param {Array} args - Arguments\n * @returns {*} Result of procedure\n */\n function applyProcedure(proc, args) {\n var result;\n var env = createFrame(proc.environment);\n proc.arguments.forEach(function (param, index) {\n env.bind(param.value, args[index]);\n });\n if (typeof proc.body === 'function') {\n // this is a lambda that wraps a native function - generated by partially evaluating a native\n result = applyNativeFunction(proc.body, env);\n } else {\n result = evaluate(proc.body, proc.input, env);\n }\n return result;\n }\n\n /**\n * Partially apply procedure\n * @param {Object} proc - Procedure\n * @param {Array} args - Arguments\n * @returns {{lambda: boolean, input: *, environment: {bind, lookup}, arguments: Array, body: *}} Result of partially applied procedure\n */\n function partialApplyProcedure(proc, args) {\n // create a closure, bind the supplied parameters and return a function that takes the remaining (?) parameters\n var env = createFrame(proc.environment);\n var unboundArgs = [];\n proc.arguments.forEach(function (param, index) {\n var arg = args[index];\n if (arg && arg.type === 'operator' && arg.value === '?') {\n unboundArgs.push(param);\n } else {\n env.bind(param.value, arg);\n }\n });\n var procedure = {\n _jsonata_lambda: true,\n input: proc.input,\n environment: env,\n arguments: unboundArgs,\n body: proc.body\n };\n return procedure;\n }\n\n /**\n * Partially apply native function\n * @param {Function} native - Native function\n * @param {Array} args - Arguments\n * @returns {{lambda: boolean, input: *, environment: {bind, lookup}, arguments: Array, body: *}} Result of partially applying native function\n */\n function partialApplyNativeFunction(native, args) {\n // create a lambda function that wraps and invokes the native function\n // get the list of declared arguments from the native function\n // this has to be picked out from the toString() value\n var sigArgs = getNativeFunctionArguments(native);\n sigArgs = sigArgs.map(function (sigArg) {\n return '$' + sigArg.trim();\n });\n var body = 'function(' + sigArgs.join(', ') + '){ _ }';\n\n var bodyAST = parser(body);\n bodyAST.body = native;\n\n var partial = partialApplyProcedure(bodyAST, args);\n return partial;\n }\n\n /**\n * Apply native function\n * @param {Object} proc - Procedure\n * @param {Object} env - Environment\n * @returns {*} Result of applying native function\n */\n function applyNativeFunction(proc, env) {\n var sigArgs = getNativeFunctionArguments(proc);\n // generate the array of arguments for invoking the function - look them up in the environment\n var args = sigArgs.map(function (sigArg) {\n return env.lookup(sigArg.trim());\n });\n\n var focus = {\n environment: env\n };\n var result = proc.apply(focus, args);\n if (isPromise(result)) {\n result = result;\n }\n return result;\n }\n\n /**\n * Get native function arguments\n * @param {Function} func - Function\n * @returns {*|Array} Native function arguments\n */\n function getNativeFunctionArguments(func) {\n var signature = func.toString();\n var sigParens = /\\(([^)]*)\\)/.exec(signature)[1]; // the contents of the parens\n var sigArgs = sigParens.split(',');\n return sigArgs;\n }\n\n /**\n * Creates a function definition\n * @param {Function} func - function implementation in Javascript\n * @param {string} signature - JSONata function signature definition\n * @returns {{implementation: *, signature: *}} function definition\n */\n function defineFunction(func, signature) {\n var definition = {\n _jsonata_function: true,\n implementation: func\n };\n if(typeof signature !== 'undefined') {\n definition.signature = parseSignature(signature);\n }\n return definition;\n }\n\n\n /**\n * parses and evaluates the supplied expression\n * @param {string} expr - expression to evaluate\n * @returns {*} - result of evaluating the expression\n */\n function functionEval(expr, focus) {\n // undefined inputs always return undefined\n if(typeof expr === 'undefined') {\n return undefined;\n }\n var input = this.input;\n if(typeof focus !== 'undefined') {\n input = focus;\n // if the input is a JSON array, then wrap it in a singleton sequence so it gets treated as a single input\n if(Array.isArray(input) && !isSequence(input)) {\n input = createSequence(input);\n input.outerWrapper = true;\n }\n }\n\n try {\n var ast = parser(expr, false);\n } catch(err) {\n // error parsing the expression passed to $eval\n populateMessage(err);\n throw {\n stack: (new Error()).stack,\n code: \"D3120\",\n value: err.message,\n error: err\n };\n }\n try {\n var result = evaluate(ast, input, this.environment);\n } catch(err) {\n // error evaluating the expression passed to $eval\n populateMessage(err);\n throw {\n stack: (new Error()).stack,\n code: \"D3121\",\n value:err.message,\n error: err\n };\n }\n\n return result;\n }\n\n /**\n * Clones an object\n * @param {Object} arg - object to clone (deep copy)\n * @returns {*} - the cloned object\n */\n function functionClone(arg) {\n // undefined inputs always return undefined\n if(typeof arg === 'undefined') {\n return undefined;\n }\n\n return JSON.parse(fn.string(arg));\n }\n\n /**\n * Create frame\n * @param {Object} enclosingEnvironment - Enclosing environment\n * @returns {{bind: bind, lookup: lookup}} Created frame\n */\n function createFrame(enclosingEnvironment) {\n var bindings = {};\n const newFrame = {\n bind: function (name, value) {\n bindings[name] = value;\n },\n lookup: function (name) {\n var value;\n if(bindings.hasOwnProperty(name)) {\n value = bindings[name];\n } else if (enclosingEnvironment) {\n value = enclosingEnvironment.lookup(name);\n }\n return value;\n },\n timestamp: enclosingEnvironment ? enclosingEnvironment.timestamp : null,\n async: enclosingEnvironment ? enclosingEnvironment.async : false,\n isParallelCall: enclosingEnvironment ? enclosingEnvironment.isParallelCall : false,\n global: enclosingEnvironment ? enclosingEnvironment.global : {\n ancestry: [ null ]\n }\n };\n\n if (enclosingEnvironment) {\n var framePushCallback = enclosingEnvironment.lookup(Symbol.for('jsonata.__createFrame_push'));\n if(framePushCallback) {\n framePushCallback(enclosingEnvironment, newFrame);\n }\n }\n \n\n return newFrame\n }\n\n // Function registration\n staticFrame.bind('sum', defineFunction(fn.sum, '<a<n>:n>'));\n staticFrame.bind('count', defineFunction(fn.count, '<a:n>'));\n staticFrame.bind('max', defineFunction(fn.max, '<a<n>:n>'));\n staticFrame.bind('min', defineFunction(fn.min, '<a<n>:n>'));\n staticFrame.bind('average', defineFunction(fn.average, '<a<n>:n>'));\n staticFrame.bind('string', defineFunction(fn.string, '<x-b?:s>'));\n staticFrame.bind('substring', defineFunction(fn.substring, '<s-nn?:s>'));\n staticFrame.bind('substringBefore', defineFunction(fn.substringBefore, '<s-s:s>'));\n staticFrame.bind('substringAfter', defineFunction(fn.substringAfter, '<s-s:s>'));\n staticFrame.bind('lowercase', defineFunction(fn.lowercase, '<s-:s>'));\n staticFrame.bind('uppercase', defineFunction(fn.uppercase, '<s-:s>'));\n staticFrame.bind('length', defineFunction(fn.length, '<s-:n>'));\n staticFrame.bind('trim', defineFunction(fn.trim, '<s-:s>'));\n staticFrame.bind('pad', defineFunction(fn.pad, '<s-ns?:s>'));\n staticFrame.bind('match', defineFunction(fn.match, '<s-f<s:o>n?:a<o>>'));\n staticFrame.bind('contains', defineFunction(fn.contains, '<s-(sf):b>')); // TODO <s-(sf<s:o>):b>\n staticFrame.bind('replace', defineFunction(fn.replace, '<s-(sf)(sf)n?:s>')); // TODO <s-(sf<s:o>)(sf<o:s>)n?:s>\n staticFrame.bind('split', defineFunction(fn.split, '<s-(sf)n?:a<s>>')); // TODO <s-(sf<s:o>)n?:a<s>>\n staticFrame.bind('join', defineFunction(fn.join, '<a<s>s?:s>'));\n staticFrame.bind('formatNumber', defineFunction(fn.formatNumber, '<n-so?:s>'));\n staticFrame.bind('formatBase', defineFunction(fn.formatBase, '<n-n?:s>'));\n staticFrame.bind('formatInteger', defineFunction(datetime.formatInteger, '<n-s:s>'));\n staticFrame.bind('parseInteger', defineFunction(datetime.parseInteger, '<s-s:n>'));\n staticFrame.bind('number', defineFunction(fn.number, '<(nsb)-:n>'));\n staticFrame.bind('floor', defineFunction(fn.floor, '<n-:n>'));\n staticFrame.bind('ceil', defineFunction(fn.ceil, '<n-:n>'));\n staticFrame.bind('round', defineFunction(fn.round, '<n-n?:n>'));\n staticFrame.bind('abs', defineFunction(fn.abs, '<n-:n>'));\n staticFrame.bind('sqrt', defineFunction(fn.sqrt, '<n-:n>'));\n staticFrame.bind('power', defineFunction(fn.power, '<n-n:n>'));\n staticFrame.bind('random', defineFunction(fn.random, '<:n>'));\n staticFrame.bind('boolean', defineFunction(fn.boolean, '<x-:b>'));\n staticFrame.bind('not', defineFunction(fn.not, '<x-:b>'));\n staticFrame.bind('map', defineFunction(fn.map, '<af>'));\n staticFrame.bind('zip', defineFunction(fn.zip, '<a+>'));\n staticFrame.bind('filter', defineFunction(fn.filter, '<af>'));\n staticFrame.bind('single', defineFunction(fn.single, '<af?>'));\n staticFrame.bind('reduce', defineFunction(fn.foldLeft, '<afj?:j>')); // TODO <f<jj:j>a<j>j?:j>\n staticFrame.bind('sift', defineFunction(fn.sift, '<o-f?:o>'));\n staticFrame.bind('keys', defineFunction(fn.keys, '<x-:a<s>>'));\n staticFrame.bind('lookup', defineFunction(fn.lookup, '<x-s:x>'));\n staticFrame.bind('append', defineFunction(fn.append, '<xx:a>'));\n staticFrame.bind('exists', defineFunction(fn.exists, '<x:b>'));\n staticFrame.bind('spread', defineFunction(fn.spread, '<x-:a<o>>'));\n staticFrame.bind('merge', defineFunction(fn.merge, '<a<o>:o>'));\n staticFrame.bind('reverse', defineFunction(fn.reverse, '<a:a>'));\n staticFrame.bind('each', defineFunction(fn.each, '<o-f:a>'));\n staticFrame.bind('error', defineFunction(fn.error, '<s?:x>'));\n staticFrame.bind('assert', defineFunction(fn.assert, '<bs?:x>'));\n staticFrame.bind('type', defineFunction(fn.type, '<x:s>'));\n staticFrame.bind('sort', defineFunction(fn.sort, '<af?:a>'));\n staticFrame.bind('shuffle', defineFunction(fn.shuffle, '<a:a>'));\n staticFrame.bind('distinct', defineFunction(fn.distinct, '<x:x>'));\n staticFrame.bind('base64encode', defineFunction(fn.base64encode, '<s-:s>'));\n staticFrame.bind('base64decode', defineFunction(fn.base64decode, '<s-:s>'));\n staticFrame.bind('encodeUrlComponent', defineFunction(fn.encodeUrlComponent, '<s-:s>'));\n staticFrame.bind('encodeUrl', defineFunction(fn.encodeUrl, '<s-:s>'));\n staticFrame.bind('decodeUrlComponent', defineFunction(fn.decodeUrlComponent, '<s-:s>'));\n staticFrame.bind('decodeUrl', defineFunction(fn.decodeUrl, '<s-:s>'));\n staticFrame.bind('eval', defineFunction(functionEval, '<sx?:x>'));\n staticFrame.bind('toMillis', defineFunction(datetime.toMillis, '<s-s?:n>'));\n staticFrame.bind('fromMillis', defineFunction(datetime.fromMillis, '<n-s?s?:s>'));\n staticFrame.bind('clone', defineFunction(functionClone, '<(oa)-:o>'));\n\n /**\n * Error codes\n *\n * Sxxxx - Static errors (compile time)\n * Txxxx - Type errors\n * Dxxxx - Dynamic errors (evaluate time)\n * 01xx - tokenizer\n * 02xx - parser\n * 03xx - regex parser\n * 04xx - function signature parser/evaluator\n * 10xx - evaluator\n * 20xx - operators\n * 3xxx - functions (blocks of 10 for each function)\n */\n var errorCodes = {\n \"S0101\": \"String literal must be terminated by a matching quote\",\n \"S0102\": \"Number out of range: {{token}}\",\n \"S0103\": \"Unsupported escape sequence: \\\\{{token}}\",\n \"S0104\": \"The escape sequence \\\\u must be followed by 4 hex digits\",\n \"S0105\": \"Quoted property name must be terminated with a backquote (`)\",\n \"S0106\": \"Comment has no closing tag\",\n \"S0201\": \"Syntax error: {{token}}\",\n \"S0202\": \"Expected {{value}}, got {{token}}\",\n \"S0203\": \"Expected {{value}} before end of expression\",\n \"S0204\": \"Unknown operator: {{token}}\",\n \"S0205\": \"Unexpected token: {{token}}\",\n \"S0206\": \"Unknown expression type: {{token}}\",\n \"S0207\": \"Unexpected end of expression\",\n \"S0208\": \"Parameter {{value}} of function definition must be a variable name (start with $)\",\n \"S0209\": \"A predicate cannot follow a grouping expression in a step\",\n \"S0210\": \"Each step can only have one grouping expression\",\n \"S0211\": \"The symbol {{token}} cannot be used as a unary operator\",\n \"S0212\": \"The left side of := must be a variable name (start with $)\",\n \"S0213\": \"The literal value {{value}} cannot be used as a step within a path expression\",\n \"S0214\": \"The right side of {{token}} must be a variable name (start with $)\",\n \"S0215\": \"A context variable binding must precede any predicates on a step\",\n \"S0216\": \"A context variable binding must precede the 'order-by' clause on a step\",\n \"S0217\": \"The object representing the 'parent' cannot be derived from this expression\",\n \"S0301\": \"Empty regular expressions are not allowed\",\n \"S0302\": \"No terminating / in regular expression\",\n \"S0402\": \"Choice groups containing parameterized types are not supported\",\n \"S0401\": \"Type parameters can only be applied to functions and arrays\",\n \"S0500\": \"Attempted to evaluate an expression containing syntax error(s)\",\n \"T0410\": \"Argument {{index}} of function {{token}} does not match function signature\",\n \"T0411\": \"Context value is not a compatible type with argument {{index}} of function {{token}}\",\n \"T0412\": \"Argument {{index}} of function {{token}} must be an array of {{type}}\",\n \"D1001\": \"Number out of range: {{value}}\",\n \"D1002\": \"Cannot negate a non-numeric value: {{value}}\",\n \"T1003\": \"Key in object structure must evaluate to a string; got: {{value}}\",\n \"D1004\": \"Regular expression matches zero length string\",\n \"T1005\": \"Attempted to invoke a non-function. Did you mean ${{{token}}}?\",\n \"T1006\": \"Attempted to invoke a non-function\",\n \"T1007\": \"Attempted to partially apply a non-function. Did you mean ${{{token}}}?\",\n \"T1008\": \"Attempted to partially apply a non-function\",\n \"D1009\": \"Multiple key definitions evaluate to same key: {{value}}\",\n \"D1010\": \"Attempted to access the Javascript object prototype\", // Javascript specific \n \"T1010\": \"The matcher function argument passed to function {{token}} does not return the correct object structure\",\n \"T2001\": \"The left side of the {{token}} operator must evaluate to a number\",\n \"T2002\": \"The right side of the {{token}} operator must evaluate to a number\",\n \"T2003\": \"The left side of the range operator (..) must evaluate to an integer\",\n \"T2004\": \"The right side of the range operator (..) must evaluate to an integer\",\n \"D2005\": \"The left side of := must be a variable name (start with $)\", // defunct - replaced by S0212 parser error\n \"T2006\": \"The right side of the function application operator ~> must be a function\",\n \"T2007\": \"Type mismatch when comparing values {{value}} and {{value2}} in order-by clause\",\n \"T2008\": \"The expressions within an order-by clause must evaluate to numeric or string values\",\n \"T2009\": \"The values {{value}} and {{value2}} either side of operator {{token}} must be of the same data type\",\n \"T2010\": \"The expressions either side of operator {{token}} must evaluate to numeric or string values\",\n \"T2011\": \"The insert/update clause of the transform expression must evaluate to an object: {{value}}\",\n \"T2012\": \"The delete clause of the transform expression must evaluate to a string or array of strings: {{value}}\",\n \"T2013\": \"The transform expression clones the input object using the $clone() function. This has been overridden in the current scope by a non-function.\",\n \"D2014\": \"The size of the sequence allocated by the range operator (..) must not exceed 1e6. Attempted to allocate {{value}}.\",\n \"D3001\": \"Attempting to invoke string function on Infinity or NaN\",\n \"D3010\": \"Second argument of replace function cannot be an empty string\",\n \"D3011\": \"Fourth argument of replace function must evaluate to a positive number\",\n \"D3012\": \"Attempted to replace a matched string with a non-string value\",\n \"D3020\": \"Third argument of split function must evaluate to a positive number\",\n \"D3030\": \"Unable to cast value to a number: {{value}}\",\n \"D3040\": \"Third argument of match function must evaluate to a positive number\",\n \"D3050\": \"The second argument of reduce function must be a function with at least two arguments\",\n \"D3060\": \"The sqrt function cannot be applied to a negative number: {{value}}\",\n \"D3061\": \"The power function has resulted in a value that cannot be represented as a JSON number: base={{value}}, exponent={{exp}}\",\n \"D3070\": \"The single argument form of the sort function can only be applied to an array of strings or an array of numbers. Use the second argument to specify a comparison function\",\n \"D3080\": \"The picture string must only contain a maximum of two sub-pictures\",\n \"D3081\": \"The sub-picture must not contain more than one instance of the 'decimal-separator' character\",\n \"D3082\": \"The sub-picture must not contain more than one instance of the 'percent' character\",\n \"D3083\": \"The sub-picture must not contain more than one instance of the 'per-mille' character\",\n \"D3084\": \"The sub-picture must not contain both a 'percent' and a 'per-mille' character\",\n \"D3085\": \"The mantissa part of a sub-picture must contain at least one character that is either an 'optional digit character' or a member of the 'decimal digit family'\",\n \"D3086\": \"The sub-picture must not contain a passive character that is preceded by an active character and that is followed by another active character\",\n \"D3087\": \"The sub-picture must not contain a 'grouping-separator' character that appears adjacent to a 'decimal-separator' character\",\n \"D3088\": \"The sub-picture must not contain a 'grouping-separator' at the end of the integer part\",\n \"D3089\": \"The sub-picture must not contain two adjacent instances of the 'grouping-separator' character\",\n \"D3090\": \"The integer part of the sub-picture must not contain a member of the 'decimal digit family' that is followed by an instance of the 'optional digit character'\",\n \"D3091\": \"The fractional part of the sub-picture must not contain an instance of the 'optional digit character' that is followed by a member of the 'decimal digit family'\",\n \"D3092\": \"A sub-picture that contains a 'percent' or 'per-mille' character must not contain a character treated as an 'exponent-separator'\",\n \"D3093\": \"The exponent part of the sub-picture must comprise only of one or more characters that are members of the 'decimal digit family'\",\n \"D3100\": \"The radix of the formatBase function must be between 2 and 36. It was given {{value}}\",\n \"D3110\": \"The argument of the toMillis function must be an ISO 8601 formatted timestamp. Given {{value}}\",\n \"D3120\": \"Syntax error in expression passed to function eval: {{value}}\",\n \"D3121\": \"Dynamic error evaluating the expression passed to function eval: {{value}}\",\n \"D3130\": \"Formatting or parsing an integer as a sequence starting with {{value}} is not supported by this implementation\",\n \"D3131\": \"In a decimal digit pattern, all digits must be from the same decimal group\",\n \"D3132\": \"Unknown component specifier {{value}} in date/time picture string\",\n \"D3133\": \"The 'name' modifier can only be applied to months and days in the date/time picture string, not {{value}}\",\n \"D3134\": \"The timezone integer format specifier cannot have more than four digits\",\n \"D3135\": \"No matching closing bracket ']' in date/time picture string\",\n \"D3136\": \"The date/time picture string is missing specifiers required to parse the timestamp\",\n \"D3137\": \"{{{message}}}\",\n \"D3138\": \"The $single() function expected exactly 1 matching result. Instead it matched more.\",\n \"D3139\": \"The $single() function expected exactly 1 matching result. Instead it matched 0.\",\n \"D3140\": \"Malformed URL passed to ${{{functionName}}}(): {{value}}\",\n \"D3141\": \"{{{message}}}\"\n };\n\n /**\n * lookup a message template from the catalog and substitute the inserts.\n * Populates `err.message` with the substituted message. Leaves `err.message`\n * untouched if code lookup fails.\n * @param {string} err - error code to lookup\n * @returns {undefined} - `err` is modified in place\n */\n function populateMessage(err) {\n var template = errorCodes[err.code];\n if(typeof template !== 'undefined') {\n // if there are any handlebars, replace them with the field references\n // triple braces - replace with value\n // double braces - replace with json stringified value\n var message = template.replace(/\\{\\{\\{([^}]+)}}}/g, function() {\n return err[arguments[1]];\n });\n message = message.replace(/\\{\\{([^}]+)}}/g, function() {\n return JSON.stringify(err[arguments[1]]);\n });\n err.message = message;\n }\n // Otherwise retain the original `err.message`\n }\n\n /**\n * JSONata\n * @param {Object} expr - JSONata expression\n * @param {Object} options\n * @param {boolean} options.recover: attempt to recover on parse error\n * @param {Function} options.RegexEngine: RegEx class constructor to use\n * @returns {{evaluate: evaluate, assign: assign}} Evaluated expression\n */\n function jsonata(expr, options) {\n var ast;\n var errors;\n try {\n ast = parser(expr, options && options.recover);\n errors = ast.errors;\n delete ast.errors;\n } catch(err) {\n // insert error message into structure\n populateMessage(err); // possible side-effects on `err`\n throw err;\n }\n var environment = createFrame(staticFrame);\n\n var timestamp = new Date(); // will be overridden on each call to evalute()\n environment.bind('now', defineFunction(function(picture, timezone) {\n return datetime.fromMillis(timestamp.getTime(), picture, timezone);\n }, '<s?s?:s>'));\n environment.bind('millis', defineFunction(function() {\n return timestamp.getTime();\n }, '<:n>'));\n\n if(options && options.RegexEngine) {\n jsonata.RegexEngine = options.RegexEngine;\n } else {\n jsonata.RegexEngine = RegExp;\n }\n\n return {\n evaluate: function (input, bindings, callback) {\n // throw if the expression compiled with syntax errors\n if(typeof errors !== 'undefined') {\n var err = {\n code: 'S0500',\n position: 0\n };\n populateMessage(err); // possible side-effects on `err`\n throw err;\n }\n\n if (typeof bindings !== 'undefined') {\n var exec_env;\n // the variable bindings have been passed in - create a frame to hold these\n exec_env = createFrame(environment);\n for (var v in bindings) {\n exec_env.bind(v, bindings[v]);\n }\n } else {\n exec_env = environment;\n }\n // put the input document into the environment as the root object\n exec_env.bind('$', input);\n\n // capture the timestamp and put it in the execution environment\n // the $now() and $millis() functions will return this value - whenever it is called\n timestamp = new Date();\n exec_env.timestamp = timestamp;\n\n // if the input is a JSON array, then wrap it in a singleton sequence so it gets treated as a single input\n if(Array.isArray(input) && !isSequence(input)) {\n input = createSequence(input);\n input.outerWrapper = true;\n }\n\n var it;\n try {\n it = evaluate(ast, input, exec_env);\n if (typeof callback === \"function\") {\n callback(null, it);\n }\n return it;\n } catch (err) {\n // insert error message into structure\n populateMessage(err); // possible side-effects on `err`\n throw err;\n }\n },\n assign: function (name, value) {\n environment.bind(name, value);\n },\n registerFunction: function(name, implementation, signature) {\n var func = defineFunction(implementation, signature);\n environment.bind(name, func);\n },\n ast: function() {\n return ast;\n },\n errors: function() {\n return errors;\n }\n };\n }\n\n jsonata.parser = parser; // TODO remove this in a future release - use ast() instead\n\n return jsonata;\n\n})();\n\nmodule.exports = jsonata;\n\n},{\"./datetime\":1,\"./functions\":2,\"./parser\":4,\"./signature\":5,\"./utils\":6}],4:[function(require,module,exports){\n/**\n * © Copyright IBM Corp. 2016, 2018 All Rights Reserved\n * Project name: JSONata\n * This project is licensed under the MIT License, see LICENSE\n */\n\nvar parseSignature = require('./signature');\n\nconst parser = (() => {\n 'use strict';\n\n var operators = {\n '.': 75,\n '[': 80,\n ']': 0,\n '{': 70,\n '}': 0,\n '(': 80,\n ')': 0,\n ',': 0,\n '@': 80,\n '#': 80,\n ';': 80,\n ':': 80,\n '?': 20,\n '+': 50,\n '-': 50,\n '*': 60,\n '/': 60,\n '%': 60,\n '|': 20,\n '=': 40,\n '<': 40,\n '>': 40,\n '^': 40,\n '**': 60,\n '..': 20,\n ':=': 10,\n '!=': 40,\n '<=': 40,\n '>=': 40,\n '~>': 40,\n '?:': 40,\n '??': 40,\n 'and': 30,\n 'or': 25,\n 'in': 40,\n '&': 50,\n '!': 0, // not an operator, but needed as a stop character for name tokens\n '~': 0 // not an operator, but needed as a stop character for name tokens\n };\n\n var escapes = { // JSON string escape sequences - see json.org\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n 'b': '\\b',\n 'f': '\\f',\n 'n': '\\n',\n 'r': '\\r',\n 't': '\\t'\n };\n\n // Tokenizer (lexer) - invoked by the parser to return one token at a time\n var tokenizer = function (path) {\n var position = 0;\n var length = path.length;\n\n var create = function (type, value) {\n var obj = {type: type, value: value, position: position};\n return obj;\n };\n\n var scanRegex = function () {\n // the prefix '/' will have been previously scanned. Find the end of the regex.\n // search for closing '/' ignoring any that are escaped, or within brackets\n var start = position;\n var depth = 0;\n var pattern;\n var flags;\n\n var isClosingSlash = function (position) {\n if (path.charAt(position) === '/' && depth === 0) {\n var backslashCount = 0;\n while (path.charAt(position - (backslashCount + 1)) === '\\\\') {\n backslashCount++;\n }\n if (backslashCount % 2 === 0) {\n return true;\n }\n }\n return false;\n };\n\n while (position < length) {\n var currentChar = path.charAt(position);\n if (isClosingSlash(position)) {\n // end of regex found\n pattern = path.substring(start, position);\n if (pattern === '') {\n throw {\n code: \"S0301\",\n stack: (new Error()).stack,\n position: position\n };\n }\n position++;\n currentChar = path.charAt(position);\n // flags\n start = position;\n while (currentChar === 'i' || currentChar === 'm') {\n position++;\n currentChar = path.charAt(position);\n }\n flags = path.substring(start, position) + 'g';\n return new RegExp(pattern, flags);\n }\n if ((currentChar === '(' || currentChar === '[' || currentChar === '{') && path.charAt(position - 1) !== '\\\\') {\n depth++;\n }\n if ((currentChar === ')' || currentChar === ']' || currentChar === '}') && path.charAt(position - 1) !== '\\\\') {\n depth--;\n }\n\n position++;\n }\n throw {\n code: \"S0302\",\n stack: (new Error()).stack,\n position: position\n };\n };\n\n var next = function (prefix) {\n if (position >= length) return null;\n var currentChar = path.charAt(position);\n // skip whitespace\n while (position < length && ' \\t\\n\\r\\v'.indexOf(currentChar) > -1) {\n position++;\n currentChar = path.charAt(position);\n }\n // skip comments\n if (currentChar === '/' && path.charAt(position + 1) === '*') {\n var commentStart = position;\n position += 2;\n currentChar = path.charAt(position);\n while (!(currentChar === '*' && path.charAt(position + 1) === '/')) {\n currentChar = path.charAt(++position);\n if (position >= length) {\n // no closing tag\n throw {\n code: \"S0106\",\n stack: (new Error()).stack,\n position: commentStart\n };\n }\n }\n position += 2;\n currentChar = path.charAt(position);\n return next(prefix); // need this to swallow any following whitespace\n }\n // test for regex\n if (prefix !== true && currentChar === '/') {\n position++;\n return create('regex', scanRegex());\n }\n // handle double-char operators\n if (currentChar === '.' && path.charAt(position + 1) === '.') {\n // double-dot .. range operator\n position += 2;\n return create('operator', '..');\n }\n if (currentChar === ':' && path.charAt(position + 1) === '=') {\n // := assignment\n position += 2;\n return create('operator', ':=');\n }\n if (currentChar === '!' && path.charAt(position + 1) === '=') {\n // !=\n position += 2;\n return create('operator', '!=');\n }\n if (currentChar === '>' && path.charAt(position + 1) === '=') {\n // >=\n position += 2;\n return create('operator', '>=');\n }\n if (currentChar === '<' && path.charAt(position + 1) === '=') {\n // <=\n position += 2;\n return create('operator', '<=');\n }\n if (currentChar === '*' && path.charAt(position + 1) === '*') {\n // ** descendant wildcard\n position += 2;\n return create('operator', '**');\n }\n if (currentChar === '~' && path.charAt(position + 1) === '>') {\n // ~> chain function\n position += 2;\n return create('operator', '~>');\n }\n if (currentChar === '?' && path.charAt(position + 1) === ':') {\n // ?: default / elvis operator\n position += 2;\n return create('operator', '?:');\n }\n if (currentChar === '?' && path.charAt(position + 1) === '?') {\n // ?? coalescing operator\n position += 2;\n return create('operator', '??');\n }\n // test for single char operators\n if (Object.prototype.hasOwnProperty.call(operators, currentChar)) {\n position++;\n return create('operator', currentChar);\n }\n // test for string literals\n if (currentChar === '\"' || currentChar === \"'\") {\n var quoteType = currentChar;\n // double quoted string literal - find end of string\n position++;\n var qstr = \"\";\n while (position < length) {\n currentChar = path.charAt(position);\n if (currentChar === '\\\\') { // escape sequence\n position++;\n currentChar = path.charAt(position);\n if (Object.prototype.hasOwnProperty.call(escapes, currentChar)) {\n qstr += escapes[currentChar];\n } else if (currentChar === 'u') {\n // \\u should be followed by 4 hex digits\n var octets = path.substr(position + 1, 4);\n if (/^[0-9a-fA-F]+$/.test(octets)) {\n var codepoint = parseInt(octets, 16);\n qstr += String.fromCharCode(codepoint);\n position += 4;\n } else {\n throw {\n code: \"S0104\",\n stack: (new Error()).stack,\n position: position\n };\n }\n } else {\n // illegal escape sequence\n throw {\n code: \"S0103\",\n stack: (new Error()).stack,\n position: position,\n token: currentChar\n };\n\n }\n } else if (currentChar === quoteType) {\n position++;\n return create('string', qstr);\n } else {\n qstr += currentChar;\n }\n position++;\n }\n throw {\n code: \"S0101\",\n stack: (new Error()).stack,\n position: position\n };\n }\n // test for numbers\n var numregex = /^-?(0|([1-9][0-9]*))(\\.[0-9]+)?([Ee][-+]?[0-9]+)?/;\n var match = numregex.exec(path.substring(position));\n if (match !== null) {\n var num = parseFloat(match[0]);\n if (!isNaN(num) && isFinite(num)) {\n position += match[0].length;\n return create('number', num);\n } else {\n throw {\n code: \"S0102\",\n stack: (new Error()).stack,\n position: position,\n token: match[0]\n };\n }\n }\n // test for quoted names (backticks)\n var name;\n if (currentChar === '`') {\n // scan for closing quote\n position++;\n var end = path.indexOf('`', position);\n if (end !== -1) {\n name = path.substring(position, end);\n position = end + 1;\n return create('name', name);\n }\n position = length;\n throw {\n code: \"S0105\",\n stack: (new Error()).stack,\n position: position\n };\n }\n // test for names\n var i = position;\n var ch;\n for (; ;) {\n ch = path.charAt(i);\n if (i === length || ' \\t\\n\\r\\v'.indexOf(ch) > -1 || Object.prototype.hasOwnProperty.call(operators, ch)) {\n if (path.charAt(position) === '$') {\n // variable reference\n name = path.substring(position + 1, i);\n position = i;\n return create('variable', name);\n } else {\n name = path.substring(position, i);\n position = i;\n switch (name) {\n case 'or':\n case 'in':\n case 'and':\n return create('operator', name);\n case 'true':\n return create('value', true);\n case 'false':\n return create('value', false);\n case 'null':\n return create('value', null);\n default:\n if (position === length && name === '') {\n // whitespace at end of input\n return null;\n }\n return create('name', name);\n }\n }\n } else {\n i++;\n }\n }\n };\n\n return next;\n };\n\n // This parser implements the 'Top down operator precedence' algorithm developed by Vaughan R Pratt; http://dl.acm.org/citation.cfm?id=512931.\n // and builds on the Javascript framework described by Douglas Crockford at http://javascript.crockford.com/tdop/tdop.html\n // and in 'Beautiful Code', edited by Andy Oram and Greg Wilson, Copyright 2007 O'Reilly Media, Inc. 798-0-596-51004-6\n\n var parser = function (source, recover) {\n var node;\n var lexer;\n\n var symbol_table = {};\n var errors = [];\n\n var remainingTokens = function () {\n var remaining = [];\n if (node.id !== '(end)') {\n remaining.push({type: node.type, value: node.value, position: node.position});\n }\n var nxt = lexer();\n while (nxt !== null) {\n remaining.push(nxt);\n nxt = lexer();\n }\n return remaining;\n };\n\n var base_symbol = {\n nud: function () {\n // error - symbol has been invoked as a unary operator\n var err = {\n code: 'S0211',\n token: this.value,\n position: this.position\n };\n\n if (recover) {\n err.remaining = remainingTokens();\n err.type = 'error';\n errors.push(err);\n return err;\n } else {\n err.stack = (new Error()).stack;\n throw err;\n }\n }\n };\n\n var symbol = function (id, bp) {\n var s = symbol_table[id];\n bp = bp || 0;\n if (s) {\n if (bp >= s.lbp) {\n s.lbp = bp;\n }\n } else {\n s = Object.create(base_symbol);\n s.id = s.value = id;\n s.lbp = bp;\n symbol_table[id] = s;\n }\n return s;\n };\n\n var handleError = function (err) {\n if (recover) {\n // tokenize the rest of the buffer and add it to an error token\n err.remaining = remainingTokens();\n errors.push(err);\n var symbol = symbol_table[\"(error)\"];\n node = Object.create(symbol);\n node.error = err;\n node.type = \"(error)\";\n return node;\n } else {\n err.stack = (new Error()).stack;\n throw err;\n }\n };\n\n var advance = function (id, infix) {\n if (id && node.id !== id) {\n var code;\n if (node.id === '(end)') {\n // unexpected end of buffer\n code = \"S0203\";\n } else {\n code = \"S0202\";\n }\n var err = {\n code: code,\n position: node.position,\n token: node.value,\n value: id\n };\n return handleError(err);\n }\n var next_token = lexer(infix);\n if (next_token === null) {\n node = symbol_table[\"(end)\"];\n node.position = source.length;\n return node;\n }\n var value = next_token.value;\n var type = next_token.type;\n var symbol;\n switch (type) {\n case 'name':\n case 'variable':\n symbol = symbol_table[\"(name)\"];\n break;\n case 'operator':\n symbol = symbol_table[value];\n if (!symbol) {\n return handleError({\n code: \"S0204\",\n stack: (new Error()).stack,\n position: next_token.position,\n token: value\n });\n }\n break;\n case 'string':\n case 'number':\n case 'value':\n symbol = symbol_table[\"(literal)\"];\n break;\n case 'regex':\n type = \"regex\";\n symbol = symbol_table[\"(regex)\"];\n break;\n /* istanbul ignore next */\n default:\n return handleError({\n code: \"S0205\",\n stack: (new Error()).stack,\n position: next_token.position,\n token: value\n });\n }\n\n node = Object.create(symbol);\n node.value = value;\n node.type = type;\n node.position = next_token.position;\n return node;\n };\n\n // Pratt's algorithm\n var expression = function (rbp) {\n var left;\n var t = node;\n advance(null, true);\n left = t.nud();\n while (rbp < node.lbp) {\n t = node;\n advance();\n left = t.led(left);\n }\n return left;\n };\n\n var terminal = function (id) {\n var s = symbol(id, 0);\n s.nud = function () {\n return this;\n };\n };\n\n // match infix operators\n // <expression> <operator> <expression>\n // left associative\n var infix = function (id, bp, led) {\n var bindingPower = bp || operators[id];\n var s = symbol(id, bindingPower);\n s.led = led || function (left) {\n this.lhs = left;\n this.rhs = expression(bindingPower);\n this.type = \"binary\";\n return this;\n };\n return s;\n };\n\n // match infix operators\n // <expression> <operator> <expression>\n // right associative\n var infixr = function (id, bp, led) {\n var s = symbol(id, bp);\n s.led = led;\n return s;\n };\n\n // match prefix operators\n // <operator> <expression>\n var prefix = function (id, nud) {\n var s = symbol(id);\n s.nud = nud || function () {\n this.expression = expression(70);\n this.type = \"unary\";\n return this;\n };\n return s;\n };\n\n terminal(\"(end)\");\n terminal(\"(name)\");\n terminal(\"(literal)\");\n terminal(\"(regex)\");\n symbol(\":\");\n symbol(\";\");\n symbol(\",\");\n symbol(\")\");\n symbol(\"]\");\n symbol(\"}\");\n symbol(\"..\"); // range operator\n infix(\".\"); // map operator\n infix(\"+\"); // numeric addition\n infix(\"-\"); // numeric subtraction\n infix(\"*\"); // numeric multiplication\n infix(\"/\"); // numeric division\n infix(\"%\"); // numeric modulus\n infix(\"=\"); // equality\n infix(\"<\"); // less than\n infix(\">\"); // greater than\n infix(\"!=\"); // not equal to\n infix(\"<=\"); // less than or equal\n infix(\">=\"); // greater than or equal\n infix(\"&\"); // string concatenation\n infix(\"and\"); // Boolean AND\n infix(\"or\"); // Boolean OR\n infix(\"in\"); // is member of array\n terminal(\"and\"); // the 'keywords' can also be used as terminals (field names)\n terminal(\"or\"); //\n terminal(\"in\"); //\n prefix(\"-\"); // unary numeric negation\n infix(\"~>\"); // function application\n\n // coalescing operator\n infix(\"??\", operators['??'], function (left) {\n this.type = 'condition';\n this.condition = {\n type: 'function',\n value: '(',\n procedure: { type: 'variable', value: 'exists' },\n arguments: [left]\n };\n this.then = left;\n this.else = expression(0);\n return this;\n });\n\n infixr(\"(error)\", 10, function (left) {\n this.lhs = left;\n\n this.error = node.error;\n this.remaining = remainingTokens();\n this.type = 'error';\n return this;\n });\n\n // field wildcard (single level)\n prefix('*', function () {\n this.type = \"wildcard\";\n return this;\n });\n\n // descendant wildcard (multi-level)\n prefix('**', function () {\n this.type = \"descendant\";\n return this;\n });\n\n // parent operator\n prefix('%', function () {\n this.type = \"parent\";\n return this;\n });\n\n // function invocation\n infix(\"(\", operators['('], function (left) {\n // left is is what we are trying to invoke\n this.procedure = left;\n this.type = 'function';\n this.arguments = [];\n if (node.id !== ')') {\n for (; ;) {\n if (node.type === 'operator' && node.id === '?') {\n // partial function application\n this.type = 'partial';\n this.arguments.push(node);\n advance('?');\n } else {\n this.arguments.push(expression(0));\n }\n if (node.id !== ',') break;\n advance(',');\n }\n }\n advance(\")\", true);\n // if the name of the function is 'function' or λ, then this is function definition (lambda function)\n if (left.type === 'name' && (left.value === 'function' || left.value === '\\u03BB')) {\n // all of the args must be VARIABLE tokens\n this.arguments.forEach(function (arg, index) {\n if (arg.type !== 'variable') {\n return handleError({\n code: \"S0208\",\n stack: (new Error()).stack,\n position: arg.position,\n token: arg.value,\n value: index + 1\n });\n }\n });\n this.type = 'lambda';\n // is the next token a '<' - if so, parse the function signature\n if (node.id === '<') {\n var sigPos = node.position;\n var depth = 1;\n var sig = '<';\n while (depth > 0 && node.id !== '{' && node.id !== '(end)') {\n var tok = advance();\n if (tok.id === '>') {\n depth--;\n } else if (tok.id === '<') {\n depth++;\n }\n sig += tok.value;\n }\n advance('>');\n try {\n this.signature = parseSignature(sig);\n } catch (err) {\n // insert the position into this error\n err.position = sigPos + err.offset;\n return handleError(err);\n }\n }\n // parse the function body\n advance('{');\n this.body = expression(0);\n advance('}');\n }\n return this;\n });\n\n // parenthesis - block expression\n prefix(\"(\", function () {\n var expressions = [];\n while (node.id !== \")\") {\n expressions.push(expression(0));\n if (node.id !== \";\") {\n break;\n }\n advance(\";\");\n }\n advance(\")\", true);\n this.type = 'block';\n this.expressions = expressions;\n return this;\n });\n\n // array constructor\n prefix(\"[\", function () {\n var a = [];\n if (node.id !== \"]\") {\n for (; ;) {\n var item = expression(0);\n if (node.id === \"..\") {\n // range operator\n var range = {type: \"binary\", value: \"..\", position: node.position, lhs: item};\n advance(\"..\");\n range.rhs = expression(0);\n item = range;\n }\n a.push(item);\n if (node.id !== \",\") {\n break;\n }\n advance(\",\");\n }\n }\n advance(\"]\", true);\n this.expressions = a;\n this.type = \"unary\";\n return this;\n });\n\n // filter - predicate or array index\n infix(\"[\", operators['['], function (left) {\n if (node.id === \"]\") {\n // empty predicate means maintain singleton arrays in the output\n var step = left;\n while (step && step.type === 'binary' && step.value === '[') {\n step = step.lhs;\n }\n step.keepArray = true;\n advance(\"]\");\n return left;\n } else {\n this.lhs = left;\n this.rhs = expression(operators[']']);\n this.type = 'binary';\n advance(\"]\", true);\n return this;\n }\n });\n\n // order-by\n infix(\"^\", operators['^'], function (left) {\n advance(\"(\");\n var terms = [];\n for (; ;) {\n var term = {\n descending: false\n };\n if (node.id === \"<\") {\n // ascending sort\n advance(\"<\");\n } else if (node.id === \">\") {\n // descending sort\n term.descending = true;\n advance(\">\");\n } else {\n //unspecified - default to ascending\n }\n term.expression = expression(0);\n terms.push(term);\n if (node.id !== \",\") {\n break;\n }\n advance(\",\");\n }\n advance(\")\");\n this.lhs = left;\n this.rhs = terms;\n this.type = 'binary';\n return this;\n });\n\n var objectParser = function (left) {\n var a = [];\n if (node.id !== \"}\") {\n for (; ;) {\n var n = expression(0);\n advance(\":\");\n var v = expression(0);\n a.push([n, v]); // holds an array of name/value expression pairs\n if (node.id !== \",\") {\n break;\n }\n advance(\",\");\n }\n }\n advance(\"}\", true);\n if (typeof left === 'undefined') {\n // NUD - unary prefix form\n this.lhs = a;\n this.type = \"unary\";\n } else {\n // LED - binary infix form\n this.lhs = left;\n this.rhs = a;\n this.type = 'binary';\n }\n return this;\n };\n\n // object constructor\n prefix(\"{\", objectParser);\n\n // object grouping\n infix(\"{\", operators['{'], objectParser);\n\n // bind variable\n infixr(\":=\", operators[':='], function (left) {\n if (left.type !== 'variable') {\n return handleError({\n code: \"S0212\",\n stack: (new Error()).stack,\n position: left.position,\n token: left.value\n });\n }\n this.lhs = left;\n this.rhs = expression(operators[':='] - 1); // subtract 1 from bindingPower for right associative operators\n this.type = \"binary\";\n return this;\n });\n\n // focus variable bind\n infix(\"@\", operators['@'], function (left) {\n this.lhs = left;\n this.rhs = expression(operators['@']);\n if(this.rhs.type !== 'variable') {\n return handleError({\n code: \"S0214\",\n stack: (new Error()).stack,\n position: this.rhs.position,\n token: \"@\"\n });\n }\n this.type = \"binary\";\n return this;\n });\n\n // index (position) variable bind\n infix(\"#\", operators['#'], function (left) {\n this.lhs = left;\n this.rhs = expression(operators['#']);\n if(this.rhs.type !== 'variable') {\n return handleError({\n code: \"S0214\",\n stack: (new Error()).stack,\n position: this.rhs.position,\n token: \"#\"\n });\n }\n this.type = \"binary\";\n return this;\n });\n\n // if/then/else ternary operator ?:\n infix(\"?\", operators['?'], function (left) {\n this.type = 'condition';\n this.condition = left;\n this.then = expression(0);\n if (node.id === ':') {\n // else condition\n advance(\":\");\n this.else = expression(0);\n }\n return this;\n });\n\n // elvis/default operator\n infix(\"?:\", operators['?:'], function (left) {\n this.type = 'condition';\n this.condition = left;\n this.then = left;\n this.else = expression(0);\n return this;\n });\n\n // object transformer\n prefix(\"|\", function () {\n this.type = 'transform';\n this.pattern = expression(0);\n advance('|');\n this.update = expression(0);\n if (node.id === ',') {\n advance(',');\n this.delete = expression(0);\n }\n advance('|');\n return this;\n });\n\n // tail call optimization\n // this is invoked by the post parser to analyse lambda functions to see\n // if they make a tail call. If so, it is replaced by a thunk which will\n // be invoked by the trampoline loop during function application.\n // This enables tail-recursive functions to be written without growing the stack\n var tailCallOptimize = function (expr) {\n var result;\n if (expr.type === 'function' && !expr.predicate) {\n var thunk = {type: 'lambda', thunk: true, arguments: [], position: expr.position};\n thunk.body = expr;\n result = thunk;\n } else if (expr.type === 'condition') {\n // analyse both branches\n expr.then = tailCallOptimize(expr.then);\n if (typeof expr.else !== 'undefined') {\n expr.else = tailCallOptimize(expr.else);\n }\n result = expr;\n } else if (expr.type === 'block') {\n // only the last expression in the block\n var length = expr.expressions.length;\n if (length > 0) {\n expr.expressions[length - 1] = tailCallOptimize(expr.expressions[length - 1]);\n }\n result = expr;\n } else {\n result = expr;\n }\n return result;\n };\n\n var ancestorLabel = 0;\n var ancestorIndex = 0;\n var ancestry = [];\n\n var seekParent = function (node, slot) {\n switch (node.type) {\n case 'name':\n case 'wildcard':\n slot.level--;\n if(slot.level === 0) {\n if (typeof node.ancestor === 'undefined') {\n node.ancestor = slot;\n } else {\n // reuse the existing label\n ancestry[slot.index].slot.label = node.ancestor.label;\n node.ancestor = slot;\n }\n node.tuple = true;\n }\n break;\n case 'parent':\n slot.level++;\n break;\n case 'block':\n // look in last expression in the block\n if(node.expressions.length > 0) {\n node.tuple = true;\n slot = seekParent(node.expressions[node.expressions.length - 1], slot);\n }\n break;\n case 'path':\n // last step in path\n node.tuple = true;\n var index = node.steps.length - 1;\n slot = seekParent(node.steps[index--], slot);\n while (slot.level > 0 && index >= 0) {\n // check previous steps\n slot = seekParent(node.steps[index--], slot);\n }\n break;\n default:\n // error - can't derive ancestor\n throw {\n code: \"S0217\",\n token: node.type,\n position: node.position\n };\n }\n return slot;\n };\n\n var pushAncestry = function(result, value) {\n if(typeof value.seekingParent !== 'undefined' || value.type === 'parent') {\n var slots = (typeof value.seekingParent !== 'undefined') ? value.seekingParent : [];\n if (value.type === 'parent') {\n slots.push(value.slot);\n }\n if(typeof result.seekingParent === 'undefined') {\n result.seekingParent = slots;\n } else {\n Array.prototype.push.apply(result.seekingParent, slots);\n }\n }\n };\n\n var resolveAncestry = function(path) {\n var index = path.steps.length - 1;\n var laststep = path.steps[index];\n var slots = (typeof laststep.seekingParent !== 'undefined') ? laststep.seekingParent : [];\n if (laststep.type === 'parent') {\n slots.push(laststep.slot);\n }\n for(var is = 0; is < slots.length; is++) {\n var slot = slots[is];\n index = path.steps.length - 2;\n while (slot.level > 0) {\n if (index < 0) {\n if(typeof path.seekingParent === 'undefined') {\n path.seekingParent = [slot];\n } else {\n path.seekingParent.push(slot);\n }\n break;\n }\n // try previous step\n var step = path.steps[index--];\n // multiple contiguous steps that bind the focus should be skipped\n while(index >= 0 && step.focus && path.steps[index].focus) {\n step = path.steps[index--];\n }\n slot = seekParent(step, slot);\n }\n }\n };\n\n // post-parse stage\n // the purpose of this is to add as much semantic value to the parse tree as possible\n // in order to simplify the work of the evaluator.\n // This includes flattening the parts of the AST representing location paths,\n // converting them to arrays of steps which in turn may contain arrays of predicates.\n // following this, nodes containing '.' and '[' should be eliminated from the AST.\n var processAST = function (expr) {\n var result;\n switch (expr.type) {\n case 'binary':\n switch (expr.value) {\n case '.':\n var lstep = processAST(expr.lhs);\n\n if (lstep.type === 'path') {\n result = lstep;\n } else {\n result = {type: 'path', steps: [lstep]};\n }\n if(lstep.type === 'parent') {\n result.seekingParent = [lstep.slot];\n }\n var rest = processAST(expr.rhs);\n if (rest.type === 'function' &&\n rest.procedure.type === 'path' &&\n rest.procedure.steps.length === 1 &&\n rest.procedure.steps[0].type === 'name' &&\n result.steps[result.steps.length - 1].type === 'function') {\n // next function in chain of functions - will override a thenable\n result.steps[result.steps.length - 1].nextFunction = rest.procedure.steps[0].value;\n }\n if (rest.type === 'path') {\n Array.prototype.push.apply(result.steps, rest.steps);\n } else {\n if(typeof rest.predicate !== 'undefined') {\n rest.stages = rest.predicate;\n delete rest.predicate;\n }\n result.steps.push(rest);\n }\n // any steps within a path that are string literals, should be changed to 'name'\n result.steps.filter(function (step) {\n if (step.type === 'number' || step.type === 'value') {\n // don't allow steps to be numbers or the values true/false/null\n throw {\n code: \"S0213\",\n stack: (new Error()).stack,\n position: step.position,\n value: step.value\n };\n }\n return step.type === 'string';\n }).forEach(function (lit) {\n lit.type = 'name';\n });\n // any step that signals keeping a singleton array, should be flagged on the path\n if (result.steps.filter(function (step) {\n return step.keepArray === true;\n }).length > 0) {\n result.keepSingletonArray = true;\n }\n // if first step is a path constructor, flag it for special handling\n var firststep = result.steps[0];\n if (firststep.type === 'unary' && firststep.value === '[') {\n firststep.consarray = true;\n }\n // if the last step is an array constructor, flag it so it doesn't flatten\n var laststep = result.steps[result.steps.length - 1];\n if (laststep.type === 'unary' && laststep.value === '[') {\n laststep.consarray = true;\n }\n resolveAncestry(result);\n break;\n case '[':\n // predicated step\n // LHS is a step or a predicated step\n // RHS is the predicate expr\n result = processAST(expr.lhs);\n var step = result;\n var type = 'predicate';\n if (result.type === 'path') {\n step = result.steps[result.steps.length - 1];\n type = 'stages';\n }\n if (typeof step.group !== 'undefined') {\n throw {\n code: \"S0209\",\n stack: (new Error()).stack,\n position: expr.position\n };\n }\n if (typeof step[type] === 'undefined') {\n step[type] = [];\n }\n var predicate = processAST(expr.rhs);\n if(typeof predicate.seekingParent !== 'undefined') {\n predicate.seekingParent.forEach(slot => {\n if(slot.level === 1) {\n seekParent(step, slot);\n } else {\n slot.level--;\n }\n });\n pushAncestry(step, predicate);\n }\n step[type].push({type: 'filter', expr: predicate, position: expr.position});\n break;\n case '{':\n // group-by\n // LHS is a step or a predicated step\n // RHS is the object constructor expr\n result = processAST(expr.lhs);\n if (typeof result.group !== 'undefined') {\n throw {\n code: \"S0210\",\n stack: (new Error()).stack,\n position: expr.position\n };\n }\n // object constructor - process each pair\n result.group = {\n lhs: expr.rhs.map(function (pair) {\n return [processAST(pair[0]), processAST(pair[1])];\n }),\n position: expr.position\n };\n break;\n case '^':\n // order-by\n // LHS is the array to be ordered\n // RHS defines the terms\n result = processAST(expr.lhs);\n if (result.type !== 'path') {\n result = {type: 'path', steps: [result]};\n }\n var sortStep = {type: 'sort', position: expr.position};\n sortStep.terms = expr.rhs.map(function (terms) {\n var expression = processAST(terms.expression);\n pushAncestry(sortStep, expression);\n return {\n descending: terms.descending,\n expression: expression\n };\n });\n result.steps.push(sortStep);\n resolveAncestry(result);\n break;\n case ':=':\n result = {type: 'bind', value: expr.value, position: expr.position};\n result.lhs = processAST(expr.lhs);\n result.rhs = processAST(expr.rhs);\n pushAncestry(result, result.rhs);\n break;\n case '@':\n result = processAST(expr.lhs);\n step = result;\n if (result.type === 'path') {\n step = result.steps[result.steps.length - 1];\n }\n // throw error if there are any predicates defined at this point\n // at this point the only type of stages can be predicates\n if(typeof step.stages !== 'undefined' || typeof step.predicate !== 'undefined') {\n throw {\n code: \"S0215\",\n stack: (new Error()).stack,\n position: expr.position\n };\n }\n // also throw if this is applied after an 'order-by' clause\n if(step.type === 'sort') {\n throw {\n code: \"S0216\",\n stack: (new Error()).stack,\n position: expr.position\n };\n }\n if(expr.keepArray) {\n step.keepArray = true;\n }\n step.focus = expr.rhs.value;\n step.tuple = true;\n break;\n case '#':\n result = processAST(expr.lhs);\n step = result;\n if (result.type === 'path') {\n step = result.steps[result.steps.length - 1];\n } else {\n result = {type: 'path', steps: [result]};\n if (typeof step.predicate !== 'undefined') {\n step.stages = step.predicate;\n delete step.predicate;\n }\n }\n if (typeof step.stages === 'undefined') {\n step.index = expr.rhs.value;\n } else {\n step.stages.push({type: 'index', value: expr.rhs.value, position: expr.position});\n }\n step.tuple = true;\n break;\n case '~>':\n result = {type: 'apply', value: expr.value, position: expr.position};\n result.lhs = processAST(expr.lhs);\n result.rhs = processAST(expr.rhs);\n result.keepArray = result.lhs.keepArray || result.rhs.keepArray;\n break;\n default:\n result = {type: expr.type, value: expr.value, position: expr.position};\n result.lhs = processAST(expr.lhs);\n result.rhs = processAST(expr.rhs);\n pushAncestry(result, result.lhs);\n pushAncestry(result, result.rhs);\n }\n break;\n case 'unary':\n result = {type: expr.type, value: expr.value, position: expr.position};\n if (expr.value === '[') {\n // array constructor - process each item\n result.expressions = expr.expressions.map(function (item) {\n var value = processAST(item);\n pushAncestry(result, value);\n return value;\n });\n } else if (expr.value === '{') {\n // object constructor - process each pair\n result.lhs = expr.lhs.map(function (pair) {\n var key = processAST(pair[0]);\n pushAncestry(result, key);\n var value = processAST(pair[1]);\n pushAncestry(result, value);\n return [key, value];\n });\n } else {\n // all other unary expressions - just process the expression\n result.expression = processAST(expr.expression);\n // if unary minus on a number, then pre-process\n if (expr.value === '-' && result.expression.type === 'number') {\n result = result.expression;\n result.value = -result.value;\n } else {\n pushAncestry(result, result.expression);\n }\n }\n break;\n case 'function':\n case 'partial':\n result = {type: expr.type, name: expr.name, value: expr.value, position: expr.position};\n result.arguments = expr.arguments.map(function (arg) {\n var argAST = processAST(arg);\n pushAncestry(result, argAST);\n return argAST;\n });\n result.procedure = processAST(expr.procedure);\n break;\n case 'lambda':\n result = {\n type: expr.type,\n arguments: expr.arguments,\n signature: expr.signature,\n position: expr.position\n };\n var body = processAST(expr.body);\n result.body = tailCallOptimize(body);\n break;\n case 'condition':\n result = {type: expr.type, position: expr.position};\n result.condition = processAST(expr.condition);\n pushAncestry(result, result.condition);\n result.then = processAST(expr.then);\n pushAncestry(result, result.then);\n if (typeof expr.else !== 'undefined') {\n result.else = processAST(expr.else);\n pushAncestry(result, result.else);\n }\n break;\n case 'transform':\n result = {type: expr.type, position: expr.position};\n result.pattern = processAST(expr.pattern);\n result.update = processAST(expr.update);\n if (typeof expr.delete !== 'undefined') {\n result.delete = processAST(expr.delete);\n }\n break;\n case 'block':\n result = {type: expr.type, position: expr.position};\n // array of expressions - process each one\n result.expressions = expr.expressions.map(function (item) {\n var part = processAST(item);\n pushAncestry(result, part);\n if (part.consarray || (part.type === 'path' && part.steps[0].consarray)) {\n result.consarray = true;\n }\n return part;\n });\n // TODO scan the array of expressions to see if any of them assign variables\n // if so, need to mark the block as one that needs to create a new frame\n break;\n case 'name':\n result = {type: 'path', steps: [expr]};\n if (expr.keepArray) {\n result.keepSingletonArray = true;\n }\n break;\n case 'parent':\n result = {type: 'parent', slot: { label: '!' + ancestorLabel++, level: 1, index: ancestorIndex++ } };\n ancestry.push(result);\n break;\n case 'string':\n case 'number':\n case 'value':\n case 'wildcard':\n case 'descendant':\n case 'variable':\n case 'regex':\n result = expr;\n break;\n case 'operator':\n // the tokens 'and' and 'or' might have been used as a name rather than an operator\n if (expr.value === 'and' || expr.value === 'or' || expr.value === 'in') {\n expr.type = 'name';\n result = processAST(expr);\n } else /* istanbul ignore else */ if (expr.value === '?') {\n // partial application\n result = expr;\n } else {\n throw {\n code: \"S0201\",\n stack: (new Error()).stack,\n position: expr.position,\n token: expr.value\n };\n }\n break;\n case 'error':\n result = expr;\n if (expr.lhs) {\n result = processAST(expr.lhs);\n }\n break;\n default:\n var code = \"S0206\";\n /* istanbul ignore else */\n if (expr.id === '(end)') {\n code = \"S0207\";\n }\n var err = {\n code: code,\n position: expr.position,\n token: expr.value\n };\n if (recover) {\n errors.push(err);\n return {type: 'error', error: err};\n } else {\n err.stack = (new Error()).stack;\n throw err;\n }\n }\n if (expr.keepArray) {\n result.keepArray = true;\n }\n return result;\n };\n\n // now invoke the tokenizer and the parser and return the syntax tree\n lexer = tokenizer(source);\n advance();\n // parse the tokens\n var expr = expression(0);\n if (node.id !== '(end)') {\n var err = {\n code: \"S0201\",\n position: node.position,\n token: node.value\n };\n handleError(err);\n }\n expr = processAST(expr);\n\n if(expr.type === 'parent' || typeof expr.seekingParent !== 'undefined') {\n // error - trying to derive ancestor at top level\n throw {\n code: \"S0217\",\n token: expr.type,\n position: expr.position\n };\n }\n\n if (errors.length > 0) {\n expr.errors = errors;\n }\n\n return expr;\n };\n\n return parser;\n})();\n\nmodule.exports = parser;\n\n},{\"./signature\":5}],5:[function(require,module,exports){\n/**\n * © Copyright IBM Corp. 2016, 2018 All Rights Reserved\n * Project name: JSONata\n * This project is licensed under the MIT License, see LICENSE\n */\n\nvar utils = require('./utils');\n\nconst signature = (() => {\n 'use strict';\n\n // A mapping between the function signature symbols and the full plural of the type\n // Expected to be used in error messages\n var arraySignatureMapping = {\n \"a\": \"arrays\",\n \"b\": \"booleans\",\n \"f\": \"functions\",\n \"n\": \"numbers\",\n \"o\": \"objects\",\n \"s\": \"strings\"\n };\n\n /**\n * Parses a function signature definition and returns a validation function\n * @param {string} signature - the signature between the <angle brackets>\n * @returns {Function} validation function\n */\n function parseSignature(signature) {\n // create a Regex that represents this signature and return a function that when invoked,\n // returns the validated (possibly fixed-up) arguments, or throws a validation error\n // step through the signature, one symbol at a time\n var position = 1;\n var params = [];\n var param = {};\n var prevParam = param;\n while (position < signature.length) {\n var symbol = signature.charAt(position);\n if (symbol === ':') {\n // TODO figure out what to do with the return type\n // ignore it for now\n break;\n }\n\n var next = function () {\n params.push(param);\n prevParam = param;\n param = {};\n };\n\n var findClosingBracket = function (str, start, openSymbol, closeSymbol) {\n // returns the position of the closing symbol (e.g. bracket) in a string\n // that balances the opening symbol at position start\n var depth = 1;\n var position = start;\n while (position < str.length) {\n position++;\n symbol = str.charAt(position);\n if (symbol === closeSymbol) {\n depth--;\n if (depth === 0) {\n // we're done\n break; // out of while loop\n }\n } else if (symbol === openSymbol) {\n depth++;\n }\n }\n return position;\n };\n\n switch (symbol) {\n case 's': // string\n case 'n': // number\n case 'b': // boolean\n case 'l': // not so sure about expecting null?\n case 'o': // object\n param.regex = '[' + symbol + 'm]';\n param.type = symbol;\n next();\n break;\n case 'a': // array\n // normally treat any value as singleton array\n param.regex = '[asnblfom]';\n param.type = symbol;\n param.array = true;\n next();\n break;\n case 'f': // function\n param.regex = 'f';\n param.type = symbol;\n next();\n break;\n case 'j': // any JSON type\n param.regex = '[asnblom]';\n param.type = symbol;\n next();\n break;\n case 'x': // any type\n param.regex = '[asnblfom]';\n param.type = symbol;\n next();\n break;\n case '-': // use context if param not supplied\n prevParam.context = true;\n prevParam.contextRegex = new RegExp(prevParam.regex); // pre-compiled to test the context type at runtime\n prevParam.regex += '?';\n break;\n case '?': // optional param\n case '+': // one or more\n prevParam.regex += symbol;\n break;\n case '(': // choice of types\n // search forward for matching ')'\n var endParen = findClosingBracket(signature, position, '(', ')');\n var choice = signature.substring(position + 1, endParen);\n if (choice.indexOf('<') === -1) {\n // no parameterized types, simple regex\n param.regex = '[' + choice + 'm]';\n } else {\n // TODO harder\n throw {\n code: \"S0402\",\n stack: (new Error()).stack,\n value: choice,\n offset: position\n };\n }\n param.type = '(' + choice + ')';\n position = endParen;\n next();\n break;\n case '<': // type parameter - can only be applied to 'a' and 'f'\n if (prevParam.type === 'a' || prevParam.type === 'f') {\n // search forward for matching '>'\n var endPos = findClosingBracket(signature, position, '<', '>');\n prevParam.subtype = signature.substring(position + 1, endPos);\n position = endPos;\n } else {\n throw {\n code: \"S0401\",\n stack: (new Error()).stack,\n value: prevParam.type,\n offset: position\n };\n }\n break;\n }\n position++;\n }\n var regexStr = '^' +\n params.map(function (param) {\n return '(' + param.regex + ')';\n }).join('') +\n '$';\n var regex = new RegExp(regexStr);\n var getSymbol = function (value) {\n var symbol;\n if (utils.isFunction(value)) {\n symbol = 'f';\n } else {\n var type = typeof value;\n switch (type) {\n case 'string':\n symbol = 's';\n break;\n case 'number':\n symbol = 'n';\n break;\n case 'boolean':\n symbol = 'b';\n break;\n case 'object':\n if (value === null) {\n symbol = 'l';\n } else if (Array.isArray(value)) {\n symbol = 'a';\n } else {\n symbol = 'o';\n }\n break;\n case 'undefined':\n default:\n // any value can be undefined, but should be allowed to match\n symbol = 'm'; // m for missing\n }\n }\n return symbol;\n };\n\n var throwValidationError = function (badArgs, badSig) {\n // to figure out where this went wrong we need apply each component of the\n // regex to each argument until we get to the one that fails to match\n var partialPattern = '^';\n var goodTo = 0;\n for (var index = 0; index < params.length; index++) {\n partialPattern += params[index].regex;\n var match = badSig.match(partialPattern);\n if (match === null) {\n // failed here\n throw {\n code: \"T0410\",\n stack: (new Error()).stack,\n value: badArgs[goodTo],\n index: goodTo + 1\n };\n }\n goodTo = match[0].length;\n }\n // if it got this far, it's probably because of extraneous arguments (we\n // haven't added the trailing '$' in the regex yet.\n throw {\n code: \"T0410\",\n stack: (new Error()).stack,\n value: badArgs[goodTo],\n index: goodTo + 1\n };\n };\n\n return {\n definition: signature,\n validate: function (args, context) {\n var suppliedSig = '';\n args.forEach(function (arg) {\n suppliedSig += getSymbol(arg);\n });\n var isValid = regex.exec(suppliedSig);\n if (isValid) {\n var validatedArgs = [];\n var argIndex = 0;\n params.forEach(function (param, index) {\n var arg = args[argIndex];\n var match = isValid[index + 1];\n if (match === '') {\n if (param.context && param.contextRegex) {\n // substitute context value for missing arg\n // first check that the context value is the right type\n var contextType = getSymbol(context);\n // test contextType against the regex for this arg (without the trailing ?)\n if (param.contextRegex.test(contextType)) {\n validatedArgs.push(context);\n } else {\n // context value not compatible with this argument\n throw {\n code: \"T0411\",\n stack: (new Error()).stack,\n value: context,\n index: argIndex + 1\n };\n }\n } else {\n validatedArgs.push(arg);\n argIndex++;\n }\n } else {\n // may have matched multiple args (if the regex ends with a '+'\n // split into single tokens\n match.split('').forEach(function (single) {\n if (param.type === 'a') {\n if (single === 'm') {\n // missing (undefined)\n arg = undefined;\n } else {\n arg = args[argIndex];\n var arrayOK = true;\n // is there type information on the contents of the array?\n if (typeof param.subtype !== 'undefined') {\n if (single !== 'a' && match !== param.subtype) {\n arrayOK = false;\n } else if (single === 'a') {\n if (arg.length > 0) {\n var itemType = getSymbol(arg[0]);\n if (itemType !== param.subtype.charAt(0)) { // TODO recurse further\n arrayOK = false;\n } else {\n // make sure every item in the array is this type\n var differentItems = arg.filter(function (val) {\n return (getSymbol(val) !== itemType);\n });\n arrayOK = (differentItems.length === 0);\n }\n }\n }\n }\n if (!arrayOK) {\n throw {\n code: \"T0412\",\n stack: (new Error()).stack,\n value: arg,\n index: argIndex + 1,\n type: arraySignatureMapping[param.subtype]\n };\n }\n // the function expects an array. If it's not one, make it so\n if (single !== 'a') {\n arg = [arg];\n }\n }\n validatedArgs.push(arg);\n argIndex++;\n } else {\n validatedArgs.push(arg);\n argIndex++;\n }\n });\n }\n });\n return validatedArgs;\n }\n throwValidationError(args, suppliedSig);\n }\n };\n }\n\n return parseSignature;\n})();\n\nmodule.exports = signature;\n\n},{\"./utils\":6}],6:[function(require,module,exports){\n/**\n * © Copyright IBM Corp. 2016, 2018 All Rights Reserved\n * Project name: JSONata\n * This project is licensed under the MIT License, see LICENSE\n */\n\nconst utils = (() => {\n 'use strict';\n\n /**\n * Check if value is a finite number\n * @param {float} n - number to evaluate\n * @returns {boolean} True if n is a finite number\n */\n function isNumeric(n) {\n var isNum = false;\n if(typeof n === 'number') {\n isNum = !isNaN(n);\n if (isNum && !isFinite(n)) {\n throw {\n code: \"D1001\",\n value: n,\n stack: (new Error()).stack\n };\n }\n }\n return isNum;\n }\n\n /**\n * Returns true if the arg is an array of strings\n * @param {*} arg - the item to test\n * @returns {boolean} True if arg is an array of strings\n */\n function isArrayOfStrings(arg) {\n var result = false;\n /* istanbul ignore else */\n if(Array.isArray(arg)) {\n result = (arg.filter(function(item){return typeof item !== 'string';}).length === 0);\n }\n return result;\n }\n\n /**\n * Returns true if the arg is an array of numbers\n * @param {*} arg - the item to test\n * @returns {boolean} True if arg is an array of numbers\n */\n function isArrayOfNumbers(arg) {\n var result = false;\n if(Array.isArray(arg)) {\n result = (arg.filter(function(item){return !isNumeric(item);}).length === 0);\n }\n return result;\n }\n\n /**\n * Create an empty sequence to contain query results\n * @returns {Array} - empty sequence\n */\n function createSequence() {\n var sequence = [];\n sequence.sequence = true;\n if (arguments.length === 1) {\n sequence.push(arguments[0]);\n }\n return sequence;\n }\n\n /**\n * Tests if a value is a sequence\n * @param {*} value the value to test\n * @returns {boolean} true if it's a sequence\n */\n function isSequence(value) {\n return value.sequence === true && Array.isArray(value);\n }\n\n /**\n *\n * @param {Object} arg - expression to test\n * @returns {boolean} - true if it is a function (lambda or built-in)\n */\n function isFunction(arg) {\n return ((arg && (arg._jsonata_function === true || arg._jsonata_lambda === true)) || typeof arg === 'function');\n }\n\n /**\n * Returns the arity (number of arguments) of the function\n * @param {*} func - the function\n * @returns {*} - the arity\n */\n function getFunctionArity(func) {\n var arity = typeof func.arity === 'number' ? func.arity :\n typeof func.implementation === 'function' ? func.implementation.length :\n typeof func.length === 'number' ? func.length : func.arguments.length;\n return arity;\n }\n\n /**\n * Tests whether arg is a lambda function\n * @param {*} arg - the value to test\n * @returns {boolean} - true if it is a lambda function\n */\n function isLambda(arg) {\n return arg && arg._jsonata_lambda === true;\n }\n\n // istanbul ignore next\n var iteratorSymbol = (typeof Symbol === \"function\" ? Symbol : {}).iterator || \"@@iterator\";\n\n /**\n * @param {Object} arg - expression to test\n * @returns {boolean} - true if it is iterable\n */\n function isIterable(arg) {\n return (\n typeof arg === 'object' &&\n arg !== null &&\n iteratorSymbol in arg &&\n 'next' in arg &&\n typeof arg.next === 'function'\n );\n }\n\n /**\n * Compares two values for equality\n * @param {*} lhs first value\n * @param {*} rhs second value\n * @returns {boolean} true if they are deep equal\n */\n function isDeepEqual(lhs, rhs) {\n if (lhs === rhs) {\n return true;\n }\n if(typeof lhs === 'object' && typeof rhs === 'object' && lhs !== null && rhs !== null) {\n if(Array.isArray(lhs) && Array.isArray(rhs)) {\n // both arrays (or sequences)\n // must be the same length\n if(lhs.length !== rhs.length) {\n return false;\n }\n // must contain same values in same order\n for(var ii = 0; ii < lhs.length; ii++) {\n if(!isDeepEqual(lhs[ii], rhs[ii])) {\n return false;\n }\n }\n return true;\n }\n // both objects\n // must have the same set of keys (in any order)\n var lkeys = Object.getOwnPropertyNames(lhs);\n var rkeys = Object.getOwnPropertyNames(rhs);\n if(lkeys.length !== rkeys.length) {\n return false;\n }\n lkeys = lkeys.sort();\n rkeys = rkeys.sort();\n for(ii=0; ii < lkeys.length; ii++) {\n if(lkeys[ii] !== rkeys[ii]) {\n return false;\n }\n }\n // must have the same values\n for(ii=0; ii < lkeys.length; ii++) {\n var key = lkeys[ii];\n if(!isDeepEqual(lhs[key], rhs[key])) {\n return false;\n }\n }\n return true;\n }\n return false;\n }\n\n /**\n * @param {Object} arg - expression to test\n * @returns {boolean} - true if it is a promise\n */\n function isPromise(arg) {\n return (\n typeof arg === 'object' &&\n arg !== null &&\n 'then' in arg &&\n typeof arg.then === 'function'\n );\n }\n\n /**\n * converts a string to an array of characters\n * @param {string} str - the input string\n * @returns {Array} - the array of characters\n */\n function stringToArray(str) {\n var arr = [];\n for (let char of str) {\n arr.push(char);\n }\n return arr;\n }\n\n return {\n isNumeric,\n isArrayOfStrings,\n isArrayOfNumbers,\n createSequence,\n isSequence,\n isFunction,\n isLambda,\n isIterable,\n getFunctionArity,\n isDeepEqual,\n stringToArray,\n isPromise\n };\n})();\n\nmodule.exports = utils;\n\n},{}]},{},[3])(3)\n});\n","/**\n * storage-interface.ts\n *\n * Three minimal storage primitives that together cover all persistence needs\n * of the board-live-cards system. Any backend (Node fs, CosmosDB, Azure Blob,\n * browser localStorage, in-memory test double) implements these three interfaces.\n *\n * The pure-logic stores in board-live-cards-all-stores.ts depend only on these\n * interfaces — never on Node built-ins.\n *\n * Blob — raw string content at a logical, backend-neutral key\n * Journal — append-only log with cursor-based reads\n * KV — key-value store with list/delete\n *\n * Mapping to existing storage adapters:\n *\n * CardStorageAdapter\n * inventory (cardId → { blobRef, checksum, fileMetadata? }) → KV\n * card JSON files → Blob\n * source output files → Blob\n *\n * JournalStorageAdapter → Journal (board-journal.jsonl)\n *\n * ExecutionRequestStore → KV (keyed by journalId, via createFsKvStorage)\n *\n * StateSnapshotStorageAdapter\n * board-graph.json (packed single JSON, written atomically) → Blob\n * per-card sidecars (cards/<id>/runtime, fetched-sources-manifest) → KV\n */\n\n// ============================================================================\n// Blob — raw content at an opaque key\n//\n// The key is backend-specific (file path, blob name, storage key).\n// Text helpers are always available. Binary helpers are optional so existing\n// backends can adopt incrementally.\n// ============================================================================\n\nexport interface BlobStat {\n key: string;\n size: number;\n updatedAt?: string;\n contentType?: string;\n}\n\nexport interface BlobStorage {\n /** Returns raw content string, or null if the blob does not exist. */\n read(key: string): string | null;\n\n /** Write content at key. Implementations should be atomic (write-rename). */\n write(key: string, content: string): void;\n\n /** Returns true if a blob exists at key. */\n exists(key: string): boolean;\n\n /** Delete the blob at key. No-op if it does not exist. */\n remove(key: string): void;\n\n /** Optional binary read for file-like artifacts. */\n readBytes?(key: string): Uint8Array | null;\n\n /** Optional binary write for file-like artifacts. */\n writeBytes?(key: string, content: Uint8Array): void;\n\n /** Optional key listing by prefix. */\n listKeys?(prefix?: string): string[];\n\n /** Optional metadata lookup. */\n stat?(key: string): BlobStat | null;\n}\n\n// ============================================================================\n// KindValueRef — backend-neutral typed reference\n//\n// A ref describes WHERE content lives without carrying the bytes.\n// Serialized on the CLI wire as: ::kind::value\n// kind = 'fs-path': value is an absolute file path\n// Additional kinds (e.g. 'cosmos') are added in public-storage-adapter.ts as new backends are supported.\n// ============================================================================\n\nexport interface KindValueRef {\n readonly kind: string;\n readonly value: string;\n}\n\n/** Serialize a KindValueRef to the wire format: ::kind::value */\nexport function serializeRef(ref: KindValueRef): string {\n return `::${ref.kind}::${ref.value}`;\n}\n\n/** Parse a wire-format ref string (::kind::value) into a KindValueRef. */\nexport function parseRef(s: string): KindValueRef {\n if (!s.startsWith('::')) throw new Error(`Invalid ref format (expected ::kind::value): ${s}`);\n const inner = s.slice(2);\n const idx = inner.indexOf('::');\n if (idx === -1) throw new Error(`Invalid ref format (expected ::kind::value): ${s}`);\n return { kind: inner.slice(0, idx), value: inner.slice(idx + 2) };\n}\n\n// ============================================================================\n// Journal — append-only log, cursor-based reads\n//\n// Each entry has a string id (UUID or monotonic token) and an opaque payload.\n// Cursors are entry ids — readAfter returns entries strictly after that id.\n// A null/empty cursor means \"read from the beginning\".\n// ============================================================================\n\nexport interface JournalEntry {\n id: string;\n payload: unknown;\n}\n\nexport interface JournalReadResult {\n entries: JournalEntry[];\n /** The id of the last entry returned, suitable for use as the next cursor. */\n newCursor: string | null;\n}\n\nexport interface JournalStorage {\n /** Append an entry. The storage layer assigns the id. */\n append(payload: unknown): JournalEntry;\n\n /** Read ALL entries (for index rebuilds, full replay). */\n readAll(): JournalEntry[];\n\n /**\n * Read entries appended after the given cursor id.\n * If cursor is null/empty, returns all entries from the beginning.\n */\n readAfter(cursor: string | null): JournalReadResult;\n}\n\n// ============================================================================\n// KV — key-value store with list and delete\n//\n// Values are opaque unknown — callers own serialisation.\n// Keys are scoped by the adapter factory (e.g. a boardDir prefix is closed\n// over in the adapter, not passed per-call).\n// ============================================================================\n\nexport interface KVStorage {\n /** Returns the stored value, or null if the key does not exist. */\n read(key: string): unknown | null;\n\n /** Write value at key. Overwrites any existing value. */\n write(key: string, value: unknown): void;\n\n /** Delete the key. No-op if it does not exist. */\n delete(key: string): void;\n\n /**\n * List all keys, optionally filtered to those starting with prefix.\n * Order is implementation-defined.\n */\n listKeys(prefix?: string): string[];\n}\n\n// ============================================================================\n// JSONStorage — KV store with JSON-aware merge operations\n//\n// Backed by KVStorage under the hood. Adds deepMerge and shallowMerge so\n// callers never need to read-modify-write manually for partial updates.\n// ============================================================================\n\nexport interface JSONStorage {\n /** Returns the stored JSON value, or null if the key does not exist. */\n read(key: string): unknown | null;\n\n /**\n * Read a nested value inside the stored object using a dot-notation path.\n * e.g. get('myKey', 'a.b.c') returns the value at { a: { b: { c: ... } } }.\n * Returns null if the key does not exist or the path cannot be traversed.\n */\n get(key: string, jsonPath: string): unknown | null;\n\n /** Write value at key. Overwrites any existing value. */\n write(key: string, value: unknown): void;\n\n /** Delete the key. No-op if it does not exist. */\n delete(key: string): void;\n\n /** List all keys, optionally filtered by prefix. */\n listKeys(prefix?: string): string[];\n\n /**\n * Shallow-merge patch into the existing object at key.\n * Equivalent to: write(key, { ...read(key), ...patch })\n * Creates the key if it does not exist.\n */\n shallowMerge(key: string, patch: Record<string, unknown>): void;\n\n /**\n * Deep-merge patch into the existing object at key.\n * Recursively merges nested plain objects; arrays and primitives are replaced.\n * Creates the key if it does not exist.\n */\n deepMerge(key: string, patch: Record<string, unknown>): void;\n\n /**\n * Set a nested value inside the stored object using a dot-notation path.\n * e.g. patch('myKey', 'a.b.c', 42) sets { a: { b: { c: 42 } } } into the stored object.\n * Intermediate objects are created if absent. Arrays are not traversed — use integer\n * segments to index into them (e.g. 'items.0.name').\n * Creates the top-level key if it does not exist.\n */\n patch(key: string, jsonPath: string, value: unknown): void;\n}\n\n// ============================================================================\n// StorageProvider — aggregate of all three primitives\n//\n// Adapter factories receive a StorageProvider and close over any scope (e.g.\n// boardDir) themselves. This is the single injection point for swapping\n// backends (Node fs → CosmosDB, browser localStorage, test doubles, etc.).\n// ============================================================================\n\nexport interface StorageProvider {\n blob: BlobStorage;\n journal: JournalStorage;\n kv: KVStorage;\n}\n\n// ============================================================================\n// AtomicRelayLock — non-blocking try-acquire lock with relay-on-busy semantics\n//\n// This interface serves TWO tightly coupled purposes which are intentionally\n// unified into a single primitive:\n//\n// 1. ATOMICITY — ensures that a read-mutate-save cycle is executed by at\n// most one actor at a time, preventing concurrent actors from racing on\n// stale state and writing conflicting snapshots.\n//\n// 2. RELAY SIGNAL — when tryAcquire() returns null, the caller knows the\n// cycle is already in progress. Because the holder always reads fresh\n// state upon entry, it will pick up every change appended by the skipping\n// caller before the lock was attempted. The caller can therefore safely\n// exit — its work will be completed by the holder. This is the\n// \"relay baton\" pattern: the lock being held IS the in-progress signal.\n//\n// These two purposes are not an accidental overload — they are the same\n// invariant expressed at different scopes. Any backend implementation\n// (FS lockfile, Cosmos document lease, Azure entity lock, in-memory flag)\n// that satisfies \"at most one holder at a time\" automatically satisfies both.\n//\n// Contract:\n// - tryAcquire() is non-blocking. It never waits.\n// - Returns a release function on success, or null if already held.\n// - The release function must be called exactly once (use try/finally).\n// - Behaviour after calling release() more than once is undefined.\n// ============================================================================\n\nexport interface AtomicRelayLock {\n /**\n * Attempt to acquire the lock without blocking.\n * Returns a `release` function if successful, or `null` if the lock is\n * already held by another actor (relay: that actor will complete the work).\n */\n tryAcquire(): (() => void) | null;\n}\n\n/**\n * Execute `work` under an `AtomicRelayLock`.\n *\n * - If the lock is busy, returns false immediately (relay: the holder will\n * complete the work on behalf of this caller).\n * - If acquired, runs `work` exclusively, releases the lock, then calls\n * `continuation` if provided — allowing the caller to schedule the next\n * cycle (e.g. spawn a detached process) after the lock is free.\n * - Returns true if work ran.\n */\nexport async function withRelayLock(\n lock: AtomicRelayLock,\n work: () => Promise<void>,\n continuation?: () => void,\n): Promise<boolean> {\n const release = lock.tryAcquire();\n if (!release) return false; // relay: holder is already doing the work\n try {\n await work();\n } finally {\n release(); // release before continuation so it can immediately re-acquire\n }\n continuation?.();\n return true;\n}\n","/**\n * Event Graph — Constants\n */\n\nimport type { CompletionStrategy, ConflictStrategy, ExecutionMode, ExecutionStatus, TaskStatus } from './types.js';\n\nexport const TASK_STATUS: Record<string, TaskStatus> = {\n NOT_STARTED: 'not-started',\n RUNNING: 'running',\n COMPLETED: 'completed',\n FAILED: 'failed',\n INACTIVATED: 'inactivated',\n} as const;\n\nexport const EXECUTION_STATUS: Record<string, ExecutionStatus> = {\n CREATED: 'created',\n RUNNING: 'running',\n PAUSED: 'paused',\n STOPPED: 'stopped',\n COMPLETED: 'completed',\n FAILED: 'failed',\n} as const;\n\nexport const COMPLETION_STRATEGIES: Record<string, CompletionStrategy> = {\n ALL_TASKS_DONE: 'all-tasks-done',\n ALL_OUTPUTS_DONE: 'all-outputs-done',\n ONLY_RESOLVED: 'only-resolved',\n GOAL_REACHED: 'goal-reached',\n MANUAL: 'manual',\n} as const;\n\nexport const EXECUTION_MODES: Record<string, ExecutionMode> = {\n DEPENDENCY_MODE: 'dependency-mode',\n ELIGIBILITY_MODE: 'eligibility-mode',\n} as const;\n\nexport const CONFLICT_STRATEGIES: Record<string, ConflictStrategy> = {\n ALPHABETICAL: 'alphabetical',\n PRIORITY_FIRST: 'priority-first',\n DURATION_FIRST: 'duration-first',\n COST_OPTIMIZED: 'cost-optimized',\n RESOURCE_AWARE: 'resource-aware',\n RANDOM_SELECT: 'random-select',\n USER_CHOICE: 'user-choice',\n PARALLEL_ALL: 'parallel-all',\n SKIP_CONFLICTS: 'skip-conflicts',\n ROUND_ROBIN: 'round-robin',\n} as const;\n\nexport const DEFAULTS = {\n EXECUTION_MODE: 'eligibility-mode' as ExecutionMode,\n CONFLICT_STRATEGY: 'alphabetical' as ConflictStrategy,\n COMPLETION_STRATEGY: 'all-outputs-done' as CompletionStrategy,\n MAX_ITERATIONS: 1000,\n} as const;\n","/**\n * Event Graph — Graph Helpers\n *\n * Pure functions for manipulating the requires/provides task dependency graph.\n * No I/O, no side effects.\n */\n\nimport type { GraphConfig, TaskConfig, GraphEngineStore, ExecutionState, RefreshStrategy } from './types.js';\nimport { TASK_STATUS } from './constants.js';\n\n// ============================================================================\n// Accessors — normalize requires/provides to always be arrays\n// ============================================================================\n\nexport function getProvides(task: TaskConfig | undefined): string[] {\n if (!task) return [];\n if (Array.isArray(task.provides)) return task.provides;\n return [];\n}\n\nexport function getRequires(task: TaskConfig | undefined): string[] {\n if (!task) return [];\n if (Array.isArray(task.requires)) return task.requires;\n return [];\n}\n\nexport function getAllTasks(graph: GraphConfig): Record<string, TaskConfig> {\n return graph.tasks ?? {};\n}\n\nexport function getTask(graph: GraphConfig, taskName: string): TaskConfig | undefined {\n return graph.tasks[taskName];\n}\n\nexport function hasTask(graph: GraphConfig, taskName: string): boolean {\n return taskName in graph.tasks;\n}\n\n// ============================================================================\n// Task State Predicates\n// ============================================================================\n\nexport function isNonActiveTask(taskState: GraphEngineStore | undefined): boolean {\n if (!taskState) return false;\n return taskState.status === TASK_STATUS.FAILED || taskState.status === TASK_STATUS.INACTIVATED;\n}\n\nexport function isTaskCompleted(taskState: GraphEngineStore | undefined): boolean {\n return taskState?.status === TASK_STATUS.COMPLETED;\n}\n\nexport function isTaskRunning(taskState: GraphEngineStore | undefined): boolean {\n return taskState?.status === TASK_STATUS.RUNNING;\n}\n\nexport function getRefreshStrategy(taskConfig: TaskConfig, graphSettings?: { refreshStrategy?: RefreshStrategy }): RefreshStrategy {\n return taskConfig.refreshStrategy ?? graphSettings?.refreshStrategy ?? 'data-changed';\n}\n\nexport function isRerunnable(taskConfig: TaskConfig, graphSettings?: { refreshStrategy?: RefreshStrategy }): boolean {\n return getRefreshStrategy(taskConfig, graphSettings) !== 'once';\n}\n\nexport function getMaxExecutions(taskConfig: TaskConfig): number | undefined {\n return taskConfig.maxExecutions;\n}\n\n// ============================================================================\n// Available Outputs Computation\n// ============================================================================\n\n/**\n * Dynamically compute available outputs from all completed tasks.\n * Tasks with strategies other than 'once' may have completed and reset.\n * Pure function.\n */\nexport function computeAvailableOutputs(\n graph: GraphConfig,\n taskStates: Record<string, GraphEngineStore>\n): string[] {\n const outputs: Set<string> = new Set();\n\n for (const [taskName, taskState] of Object.entries(taskStates)) {\n if (taskState.status === TASK_STATUS.COMPLETED) {\n const taskConfig = graph.tasks[taskName];\n if (taskConfig) {\n const provides = getProvides(taskConfig);\n provides.forEach(output => outputs.add(output));\n }\n }\n }\n\n return Array.from(outputs);\n}\n\n// ============================================================================\n// Conflict Detection\n// ============================================================================\n\n/**\n * Group candidate tasks by the outputs they provide.\n * Used to detect conflicts (multiple tasks providing the same output).\n */\nexport function groupTasksByProvides(\n candidateTaskNames: string[],\n tasks: Record<string, TaskConfig>\n): Record<string, string[]> {\n const outputGroups: Record<string, string[]> = {};\n\n candidateTaskNames.forEach(taskName => {\n const task = tasks[taskName];\n if (!task) return;\n const provides = getProvides(task);\n provides.forEach(output => {\n if (!outputGroups[output]) {\n outputGroups[output] = [];\n }\n outputGroups[output].push(taskName);\n });\n });\n\n return outputGroups;\n}\n\n/**\n * Check if a task's outputs conflict with other candidates.\n */\nexport function hasOutputConflict(\n taskName: string,\n taskProvides: string[],\n candidates: string[],\n tasks: Record<string, TaskConfig>\n): boolean {\n for (const otherName of candidates) {\n if (otherName === taskName) continue;\n const otherProvides = getProvides(tasks[otherName]);\n const overlapping = taskProvides.some(output => otherProvides.includes(output));\n if (overlapping) return true;\n }\n return false;\n}\n\n// ============================================================================\n// Immutable Graph Mutation\n// ============================================================================\n\nexport function addKeyToProvides(task: TaskConfig, key: string): TaskConfig {\n const current = getProvides(task);\n if (current.includes(key)) return task;\n return { ...task, provides: [...current, key] };\n}\n\nexport function removeKeyFromProvides(task: TaskConfig, key: string): TaskConfig {\n const current = getProvides(task);\n return { ...task, provides: current.filter(p => p !== key) };\n}\n\nexport function addKeyToRequires(task: TaskConfig, key: string): TaskConfig {\n const current = getRequires(task);\n if (current.includes(key)) return task;\n return { ...task, requires: [...current, key] };\n}\n\nexport function removeKeyFromRequires(task: TaskConfig, key: string): TaskConfig {\n const current = getRequires(task);\n return { ...task, requires: current.filter(r => r !== key) };\n}\n\n// ============================================================================\n// Dynamic Task Management\n// ============================================================================\n\n/**\n * Add a new task to a graph config. Returns a new GraphConfig (immutable).\n */\nexport function addDynamicTask(\n graph: GraphConfig,\n taskName: string,\n taskConfig: TaskConfig\n): GraphConfig {\n return {\n ...graph,\n tasks: {\n ...graph.tasks,\n [taskName]: taskConfig,\n },\n };\n}\n\n/**\n * Create default task state for a new task.\n */\nexport function createDefaultGraphEngineStore(): GraphEngineStore {\n return {\n status: 'not-started',\n executionCount: 0,\n retryCount: 0,\n lastEpoch: 0,\n messages: [],\n progress: null,\n };\n}\n\n/**\n * Create the initial execution state for a graph.\n */\nexport function createInitialExecutionState(\n graph: GraphConfig,\n executionId: string\n): ExecutionState {\n const tasks: Record<string, GraphEngineStore> = {};\n for (const taskName of Object.keys(graph.tasks)) {\n tasks[taskName] = createDefaultGraphEngineStore();\n }\n\n return {\n status: 'running',\n tasks,\n availableOutputs: [],\n stuckDetection: { is_stuck: false, stuck_description: null, outputs_unresolvable: [], tasks_blocked: [] },\n lastUpdated: new Date().toISOString(),\n executionId,\n executionConfig: {\n executionMode: graph.settings.execution_mode ?? 'eligibility-mode',\n conflictStrategy: graph.settings.conflict_strategy ?? 'alphabetical',\n completionStrategy: graph.settings.completion,\n },\n };\n}\n","/**\n * Event Graph — Task State Transitions\n *\n * Pure functions for applying task lifecycle events to execution state.\n * Each function: f(state, ...) → newState\n */\n\nimport type { ExecutionState, GraphEngineStore, GraphConfig } from './types.js';\nimport { getProvides, getRequires } from './graph-helpers.js';\n\n/**\n * Apply task start to execution state. Pure function.\n */\nexport function applyTaskStart(state: ExecutionState, taskName: string, graph?: GraphConfig): ExecutionState {\n const existingTask = state.tasks[taskName] ?? createDefaultGraphEngineStore();\n\n // Snapshot upstream hashes at start time so that if an upstream task\n // completes while this task is running, applyTaskCompletion can detect\n // the mid-flight change and not absorb it into lastConsumedHashes.\n const startConsumedHashes: Record<string, string> = {};\n if (graph) {\n const taskConfig = graph.tasks[taskName];\n const requires = getRequires(taskConfig);\n for (const token of requires) {\n for (const [otherName, otherConfig] of Object.entries(graph.tasks)) {\n if (getProvides(otherConfig).includes(token)) {\n const otherState = state.tasks[otherName];\n if (otherState?.lastDataHash) startConsumedHashes[token] = otherState.lastDataHash;\n break;\n }\n }\n }\n }\n\n const updatedTask: GraphEngineStore = {\n ...existingTask,\n status: 'running',\n startedAt: new Date().toISOString(),\n lastUpdated: new Date().toISOString(),\n progress: 0,\n error: undefined,\n startConsumedHashes,\n };\n\n return {\n ...state,\n tasks: { ...state.tasks, [taskName]: updatedTask },\n lastUpdated: new Date().toISOString(),\n };\n}\n\n/**\n * Apply task completion to execution state.\n * Handles: default provides, conditional provides (on), refresh strategy, data hash tracking.\n * Pure function.\n */\nexport function applyTaskCompletion(\n state: ExecutionState,\n graph: GraphConfig,\n taskName: string,\n result?: string,\n dataHash?: string,\n data?: Record<string, unknown>\n): ExecutionState {\n const existingTask = state.tasks[taskName] ?? createDefaultGraphEngineStore();\n const taskConfig = graph.tasks[taskName];\n if (!taskConfig) {\n throw new Error(`Task \"${taskName}\" not found in graph`);\n }\n\n // Determine which outputs to produce\n let outputTokens: string[];\n if (result && taskConfig.on && taskConfig.on[result]) {\n // Conditional routing — use the on[result] provides\n outputTokens = taskConfig.on[result];\n } else {\n // Default provides\n outputTokens = getProvides(taskConfig);\n }\n\n // Use hashes snapshotted at task-start time as lastConsumedHashes.\n // This ensures that if an upstream task completed while this task was\n // running (mid-flight change), the old hash is preserved in\n // lastConsumedHashes → data-changed detects the difference on the\n // next schedule pass and re-runs this task.\n // Fall back to reading current upstream state only when startConsumedHashes\n // is absent (e.g. restored from an older snapshot without the field).\n const lastConsumedHashes: Record<string, string> = existingTask.startConsumedHashes\n ? { ...existingTask.startConsumedHashes }\n : { ...existingTask.lastConsumedHashes };\n\n if (!existingTask.startConsumedHashes) {\n // Legacy fallback: populate from current upstream state\n const requires = taskConfig.requires ?? [];\n for (const token of requires) {\n for (const [otherName, otherConfig] of Object.entries(graph.tasks)) {\n if (getProvides(otherConfig).includes(token)) {\n const otherState = state.tasks[otherName];\n if (otherState?.lastDataHash) {\n lastConsumedHashes[token] = otherState.lastDataHash;\n }\n break;\n }\n }\n }\n }\n\n const updatedTask: GraphEngineStore = {\n ...existingTask,\n status: 'completed',\n completedAt: new Date().toISOString(),\n lastUpdated: new Date().toISOString(),\n executionCount: existingTask.executionCount + 1,\n lastEpoch: existingTask.executionCount + 1,\n lastDataHash: dataHash,\n data,\n lastConsumedHashes,\n error: undefined,\n };\n\n // Merge new outputs with existing available outputs\n const newOutputs = [...new Set([...state.availableOutputs, ...outputTokens])];\n\n return {\n ...state,\n tasks: { ...state.tasks, [taskName]: updatedTask },\n availableOutputs: newOutputs,\n lastUpdated: new Date().toISOString(),\n };\n}\n\n/**\n * Apply task failure to execution state.\n * Handles: retry logic, on_failure token injection, circuit breaker.\n * Pure function.\n */\nexport function applyTaskFailure(\n state: ExecutionState,\n graph: GraphConfig,\n taskName: string,\n error: string\n): ExecutionState {\n const existingTask = state.tasks[taskName] ?? createDefaultGraphEngineStore();\n const taskConfig = graph.tasks[taskName];\n\n // Check retry\n if (taskConfig?.retry) {\n const retryCount = existingTask.retryCount + 1;\n if (retryCount <= taskConfig.retry.max_attempts) {\n // Retry — set back to not-started with incremented retry count\n const updatedTask: GraphEngineStore = {\n ...existingTask,\n status: 'not-started',\n retryCount,\n lastUpdated: new Date().toISOString(),\n error,\n };\n return {\n ...state,\n tasks: { ...state.tasks, [taskName]: updatedTask },\n lastUpdated: new Date().toISOString(),\n };\n }\n }\n\n // No more retries — mark as failed\n const updatedTask: GraphEngineStore = {\n ...existingTask,\n status: 'failed',\n failedAt: new Date().toISOString(),\n lastUpdated: new Date().toISOString(),\n error,\n executionCount: existingTask.executionCount + 1,\n };\n\n // Inject failure tokens if configured\n let newOutputs = state.availableOutputs;\n if (taskConfig?.on_failure && taskConfig.on_failure.length > 0) {\n newOutputs = [...new Set([...state.availableOutputs, ...taskConfig.on_failure])];\n }\n\n // Check circuit breaker\n if (taskConfig?.circuit_breaker && updatedTask.executionCount >= taskConfig.circuit_breaker.max_executions) {\n const breakTokens = taskConfig.circuit_breaker.on_break;\n newOutputs = [...new Set([...newOutputs, ...breakTokens])];\n }\n\n return {\n ...state,\n tasks: { ...state.tasks, [taskName]: updatedTask },\n availableOutputs: newOutputs,\n lastUpdated: new Date().toISOString(),\n };\n}\n\n/**\n * Apply task progress update. Pure function.\n */\nexport function applyTaskProgress(\n state: ExecutionState,\n taskName: string,\n message?: string,\n progress?: number\n): ExecutionState {\n const existingTask = state.tasks[taskName] ?? createDefaultGraphEngineStore();\n\n const updatedTask: GraphEngineStore = {\n ...existingTask,\n progress: typeof progress === 'number' ? progress : existingTask.progress,\n messages: [\n ...(existingTask.messages ?? []),\n ...(message ? [{ message, timestamp: new Date().toISOString(), status: existingTask.status }] : []),\n ],\n lastUpdated: new Date().toISOString(),\n };\n\n return {\n ...state,\n tasks: { ...state.tasks, [taskName]: updatedTask },\n lastUpdated: new Date().toISOString(),\n };\n}\n\n/**\n * Apply task restart to execution state.\n * Resets the task to not-started, preserving executionCount and lastEpoch\n * (history). Clears data, error, progress. The task becomes eligible for\n * scheduling again on the next drain cycle.\n * Pure function.\n */\nexport function applyTaskRestart(\n state: ExecutionState,\n taskName: string,\n): ExecutionState {\n const existingTask = state.tasks[taskName];\n if (!existingTask) return state;\n\n const updatedTask: GraphEngineStore = {\n ...existingTask,\n status: 'not-started',\n startedAt: undefined,\n completedAt: undefined,\n failedAt: undefined,\n error: undefined,\n data: undefined,\n progress: null,\n lastUpdated: new Date().toISOString(),\n };\n\n return {\n ...state,\n tasks: { ...state.tasks, [taskName]: updatedTask },\n lastUpdated: new Date().toISOString(),\n };\n}\n\nfunction createDefaultGraphEngineStore(): GraphEngineStore {\n return {\n status: 'not-started',\n executionCount: 0,\n retryCount: 0,\n lastEpoch: 0,\n messages: [],\n progress: null,\n };\n}\n","/**\n * Continuous Event Graph — Core\n *\n * All functions are pure: f(LiveGraph, input) → LiveGraph\n *\n * - createLiveGraph: bootstrap from a GraphConfig\n * - applyEvent: reduce an event (task-started, task-completed, etc.)\n * - addNode / removeNode: structural graph mutations\n * - addRequires / removeRequires / addProvides / removeProvides: wiring mutations\n */\n\nimport type { GraphConfig, TaskConfig, GraphEvent, LiveGraph, NodeInfo, LiveGraphSnapshot } from './types.js';\nimport type { ExecutionState, GraphEngineStore } from '../event-graph/types.js';\nimport { getProvides, getRequires } from '../event-graph/graph-helpers.js';\nimport {\n applyTaskStart,\n applyTaskCompletion,\n applyTaskFailure,\n applyTaskProgress,\n applyTaskRestart,\n} from '../event-graph/task-transitions.js';\n\n// ============================================================================\n// Create\n// ============================================================================\n\n/**\n * Create a LiveGraph from a GraphConfig.\n * Initialises execution state for all tasks in the config.\n */\nexport function createLiveGraph(config: GraphConfig, executionId?: string): LiveGraph {\n const id = executionId ?? `live-${Date.now()}`;\n const tasks: Record<string, GraphEngineStore> = {};\n\n for (const taskName of Object.keys(config.tasks)) {\n tasks[taskName] = createDefaultGraphEngineStore();\n }\n\n const state: ExecutionState = {\n status: 'running',\n tasks,\n availableOutputs: [],\n stuckDetection: { is_stuck: false, stuck_description: null, outputs_unresolvable: [], tasks_blocked: [] },\n lastUpdated: new Date().toISOString(),\n executionId: id,\n executionConfig: {\n executionMode: config.settings.execution_mode ?? 'eligibility-mode',\n conflictStrategy: config.settings.conflict_strategy ?? 'alphabetical',\n completionStrategy: config.settings.completion,\n },\n };\n\n return { config, state };\n}\n\n// ============================================================================\n// Event Reducer\n// ============================================================================\n\n/**\n * Apply an event to the LiveGraph, producing a new LiveGraph.\n * Events are the shared vocabulary — both execution state transitions\n * (task-started, task-completed, etc.) and structural mutations\n * (task-upsert, task-removal, node-requires-add, etc.).\n *\n * Pure function: f(LiveGraph, GraphEvent) → LiveGraph\n */\nexport function applyEvent(live: LiveGraph, event: GraphEvent): LiveGraph {\n const { config, state } = live;\n\n // Ghost event filtering\n if ('executionId' in event && event.executionId && event.executionId !== state.executionId) {\n return live;\n }\n\n switch (event.type) {\n // --- Execution state transitions ---\n\n case 'task-started':\n return { config, state: applyTaskStart(state, event.taskName, config) };\n\n case 'task-completed':\n return { config, state: applyTaskCompletion(state, config, event.taskName, event.result, event.dataHash, event.data) };\n\n case 'task-failed':\n return { config, state: applyTaskFailure(state, config, event.taskName, event.error) };\n\n case 'task-progress':\n return { config, state: applyTaskProgress(state, event.taskName, event.message, event.progress) };\n\n case 'task-restart':\n return { config, state: applyTaskRestart(state, event.taskName) };\n\n case 'inject-tokens':\n return {\n config,\n state: {\n ...state,\n availableOutputs: [...new Set([...state.availableOutputs, ...event.tokens])],\n lastUpdated: new Date().toISOString(),\n },\n };\n\n case 'agent-action':\n return { config, state: applyAgentAction(state, event.action) };\n\n // --- Structural mutations ---\n\n case 'task-upsert':\n return addNode(live, event.taskName, event.taskConfig);\n\n case 'task-removal':\n return removeNode(live, event.taskName);\n\n case 'node-requires-add':\n return addRequires(live, event.nodeName, event.tokens);\n\n case 'node-requires-remove':\n return removeRequires(live, event.nodeName, event.tokens);\n\n case 'node-provides-add':\n return addProvides(live, event.nodeName, event.tokens);\n\n case 'node-provides-remove':\n return removeProvides(live, event.nodeName, event.tokens);\n\n default:\n return live;\n }\n}\n\n/**\n * Apply multiple events atomically to a LiveGraph.\n * Events are reduced sequentially, but the caller only sees the final state.\n * Use this for batch processing (e.g. draining a journal of pending events).\n */\nexport function applyEvents(live: LiveGraph, events: GraphEvent[]): LiveGraph {\n return events.reduce((current, event) => applyEvent(current, event), live);\n}\n\n// ============================================================================\n// Graph Mutations — node-level\n// ============================================================================\n\n/**\n * Upsert a node (task) in the live graph. Updates both config and state atomically.\n * If the node already exists, replaces its config but preserves its state.\n * If new, creates fresh default state.\n */\nexport function addNode(live: LiveGraph, name: string, taskConfig: TaskConfig): LiveGraph {\n const exists = !!live.config.tasks[name];\n return {\n config: {\n ...live.config,\n tasks: { ...live.config.tasks, [name]: taskConfig },\n },\n state: {\n ...live.state,\n tasks: {\n ...live.state.tasks,\n [name]: exists ? live.state.tasks[name] : createDefaultGraphEngineStore(),\n },\n lastUpdated: new Date().toISOString(),\n },\n };\n}\n\n/**\n * Remove a node (task) from the live graph. Updates both config and state atomically.\n * If the node doesn't exist, returns the graph unchanged.\n * NOTE: Does not clean up references — other nodes' requires/provides are left intact.\n * The caller can use removeRequires() to clean up if needed.\n */\nexport function removeNode(live: LiveGraph, name: string): LiveGraph {\n if (!live.config.tasks[name]) return live;\n\n const { [name]: _removedConfig, ...remainingTasks } = live.config.tasks;\n const { [name]: _removedState, ...remainingStates } = live.state.tasks;\n\n return {\n config: {\n ...live.config,\n tasks: remainingTasks,\n },\n state: {\n ...live.state,\n tasks: remainingStates,\n lastUpdated: new Date().toISOString(),\n },\n };\n}\n\n// ============================================================================\n// Graph Mutations — wiring\n// ============================================================================\n\n/**\n * Add requires tokens to a node. If the node doesn't exist, returns unchanged.\n * Deduplicates — won't add tokens already in requires.\n */\nexport function addRequires(live: LiveGraph, nodeName: string, tokens: string[]): LiveGraph {\n const task = live.config.tasks[nodeName];\n if (!task) return live;\n\n const current = getRequires(task);\n const toAdd = tokens.filter(t => !current.includes(t));\n if (toAdd.length === 0) return live;\n\n return {\n config: {\n ...live.config,\n tasks: {\n ...live.config.tasks,\n [nodeName]: { ...task, requires: [...current, ...toAdd] },\n },\n },\n state: live.state,\n };\n}\n\n/**\n * Remove requires tokens from a node. If the node doesn't exist, returns unchanged.\n */\nexport function removeRequires(live: LiveGraph, nodeName: string, tokens: string[]): LiveGraph {\n const task = live.config.tasks[nodeName];\n if (!task) return live;\n\n const current = getRequires(task);\n const remaining = current.filter(t => !tokens.includes(t));\n if (remaining.length === current.length) return live;\n\n return {\n config: {\n ...live.config,\n tasks: {\n ...live.config.tasks,\n [nodeName]: { ...task, requires: remaining },\n },\n },\n state: live.state,\n };\n}\n\n/**\n * Add provides tokens to a node. If the node doesn't exist, returns unchanged.\n * Deduplicates — won't add tokens already in provides.\n */\nexport function addProvides(live: LiveGraph, nodeName: string, tokens: string[]): LiveGraph {\n const task = live.config.tasks[nodeName];\n if (!task) return live;\n\n const current = getProvides(task);\n const toAdd = tokens.filter(t => !current.includes(t));\n if (toAdd.length === 0) return live;\n\n return {\n config: {\n ...live.config,\n tasks: {\n ...live.config.tasks,\n [nodeName]: { ...task, provides: [...current, ...toAdd] },\n },\n },\n state: live.state,\n };\n}\n\n/**\n * Remove provides tokens from a node. If the node doesn't exist, returns unchanged.\n */\nexport function removeProvides(live: LiveGraph, nodeName: string, tokens: string[]): LiveGraph {\n const task = live.config.tasks[nodeName];\n if (!task) return live;\n\n const current = getProvides(task);\n const remaining = current.filter(t => !tokens.includes(t));\n if (remaining.length === current.length) return live;\n\n return {\n config: {\n ...live.config,\n tasks: {\n ...live.config.tasks,\n [nodeName]: { ...task, provides: remaining },\n },\n },\n state: live.state,\n };\n}\n\n// ============================================================================\n// Convenience — inject tokens via mutation (sugar over applyEvent)\n// ============================================================================\n\n/**\n * Inject tokens into the live graph's available outputs.\n * Equivalent to applyEvent(live, { type: 'inject-tokens', tokens, timestamp }).\n */\nexport function injectTokens(live: LiveGraph, tokens: string[]): LiveGraph {\n return applyEvent(live, {\n type: 'inject-tokens',\n tokens,\n timestamp: new Date().toISOString(),\n });\n}\n\n/**\n * Drain (remove) tokens from the live graph's available outputs.\n * Inverse of injectTokens — useful for expiring stale data or revoking signals.\n * Tokens that aren't currently available are silently ignored.\n * Pure function.\n */\nexport function drainTokens(live: LiveGraph, tokens: string[]): LiveGraph {\n const toRemove = new Set(tokens);\n const remaining = live.state.availableOutputs.filter(t => !toRemove.has(t));\n\n if (remaining.length === live.state.availableOutputs.length) return live;\n\n return {\n config: live.config,\n state: {\n ...live.state,\n availableOutputs: remaining,\n lastUpdated: new Date().toISOString(),\n },\n };\n}\n\n// ============================================================================\n// Node lifecycle\n// ============================================================================\n\n/**\n * Reset a node's state back to not-started, clearing error, retry count, progress.\n * Config is untouched. Useful when a failed task should be retried later.\n * If the node doesn't exist, returns unchanged.\n */\nexport function resetNode(live: LiveGraph, name: string): LiveGraph {\n if (!live.config.tasks[name] || !live.state.tasks[name]) return live;\n\n return {\n config: live.config,\n state: {\n ...live.state,\n tasks: {\n ...live.state.tasks,\n [name]: createDefaultGraphEngineStore(),\n },\n lastUpdated: new Date().toISOString(),\n },\n };\n}\n\n/**\n * Disable a node — sets its status to 'inactivated'.\n * The scheduler will skip inactivated tasks. Config is untouched.\n * If the node doesn't exist or is already inactivated, returns unchanged.\n */\nexport function disableNode(live: LiveGraph, name: string): LiveGraph {\n const taskState = live.state.tasks[name];\n if (!taskState || taskState.status === 'inactivated') return live;\n\n return {\n config: live.config,\n state: {\n ...live.state,\n tasks: {\n ...live.state.tasks,\n [name]: { ...taskState, status: 'inactivated', lastUpdated: new Date().toISOString() },\n },\n lastUpdated: new Date().toISOString(),\n },\n };\n}\n\n/**\n * Enable a previously-disabled node — sets its status back to 'not-started'.\n * Only acts on 'inactivated' nodes. If the node isn't inactivated, returns unchanged.\n */\nexport function enableNode(live: LiveGraph, name: string): LiveGraph {\n const taskState = live.state.tasks[name];\n if (!taskState || taskState.status !== 'inactivated') return live;\n\n return {\n config: live.config,\n state: {\n ...live.state,\n tasks: {\n ...live.state.tasks,\n [name]: { ...taskState, status: 'not-started', lastUpdated: new Date().toISOString() },\n },\n lastUpdated: new Date().toISOString(),\n },\n };\n}\n\n// ============================================================================\n// Read: getNode\n// ============================================================================\n\n/**\n * Get the config and state for a single node.\n * Returns undefined if the node doesn't exist.\n */\nexport function getNode(live: LiveGraph, name: string): NodeInfo | undefined {\n const config = live.config.tasks[name];\n if (!config) return undefined;\n const state = live.state.tasks[name] ?? createDefaultGraphEngineStore();\n return { name, config, state };\n}\n\n// ============================================================================\n// Persistence: snapshot / restore\n// ============================================================================\n\n/**\n * Serialize a LiveGraph to a plain JSON-safe object.\n * Can be persisted to disk, database, etc.\n */\nexport function snapshot(live: LiveGraph): LiveGraphSnapshot {\n return {\n version: 1,\n config: live.config,\n state: live.state,\n snapshotAt: new Date().toISOString(),\n };\n}\n\n/**\n * Restore a LiveGraph from a snapshot. Validates the shape.\n * Throws if the snapshot is invalid.\n */\nexport function restore(data: unknown): LiveGraph {\n if (!data || typeof data !== 'object') {\n throw new Error('Invalid snapshot: expected an object');\n }\n\n const snap = data as Record<string, unknown>;\n\n if (!snap.config || typeof snap.config !== 'object') {\n throw new Error('Invalid snapshot: missing or invalid \"config\"');\n }\n if (!snap.state || typeof snap.state !== 'object') {\n throw new Error('Invalid snapshot: missing or invalid \"state\"');\n }\n\n const config = snap.config as GraphConfig;\n const state = snap.state as ExecutionState;\n\n if (!config.settings || typeof config.settings !== 'object') {\n throw new Error('Invalid snapshot: config.settings missing');\n }\n if (!config.tasks || typeof config.tasks !== 'object') {\n throw new Error('Invalid snapshot: config.tasks missing');\n }\n if (!state.tasks || typeof state.tasks !== 'object') {\n throw new Error('Invalid snapshot: state.tasks missing');\n }\n if (!Array.isArray(state.availableOutputs)) {\n throw new Error('Invalid snapshot: state.availableOutputs must be an array');\n }\n\n return { config, state };\n}\n\n// ============================================================================\n// Internals\n// ============================================================================\n\nfunction createDefaultGraphEngineStore(): GraphEngineStore {\n return {\n status: 'not-started',\n executionCount: 0,\n retryCount: 0,\n lastEpoch: 0,\n messages: [],\n progress: null,\n };\n}\n\nfunction applyAgentAction(\n state: ExecutionState,\n action: 'start' | 'stop' | 'pause' | 'resume',\n): ExecutionState {\n const now = new Date().toISOString();\n switch (action) {\n case 'stop':\n return { ...state, status: 'stopped', lastUpdated: now };\n case 'pause':\n return { ...state, status: 'paused', lastUpdated: now };\n case 'resume':\n return { ...state, status: 'running', lastUpdated: now };\n default:\n return state;\n }\n}\n","/**\n * Continuous Event Graph — Schedule\n *\n * Pure read-only projection: LiveGraph → ScheduleResult\n *\n * Classifies every non-terminal task into one of:\n * - eligible: all requires satisfied, ready to dispatch\n * - pending: requires not yet met, but a viable producer exists (normal waiting)\n * - unresolved: requires not met, NO task in the graph can produce them (caller's problem)\n * - blocked: requires not met because the producing task FAILED (caller's problem)\n */\n\nimport type { LiveGraph, ScheduleResult, PendingTask, UnresolvedDependency, BlockedTask } from './types.js';\nimport { getProvides, getRequires, getAllTasks, isNonActiveTask, computeAvailableOutputs, getMaxExecutions, getRefreshStrategy, groupTasksByProvides } from '../event-graph/graph-helpers.js';\nimport { TASK_STATUS } from '../event-graph/constants.js';\n\n/**\n * Compute the scheduling status of every task in the live graph.\n * Pure function — no side effects.\n */\nexport function schedule(live: LiveGraph): ScheduleResult {\n const { config, state } = live;\n const graphTasks = getAllTasks(config);\n const taskNames = Object.keys(graphTasks);\n\n if (taskNames.length === 0) {\n return { eligible: [], pending: [], unresolved: [], blocked: [], conflicts: {} };\n }\n\n // Build producer map: token → tasks that produce it (includes on/on_failure)\n const producerMap = buildProducerMap(graphTasks);\n\n // Available outputs: from completed tasks + injected tokens\n const computedOutputs = computeAvailableOutputs(config, state.tasks);\n const availableOutputs = new Set([...computedOutputs, ...state.availableOutputs]);\n\n const eligible: string[] = [];\n const pending: PendingTask[] = [];\n const unresolved: UnresolvedDependency[] = [];\n const blocked: BlockedTask[] = [];\n\n for (const [taskName, taskConfig] of Object.entries(graphTasks)) {\n const taskState = state.tasks[taskName];\n const strategy = getRefreshStrategy(taskConfig, config.settings);\n const rerunnable = strategy !== 'once';\n\n // Always skip running or inactive (failed/inactivated) tasks\n if (taskState?.status === TASK_STATUS.RUNNING || isNonActiveTask(taskState)) {\n continue;\n }\n\n // Max executions cap\n const maxExec = getMaxExecutions(taskConfig);\n if (maxExec !== undefined && taskState && taskState.executionCount >= maxExec) {\n continue;\n }\n\n // Circuit breaker\n if (taskConfig.circuit_breaker && taskState &&\n taskState.executionCount >= taskConfig.circuit_breaker.max_executions) {\n continue;\n }\n\n // For once-only tasks: skip if completed\n if (!rerunnable && taskState?.status === TASK_STATUS.COMPLETED) {\n continue;\n }\n\n // For re-runnable tasks that already completed: check strategy\n if (rerunnable && taskState?.status === TASK_STATUS.COMPLETED) {\n const requires = getRequires(taskConfig);\n\n let shouldSkip = false;\n switch (strategy) {\n case 'data-changed': {\n if (requires.length > 0) {\n const hasChangedData = requires.some(req => {\n for (const [otherName, otherConfig] of Object.entries(graphTasks)) {\n if (getProvides(otherConfig).includes(req)) {\n const otherState = state.tasks[otherName];\n if (!otherState) continue;\n const consumed = taskState.lastConsumedHashes?.[req];\n if (otherState.lastDataHash == null) {\n return otherState.executionCount > taskState.lastEpoch;\n }\n return otherState.lastDataHash !== consumed;\n }\n }\n return false;\n });\n if (!hasChangedData) shouldSkip = true;\n } else {\n shouldSkip = true;\n }\n break;\n }\n case 'epoch-changed': {\n if (requires.length > 0) {\n const hasRefreshed = requires.some(req => {\n for (const [otherName, otherConfig] of Object.entries(graphTasks)) {\n if (getProvides(otherConfig).includes(req)) {\n const otherState = state.tasks[otherName];\n if (otherState && otherState.executionCount > taskState.lastEpoch) return true;\n }\n }\n return false;\n });\n if (!hasRefreshed) shouldSkip = true;\n } else {\n shouldSkip = true;\n }\n break;\n }\n case 'time-based': {\n const interval = taskConfig.refreshInterval ?? 0;\n if (interval <= 0) { shouldSkip = true; break; }\n const completedAt = taskState.completedAt;\n if (!completedAt) { shouldSkip = true; break; }\n const elapsedSec = (Date.now() - Date.parse(completedAt)) / 1000;\n if (elapsedSec < interval) shouldSkip = true;\n break;\n }\n case 'manual':\n shouldSkip = true;\n break;\n }\n if (shouldSkip) continue;\n }\n\n const requires = getRequires(taskConfig);\n\n // No requires → eligible (entry point)\n if (requires.length === 0) {\n eligible.push(taskName);\n continue;\n }\n\n // Check each required token\n const missingTokens: string[] = [];\n const pendingTokens: string[] = [];\n const failedTokenInfo: { token: string; failedProducer: string }[] = [];\n\n for (const token of requires) {\n if (availableOutputs.has(token)) continue;\n\n const producers = producerMap[token] || [];\n\n if (producers.length === 0) {\n // No task produces this token → unresolved\n missingTokens.push(token);\n } else {\n // Check if all producers have failed\n const allFailed = producers.every(p => isNonActiveTask(state.tasks[p]));\n if (allFailed) {\n failedTokenInfo.push({ token, failedProducer: producers[0] });\n } else {\n // At least one producer is viable → pending (normal wait)\n pendingTokens.push(token);\n }\n }\n }\n\n if (missingTokens.length > 0) {\n unresolved.push({ taskName, missingTokens });\n } else if (failedTokenInfo.length > 0) {\n blocked.push({\n taskName,\n failedTokens: failedTokenInfo.map(f => f.token),\n failedProducers: [...new Set(failedTokenInfo.map(f => f.failedProducer))],\n });\n } else if (pendingTokens.length > 0) {\n pending.push({ taskName, waitingOn: pendingTokens });\n } else {\n // All requires satisfied\n eligible.push(taskName);\n }\n }\n\n // Detect conflicts among eligible tasks\n const conflicts: Record<string, string[]> = {};\n if (eligible.length > 1) {\n const outputGroups = groupTasksByProvides(eligible, graphTasks);\n for (const [outputKey, groupTasks] of Object.entries(outputGroups)) {\n if (groupTasks.length > 1) {\n conflicts[outputKey] = groupTasks;\n }\n }\n }\n\n return { eligible, pending, unresolved, blocked, conflicts };\n}\n\n// ============================================================================\n// Internal helpers\n// ============================================================================\n\n/**\n * Build a map: token → tasks that produce it (via provides, on, on_failure).\n */\nfunction buildProducerMap(tasks: Record<string, import('../event-graph/types.js').TaskConfig>): Record<string, string[]> {\n const map: Record<string, string[]> = {};\n\n for (const [name, config] of Object.entries(tasks)) {\n for (const token of getProvides(config)) {\n if (!map[token]) map[token] = [];\n map[token].push(name);\n }\n if (config.on) {\n for (const tokens of Object.values(config.on)) {\n for (const token of tokens) {\n if (!map[token]) map[token] = [];\n if (!map[token].includes(name)) map[token].push(name);\n }\n }\n }\n if (config.on_failure) {\n for (const token of config.on_failure) {\n if (!map[token]) map[token] = [];\n if (!map[token].includes(name)) map[token].push(name);\n }\n }\n }\n\n return map;\n}\n","/**\n * Continuous Event Graph — Journal\n *\n * Append-only event log for the reactive layer.\n * Handlers append events here; drain() reads and clears atomically.\n *\n * Adapter:\n * - MemoryJournal: in-process array (default)\n */\n\nimport type { GraphEvent } from '../event-graph/types.js';\n\n// ============================================================================\n// Interface\n// ============================================================================\n\nexport interface Journal {\n /** Append an event to the journal. Safe to call from concurrent callbacks. */\n append(event: GraphEvent): void;\n /** Read all pending events and clear the journal atomically. */\n drain(): GraphEvent[];\n /** Number of pending events (for observability). */\n readonly size: number;\n}\n\n// ============================================================================\n// MemoryJournal — in-process, zero dependencies\n// ============================================================================\n\nexport class MemoryJournal implements Journal {\n private buffer: GraphEvent[] = [];\n\n append(event: GraphEvent): void {\n this.buffer.push(event);\n }\n\n drain(): GraphEvent[] {\n const events = this.buffer;\n this.buffer = [];\n return events;\n }\n\n get size(): number {\n return this.buffer.length;\n }\n}\n","/**\n * Continuous Event Graph — Reactive Layer\n *\n * Push-based, self-sustaining execution wrapper.\n *\n * Pattern:\n * 1. Register handlers for tasks\n * 2. Push an event (or inject tokens)\n * 3. The graph drives itself: drain journal → applyEvents → schedule → dispatch → repeat\n *\n * No daemon, no polling. Each handler callback appends to the journal,\n * which triggers a drain cycle that may dispatch the next wave.\n *\n * Dispatch failures, retries, and timeouts are managed internally\n * without touching the core engine types.\n */\n\nimport type { GraphConfig, TaskConfig, GraphEvent, GraphEngineStore } from '../event-graph/types.js';\nimport type { LiveGraph, LiveGraphSnapshot, ScheduleResult } from './types.js';\nimport { createLiveGraph, applyEvents, snapshot } from './core.js';\nimport { schedule } from './schedule.js';\nimport { MemoryJournal } from './journal.js';\n\n// ============================================================================\n// Internal helpers\n// ============================================================================\n\n/**\n * Deterministic hash of a data payload.\n * Recursively-sorted JSON → stable 64-bit hex.\n * Used to auto-compute dataHash when the handler doesn't provide one.\n * Exported so handler authors can pre-compute or test hashes.\n */\nexport function computeDataHash(data: Record<string, unknown>): string {\n const json = stableStringify(data);\n return fnv1a64Hex(json);\n}\n\n/** Recursively produce a JSON string with sorted keys at every level. */\nfunction stableStringify(value: unknown): string {\n if (value === null || value === undefined || typeof value !== 'object') {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return '[' + value.map(stableStringify).join(',') + ']';\n }\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj).sort();\n return '{' + keys.map(k => JSON.stringify(k) + ':' + stableStringify(obj[k])).join(',') + '}';\n}\n\n/**\n * Stable 64-bit FNV-1a hash as 16-char hex.\n * Fast, deterministic, and browser/Node portable.\n */\nfunction fnv1a64Hex(input: string): string {\n let hash = 0xcbf29ce484222325n;\n const prime = 0x100000001b3n;\n const mod = 0xffffffffffffffffn;\n for (let i = 0; i < input.length; i++) {\n hash ^= BigInt(input.charCodeAt(i));\n hash = (hash * prime) & mod;\n }\n return hash.toString(16).padStart(16, '0');\n}\n\nfunction base64UrlEncode(input: string): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(input, 'utf8').toString('base64url');\n }\n if (typeof btoa === 'function') {\n const bytes = new TextEncoder().encode(input);\n let binary = '';\n for (const b of bytes) binary += String.fromCharCode(b);\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/g, '');\n }\n throw new Error('No base64 encoder available in this runtime');\n}\n\nfunction base64UrlDecode(input: string): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(input, 'base64url').toString('utf8');\n }\n if (typeof atob === 'function') {\n const base64 = input.replace(/-/g, '+').replace(/_/g, '/');\n const padded = base64 + '='.repeat((4 - (base64.length % 4)) % 4);\n const binary = atob(padded);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return new TextDecoder().decode(bytes);\n }\n throw new Error('No base64 decoder available in this runtime');\n}\n\n/**\n * Encode a callback token for a task.\n * Opaque base64url string — can be sent to external systems.\n */\nfunction encodeCallbackToken(taskName: string): string {\n const payload = JSON.stringify({ t: taskName, n: Date.now().toString(36) + Math.random().toString(36).slice(2, 6) });\n return base64UrlEncode(payload);\n}\n\n/**\n * Decode a callback token → { taskName } or null if malformed.\n */\nfunction decodeCallbackToken(token: string): { taskName: string } | null {\n try {\n const payload = JSON.parse(base64UrlDecode(token));\n if (typeof payload?.t === 'string') return { taskName: payload.t };\n return null;\n } catch { return null; }\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Input passed to a task handler function.\n *\n * The reactive layer resolves upstream data from `requires` into `state`,\n * and provides this task's own engine store as `taskState`.\n * Handlers push output data back via `graph.resolveCallback(callbackToken, data)`.\n */\nexport interface TaskHandlerInput {\n /** This task's node ID (task name) */\n nodeId: string;\n /**\n * Upstream dependency data, keyed by require token name.\n * Only tokens from this task's `requires` are present.\n * Value is the producing task's `data` field (or undefined if not yet available).\n */\n state: Readonly<Record<string, Record<string, unknown> | undefined>>;\n /**\n * This task's own GraphEngineStore — includes status, data, executionCount, etc.\n */\n taskState: Readonly<GraphEngineStore>;\n /** This task's config */\n config: Readonly<TaskConfig>;\n /**\n * Opaque callback token encoding this task's identity.\n * Pass this to `graph.resolveCallback(callbackToken, data)` to complete the task.\n * Can be serialized and sent to external systems (webhooks, other scripts,\n * message queues) — any process with this token can push data back.\n */\n callbackToken: string;\n /**\n * Present only on task-progress re-invocations (source delivery / failure).\n * Contains the update payload from the task-progress event.\n * e.g. { bindTo: 'prices', fetchedAt: '...', dest: 'prices.json' }\n * or { bindTo: 'prices', failure: true, reason: 'timeout' }\n */\n update?: Record<string, unknown>;\n}\n\n/**\n * Handler return value — initiation status only.\n * - `'task-initiated'` — async work started successfully; data will arrive via resolveCallback\n * - `'task-initiate-failure'` — failed to start (bad config, connection refused, etc.)\n */\nexport type TaskHandlerReturn = 'task-initiated' | 'task-initiate-failure';\n\n/**\n * A named task handler function.\n * Registered in the handler registry, referenced by name in `taskConfig.taskHandlers`.\n *\n * The handler's job is to **initiate** async work, not await it.\n *\n * Flow:\n * 1. Handler receives `callbackToken` + upstream `state`\n * 2. Handler kicks off background work (internal, external script, webhook, etc.)\n * — passes `callbackToken` to the background work\n * 3. Handler returns `'task-initiated'` immediately\n * 4. Background work runs independently — when done, it calls\n * `graph.resolveCallback(callbackToken, data)` for success, or\n * `graph.resolveCallback(callbackToken, {}, ['error msg'])` for failure\n * 5. resolveCallback completes the task → data-changed cascade fires\n *\n * The callbackToken is opaque — pass it to the background work so it can\n * call back. Works across processes, scripts, webhooks, message queues.\n *\n * @example\n * ```ts\n * const fetchYahoo: TaskHandlerFn = async ({ state, callbackToken }) => {\n * const symbols = state['portfolio-form']?.holdings?.map(h => h.symbol) ?? [];\n * // Kick off background work — do NOT await\n * fetch(`https://api.yahoo.com/prices?s=${symbols.join(',')}`)\n * .then(res => res.json())\n * .then(prices => graph.resolveCallback(callbackToken, { prices }))\n * .catch(err => graph.resolveCallback(callbackToken, {}, [err.message]));\n * // Return immediately — background work will resolveCallback when done\n * return 'task-initiated';\n * };\n * ```\n */\nexport type TaskHandlerFn = (input: TaskHandlerInput) => Promise<TaskHandlerReturn>;\n\nexport interface ReactiveGraphOptions {\n /** Named handler registry — handler name → handler function */\n handlers: Record<string, TaskHandlerFn>;\n /** Called after each drain cycle — for observability */\n onDrain?: (events: GraphEvent[], live: LiveGraph, scheduleResult: ScheduleResult) => void;\n}\n\nexport interface ReactiveGraph {\n /** Push an event into the graph via journal. Triggers drain → schedule → dispatch. */\n push(event: GraphEvent): void;\n /** Push multiple events via journal. Single drain cycle after all are journaled. */\n pushAll(events: GraphEvent[]): void;\n /**\n * Resolve a callback token — complete (or fail) a task after initiation.\n * Journals task-completed or task-failed, then drains.\n * Gracefully ignores invalid tokens or tokens for tasks no longer in the graph.\n */\n resolveCallback(callbackToken: string, data: Record<string, unknown>, errors?: string[]): void;\n /** Add a node to the graph. Journals a task-upsert event, then drains. */\n addNode(name: string, taskConfig: TaskConfig): void;\n /** Remove a node from the graph. Journals a task-removal event, then drains. */\n removeNode(name: string): void;\n /** Add required tokens to an existing node. Journals event, then drains. */\n addRequires(nodeName: string, tokens: string[]): void;\n /** Remove required tokens from an existing node. Journals event, then drains. */\n removeRequires(nodeName: string, tokens: string[]): void;\n /** Add provided tokens to an existing node. Journals event, then drains. */\n addProvides(nodeName: string, tokens: string[]): void;\n /** Remove provided tokens from an existing node. Journals event, then drains. */\n removeProvides(nodeName: string, tokens: string[]): void;\n /** Register a named handler in the registry. */\n registerHandler(name: string, fn: TaskHandlerFn): void;\n /** Unregister a named handler from the registry. */\n unregisterHandler(name: string): void;\n /**\n * Re-trigger a task: journals a task-restart event, then drains.\n * data-changed cascade handles downstream automatically.\n */\n retrigger(taskName: string): void;\n /** Re-trigger multiple tasks via journal. */\n retriggerAll(taskNames: string[]): void;\n /**\n * Serialize current state to a JSON-safe snapshot.\n * Caller is responsible for writing to disk/DB/etc.\n * Restore via: `createReactiveGraph(restore(snapshotData), options)`\n */\n snapshot(): LiveGraphSnapshot;\n /** Read-only snapshot of current LiveGraph state. */\n getState(): LiveGraph;\n /** Current schedule projection. */\n getSchedule(): ScheduleResult;\n /**\n * Await all in-flight handler promises without disposing the graph.\n * Use this when you need to wait for async handlers to finish so you\n * can inspect side-effects (e.g. a TX accumulator) and then push more\n * events into the same graph instance.\n */\n waitForHandlers(): Promise<void>;\n /**\n * Stop accepting events.\n * @param options.wait — if true, await all in-flight handler promises before marking disposed.\n */\n dispose(options?: { wait?: boolean }): Promise<void>;\n}\n\n// ============================================================================\n// Factory\n// ============================================================================\n\nexport function createReactiveGraph(\n configOrLive: GraphConfig | LiveGraph,\n options: ReactiveGraphOptions,\n executionId?: string,\n): ReactiveGraph {\n const {\n handlers: initialHandlers,\n onDrain,\n } = options;\n\n // Private input queue — caller pushes external events here via push()/pushAll().\n // The engine never reads from a caller-supplied journal; all external events must be\n // explicitly pushed in so that state mutations are always caller-controlled.\n const inputQueue = new MemoryJournal();\n\n let live = 'state' in configOrLive && 'config' in configOrLive\n ? configOrLive as LiveGraph\n : createLiveGraph(configOrLive as GraphConfig, executionId);\n let disposed = false;\n\n // Track in-flight handler promises so callers can await them before dispose.\n const pendingHandlers = new Set<Promise<void>>();\n\n // Handler registry — mutable, keyed by handler name\n const handlers = new Map<string, TaskHandlerFn>(Object.entries(initialHandlers));\n\n // Private journal for internal state transitions (task-started, task-failed from engine).\n // Never exposed outside; keeps internal events off the caller-supplied journal.\n const internalJournal = new MemoryJournal();\n\n // Drain lock — prevents re-entrant drain cycles\n let draining = false;\n let drainQueued = false;\n\n // --------------------------------------------------------------------------\n // Core drain cycle\n // --------------------------------------------------------------------------\n\n function drain(): void {\n if (disposed) return;\n if (draining) {\n drainQueued = true;\n return;\n }\n\n draining = true;\n try {\n do {\n drainQueued = false;\n drainOnce();\n } while (drainQueued);\n } finally {\n draining = false;\n }\n }\n\n function drainOnce(): void {\n // 1. Read all pending events — internal lifecycle transitions first (task-started, task-failed),\n // then caller-pushed external events (task-upsert, task-completed, etc.).\n // Internal must precede external so engine lifecycle always applies before caller completions.\n const internalEvents = internalJournal.drain();\n const inputEvents = inputQueue.drain();\n const events = [...internalEvents, ...inputEvents];\n\n // 2. Apply events atomically (if any)\n if (events.length > 0) {\n live = applyEvents(live, events);\n }\n\n // 3. Schedule — what can run?\n const result = schedule(live);\n\n // 4. Observability callback (only when there were events)\n if (events.length > 0) {\n onDrain?.(events, live, result);\n }\n\n // 5. Dispatch eligible tasks\n for (const taskName of result.eligible) {\n dispatchTask(taskName);\n }\n\n // 6. Re-invoke handlers for in-progress tasks that received a task-progress event.\n // task-progress events don't change task status (they're not applied by the engine),\n // so we route them here directly to their taskHandlers.\n for (const event of events) {\n if (event.type === 'task-progress') {\n const { taskName, update } = event;\n const taskConfig = live.config.tasks[taskName];\n if (!taskConfig) continue;\n const taskState = live.state.tasks[taskName];\n if (!taskState || taskState.status !== 'running') continue;\n const callbackToken = encodeCallbackToken(taskName);\n const p = runPipeline(taskName, callbackToken, update).catch((error: Error) => {\n if (disposed) return;\n internalJournal.append({\n type: 'task-failed',\n taskName,\n error: error.message ?? String(error),\n timestamp: new Date().toISOString(),\n });\n drain();\n }).finally(() => { pendingHandlers.delete(p); });\n pendingHandlers.add(p);\n }\n }\n }\n\n // --------------------------------------------------------------------------\n // Resolve upstream state for a task's requires\n // --------------------------------------------------------------------------\n\n function resolveUpstreamState(taskName: string): Record<string, Record<string, unknown> | undefined> {\n const taskConfig = live.config.tasks[taskName];\n const requires = taskConfig.requires ?? [];\n\n const tokenToTask = new Map<string, string>();\n for (const [name, cfg] of Object.entries(live.config.tasks)) {\n for (const token of cfg.provides ?? []) {\n tokenToTask.set(token, name);\n }\n }\n\n const state: Record<string, Record<string, unknown> | undefined> = {};\n for (const token of requires) {\n const producerTask = tokenToTask.get(token);\n if (producerTask) {\n state[token] = live.state.tasks[producerTask]?.data;\n } else {\n state[token] = undefined;\n }\n }\n return state;\n }\n\n // --------------------------------------------------------------------------\n // Run the handler pipeline for a task\n // --------------------------------------------------------------------------\n\n async function runPipeline(taskName: string, callbackToken: string, update?: Record<string, unknown>): Promise<void> {\n const taskConfig = live.config.tasks[taskName];\n const handlerNames = taskConfig.taskHandlers ?? [];\n const upstreamState = resolveUpstreamState(taskName);\n\n for (const handlerName of handlerNames) {\n const handler = handlers.get(handlerName);\n if (!handler) {\n throw new Error(`Handler '${handlerName}' not found in registry (task '${taskName}')`);\n }\n\n const input: TaskHandlerInput = {\n nodeId: taskName,\n state: upstreamState,\n taskState: live.state.tasks[taskName],\n config: taskConfig,\n callbackToken,\n update,\n };\n\n const status = await handler(input);\n\n if (status === 'task-initiate-failure') {\n throw new Error(`Handler '${handlerName}' returned task-initiate-failure (task '${taskName}')`);\n }\n }\n }\n\n // --------------------------------------------------------------------------\n // Dispatch a single task\n // --------------------------------------------------------------------------\n\n function dispatchTask(taskName: string): void {\n const taskConfig = live.config.tasks[taskName];\n const handlerNames = taskConfig?.taskHandlers;\n\n if (!handlerNames || handlerNames.length === 0) {\n // No taskHandlers — externally driven.\n return;\n }\n\n // Write task-started to internal journal only — not to the caller-supplied journal\n internalJournal.append({\n type: 'task-started',\n taskName,\n timestamp: new Date().toISOString(),\n });\n // Re-trigger drain so task-started is applied to graph state before caller saves.\n // Since we're called from within drainOnce(), draining=true here, so this sets\n // drainQueued=true — the do...while loop picks it up in the next pass.\n drain();\n\n const callbackToken = encodeCallbackToken(taskName);\n\n // Fire-and-forget: run the handler pipeline\n const p = runPipeline(taskName, callbackToken).catch((error: Error) => {\n if (disposed) return;\n internalJournal.append({\n type: 'task-failed',\n taskName,\n error: error.message ?? String(error),\n timestamp: new Date().toISOString(),\n });\n drain();\n }).finally(() => { pendingHandlers.delete(p); });\n pendingHandlers.add(p);\n }\n\n // --------------------------------------------------------------------------\n // Public API — every mutation goes through journal\n // --------------------------------------------------------------------------\n\n return {\n push(event: GraphEvent): void {\n if (disposed) return;\n if (event.type === 'task-completed' && event.data && !event.dataHash) {\n event = { ...event, dataHash: computeDataHash(event.data) };\n }\n inputQueue.append(event);\n drain();\n },\n\n pushAll(events: GraphEvent[]): void {\n if (disposed) return;\n for (const event of events) {\n if (event.type === 'task-completed' && event.data && !event.dataHash) {\n inputQueue.append({ ...event, dataHash: computeDataHash(event.data) });\n } else {\n inputQueue.append(event);\n }\n }\n drain();\n },\n\n resolveCallback(callbackToken: string, data: Record<string, unknown>, errors?: string[]): void {\n if (disposed) return;\n\n const decoded = decodeCallbackToken(callbackToken);\n if (!decoded) return;\n\n const { taskName } = decoded;\n if (!live.config.tasks[taskName]) return;\n\n if (errors && errors.length > 0) {\n inputQueue.append({\n type: 'task-failed',\n taskName,\n error: errors.join('; '),\n timestamp: new Date().toISOString(),\n });\n } else {\n const dataHash = data && Object.keys(data).length > 0 ? computeDataHash(data) : undefined;\n inputQueue.append({\n type: 'task-completed',\n taskName,\n data,\n dataHash,\n timestamp: new Date().toISOString(),\n });\n }\n drain();\n },\n\n addNode(name: string, taskConfig: TaskConfig): void {\n if (disposed) return;\n inputQueue.append({ type: 'task-upsert', taskName: name, taskConfig, timestamp: new Date().toISOString() });\n drain();\n },\n\n removeNode(name: string): void {\n if (disposed) return;\n inputQueue.append({ type: 'task-removal', taskName: name, timestamp: new Date().toISOString() });\n drain();\n },\n\n addRequires(nodeName: string, tokens: string[]): void {\n if (disposed) return;\n inputQueue.append({ type: 'node-requires-add', nodeName, tokens, timestamp: new Date().toISOString() });\n drain();\n },\n\n removeRequires(nodeName: string, tokens: string[]): void {\n if (disposed) return;\n inputQueue.append({ type: 'node-requires-remove', nodeName, tokens, timestamp: new Date().toISOString() });\n drain();\n },\n\n addProvides(nodeName: string, tokens: string[]): void {\n if (disposed) return;\n inputQueue.append({ type: 'node-provides-add', nodeName, tokens, timestamp: new Date().toISOString() });\n drain();\n },\n\n removeProvides(nodeName: string, tokens: string[]): void {\n if (disposed) return;\n inputQueue.append({ type: 'node-provides-remove', nodeName, tokens, timestamp: new Date().toISOString() });\n drain();\n },\n\n registerHandler(name: string, fn: TaskHandlerFn): void {\n handlers.set(name, fn);\n },\n\n unregisterHandler(name: string): void {\n handlers.delete(name);\n },\n\n retrigger(taskName: string): void {\n if (disposed) return;\n if (!live.config.tasks[taskName]) return;\n inputQueue.append({\n type: 'task-restart',\n taskName,\n timestamp: new Date().toISOString(),\n });\n drain();\n },\n\n retriggerAll(taskNames: string[]): void {\n if (disposed) return;\n for (const name of taskNames) {\n if (!live.config.tasks[name]) continue;\n inputQueue.append({\n type: 'task-restart',\n taskName: name,\n timestamp: new Date().toISOString(),\n });\n }\n drain();\n },\n\n snapshot(): LiveGraphSnapshot {\n return snapshot(live);\n },\n\n getState(): LiveGraph {\n return live;\n },\n\n getSchedule(): ScheduleResult {\n return schedule(live);\n },\n\n async waitForHandlers(): Promise<void> {\n if (pendingHandlers.size > 0) {\n await Promise.allSettled([...pendingHandlers]);\n }\n },\n\n async dispose(options?: { wait?: boolean }): Promise<void> {\n if (options?.wait && pendingHandlers.size > 0) {\n await Promise.allSettled([...pendingHandlers]);\n }\n disposed = true;\n },\n };\n}\n","/**\n * execution-interface.ts\n *\n * Pure module — no Node/platform imports. Safe for any runtime.\n *\n * Defines the portable descriptor types for invoking any executable target,\n * regardless of transport (local process, HTTP endpoint, cloud function, etc.).\n *\n * Parallel to storage-interface.ts (which describes WHERE data lives), this\n * module describes HOW to invoke a piece of logic.\n *\n * ────────────────────────────────────────────────────────────────────────────\n * CORE CONCEPTS\n * ────────────────────────────────────────────────────────────────────────────\n *\n * ExecutionRef — self-contained, serializable JSON descriptor for one invocation target.\n * • howToRun — transport / runtime kind (discriminator)\n * • whatToRun — address of the artifact (KindValueRef wire form: ::kind::value)\n * • argsMassaging — optional JSONata expressions that map logical args → physical call shape\n * • meta — optional human-readable label (e.g. 'task-executor', 'chat-handler')\n *\n * ExecutionResult — standardized envelope returned by any invocation.\n * • status: 'success' | 'fail' | 'error'\n * • data — KindValueRef wire form pointing to output blob (on success)\n * • error — human-readable message (on fail/error)\n *\n * ────────────────────────────────────────────────────────────────────────────\n * howToRun VALUES\n * ────────────────────────────────────────────────────────────────────────────\n *\n * 'local-node' node <whatToRun> [argv...]\n * 'local-python' python <whatToRun> [argv...]\n * 'local-process' execute <whatToRun> directly (shebang / pre-resolved binary)\n * 'http:post' HTTP POST to <whatToRun>\n * 'http:get' HTTP GET to <whatToRun>\n * 'built-in' resolved by the adapter to a well-known internal implementation\n *\n * ────────────────────────────────────────────────────────────────────────────\n * argsMassaging\n * ────────────────────────────────────────────────────────────────────────────\n *\n * Each field is a JSONata expression evaluated against the caller's logical args object.\n * If argsMassaging is omitted, the adapter uses its default mapping for the howToRun kind.\n *\n * cmdTemplate — array of JSONata exprs, each producing one argv string (local transports)\n * urlTemplate — JSONata expr producing the final URL string (http transports)\n * bodyTemplate — JSONata expr producing the request body object (http transports)\n *\n * ────────────────────────────────────────────────────────────────────────────\n * SERIALIZATION\n * ────────────────────────────────────────────────────────────────────────────\n *\n * ExecutionRef is a plain JSON object — store it as-is on disk, in Cosmos, or any DB.\n * No special encoding needed. parseExecutionRef / serializeExecutionRef are thin\n * JSON wrappers provided for symmetry with storage-interface.\n *\n * ────────────────────────────────────────────────────────────────────────────\n * USAGE EXAMPLES\n * ────────────────────────────────────────────────────────────────────────────\n *\n * // Built-in source-cli task executor (resolved by adapter from cliDir):\n * const builtIn: ExecutionRef = {\n * meta: 'task-executor',\n * howToRun: 'built-in',\n * whatToRun: '::built-in::source-cli-task-executor',\n * };\n *\n * // External local-node task executor with default protocol args:\n * const local: ExecutionRef = {\n * meta: 'task-executor',\n * howToRun: 'local-node',\n * whatToRun: '::fs-path::/path/to/my-executor.js',\n * };\n *\n * // Azure Function task executor with custom arg mapping:\n * const azureFn: ExecutionRef = {\n * meta: 'task-executor',\n * howToRun: 'http:post',\n * whatToRun: '::http-url::https://myfn.azurewebsites.net/api/task-executor',\n * argsMassaging: {\n * urlTemplate: \"whatToRun & '?op=' & subcommand\",\n * bodyTemplate: \"{ 'inRef': inRef, 'outRef': outRef, 'token': token }\",\n * },\n * };\n *\n * // Chat handler over HTTP with a different logical args shape:\n * const chatHandler: ExecutionRef = {\n * meta: 'chat-handler',\n * howToRun: 'http:post',\n * whatToRun: '::http-url::https://myfn.azurewebsites.net/api/chat',\n * argsMassaging: {\n * bodyTemplate: \"{ 'message': message, 'context': context, 'sessionId': sessionId }\",\n * },\n * };\n */\n\n// ============================================================================\n// ArgsMassaging\n// ============================================================================\n\n/**\n * Optional JSONata-based mapping from logical args → physical invocation shape.\n *\n * Each field is a JSONata expression string evaluated against the caller's\n * logical args object (e.g. `{ inRef, outRef, errRef }` for a task-executor).\n *\n * If argsMassaging is omitted entirely, the execution adapter uses its default\n * mapping for the given howToRun kind.\n */\nexport interface ArgsMassaging {\n /**\n * For local transports ('local-node', 'local-python', 'local-process').\n * Array of JSONata expressions — each evaluates to one argv string.\n * The resolved strings are appended after the base command.\n *\n * @example\n * // Standard task-executor protocol:\n * cmdTemplate: [\n * \"'run-source-fetch'\",\n * \"'--in-ref'\", \"inRef\",\n * \"'--out-ref'\", \"outRef\",\n * \"'--err-ref'\", \"errRef\",\n * ]\n */\n cmdTemplate?: string[];\n\n /**\n * For http transports ('http:post', 'http:get').\n * JSONata expression that produces the final URL string.\n * The input context includes 'whatToRun' (the base URL from the ref)\n * plus all logical args.\n *\n * @example\n * urlTemplate: \"whatToRun & '?op=' & subcommand\"\n */\n urlTemplate?: string;\n\n /**\n * For http transports.\n * JSONata expression that produces the request body object.\n * Evaluated against the logical args object.\n *\n * @example\n * bodyTemplate: \"{ 'inRef': inRef, 'outRef': outRef, 'token': token }\"\n */\n bodyTemplate?: string;\n}\n\n// ============================================================================\n// ExecutionRef\n// ============================================================================\n\n/**\n * Self-contained, serializable descriptor for invoking a target.\n *\n * Stores everything needed to make the physical call — transport kind,\n * artifact address, and optional arg-mapping expressions.\n * Serialize as plain JSON; no special wire encoding required.\n */\nexport interface ExecutionRef {\n /**\n * Optional human-readable label identifying the role of this invocation.\n * Not used for dispatch — purely for logging and diagnostics.\n * @example 'task-executor', 'chat-handler', 'board-live-cards'\n */\n meta?: string;\n\n /**\n * Transport and runtime kind — determines how whatToRun is invoked.\n * @see module JSDoc for the full list of supported values.\n */\n howToRun: 'local-node' | 'local-python' | 'local-process' | 'http:post' | 'http:get' | 'built-in';\n\n /**\n * Address of the artifact to run, in KindValueRef wire form (::kind::value).\n * @example '::fs-path::/dist/cli/source-cli-task-executor.js'\n * @example '::http-url::https://fn.example.com/api/executor'\n * @example '::built-in::source-cli-task-executor'\n */\n whatToRun: string;\n\n /**\n * Optional JSONata-based mapping from logical args → physical call shape.\n * When omitted, the adapter applies its default protocol for the howToRun kind.\n */\n argsMassaging?: ArgsMassaging;\n\n /**\n * Opaque executor-specific configuration.\n * For local transports, base64-encoded and passed as --extra <base64-json> in the argv.\n * For HTTP transports, available in argsMassaging.bodyTemplate as the `extra` binding.\n * Stored with the ref so it travels as a single unit with the invocation descriptor.\n */\n extra?: Record<string, unknown>;\n}\n\n// ============================================================================\n// ExecutionResult\n// ============================================================================\n\n/**\n * Standardized result envelope returned by any execution.\n *\n * Replaces the implicit \"file-exists = success, absent = failure\" protocol\n * with an explicit status field. The data ref points to the output blob.\n */\nexport interface ExecutionResult {\n /** Outcome of the execution. */\n status: 'success' | 'fail' | 'error';\n\n /**\n * KindValueRef wire form pointing to the output blob.\n * Present only when status === 'success'.\n */\n data?: string;\n\n /**\n * Human-readable error or failure message.\n * Present when status === 'fail' or 'error'.\n */\n error?: string;\n}\n\n// ============================================================================\n// ExecutionRef factory helpers\n// ============================================================================\n\n/**\n * Create an ExecutionRef from a script path string (e.g. from a --task-executor CLI arg).\n * File extension determines howToRun:\n * .js / .mjs → 'local-node'\n * .py → 'local-python'\n * other → 'local-process'\n *\n * @param scriptPath Absolute or relative path to the script / binary.\n * @param extra Optional opaque executor config stored on the ref.\n */\nexport function executionRefFromScriptPath(\n scriptPath: string,\n extra?: Record<string, unknown>,\n): ExecutionRef {\n let howToRun: ExecutionRef['howToRun'];\n if (/\\.m?js$/i.test(scriptPath)) howToRun = 'local-node';\n else if (/\\.py$/i.test(scriptPath)) howToRun = 'local-python';\n else howToRun = 'local-process';\n return {\n meta: 'task-executor',\n howToRun,\n whatToRun: `::fs-path::${scriptPath}`,\n ...(extra ? { extra } : {}),\n };\n}\n\n// ============================================================================\n// Serialization helpers\n// ============================================================================\n\n/**\n * Serialize an ExecutionRef to a JSON string for storage.\n * Plain JSON.stringify — no special encoding.\n */\nexport function serializeExecutionRef(ref: ExecutionRef): string {\n return JSON.stringify(ref);\n}\n\n/**\n * Parse a JSON string back into an ExecutionRef.\n * Throws if the string is not valid JSON or is missing required fields.\n */\nexport function parseExecutionRef(s: string): ExecutionRef {\n let parsed: unknown;\n try {\n parsed = JSON.parse(s);\n } catch {\n throw new Error(`parseExecutionRef: invalid JSON — ${s}`);\n }\n if (\n typeof parsed !== 'object' ||\n parsed === null ||\n typeof (parsed as Record<string, unknown>).howToRun !== 'string' ||\n typeof (parsed as Record<string, unknown>).whatToRun !== 'string'\n ) {\n throw new Error(`parseExecutionRef: missing required fields howToRun/whatToRun — ${s}`);\n }\n return parsed as ExecutionRef;\n}\n","/**\n * card-compute — JSONata-powered compute engine for LiveCards nodes.\n *\n * Isomorphic: works in browser, Node.js, and bundlers.\n * No DOM dependency. Compute expressions are JSONata strings.\n *\n * @example\n * ```typescript\n * import { CardCompute } from 'yaml-flow/card-compute';\n *\n * const node = {\n * id: 'sales',\n * card_data: { data: [{ revenue: 100 }, { revenue: 200 }] },\n * compute: [\n * { bindTo: 'total', expr: '$sum(card_data.data.revenue)' },\n * { bindTo: 'avg', expr: '$average(card_data.data.revenue)' },\n * ],\n * };\n * await CardCompute.run(node);\n * // node.computed_values.total === 300\n * // node.computed_values.avg === 150\n * ```\n *\n * Expressions are evaluated against { card_data, requires, fetched_sources, computed_values }.\n * computed_values is ephemeral — never persisted to disk.\n */\n\nimport jsonata from 'jsonata';\nimport { createRequire } from 'module';\nconst _require = createRequire(import.meta.url);\n// QuickJS bundles may initialize the shim binding after this module executes.\n// Fallback to the standard jsonata import so sync evaluation still works.\nconst jsonataSync: typeof jsonata = (_require('./jsonata-sync.cjs') ?? jsonata) as typeof jsonata;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** A source definition: cli writes to outputFile; bindTo names the fetched_sources.* key in compute context. Both bindTo and outputFile must be unique across source_defs in a card. */\nexport interface ComputeSource {\n bindTo: string;\n outputFile: string;\n cli?: string;\n // Deprecated alias retained for compatibility with older cards.\n script?: string;\n optionalForCompletionGating?: boolean;\n /** Named data projections: each key maps to a JSONata expression rooted at card_data or requires.\n * The engine evaluates these before spawning the executor and passes results as _projections. */\n projections?: Record<string, string>;\n [key: string]: unknown;\n}\n\n/** Options for CardCompute.run() */\nexport interface RunOptions {\n /** Pre-loaded source results map (keyed by bindTo). Use in browser or when caller loads files. */\n sourcesData?: Record<string, unknown>;\n}\n\n/** A single compute step: bindTo names the computed_values key; expr is a JSONata expression. */\nexport interface ComputeStep {\n bindTo: string;\n expr: string;\n}\n\n/** Minimal node shape expected by CardCompute. */\nexport interface ComputeNode {\n id?: string;\n card_data?: Record<string, unknown>;\n requires?: Record<string, unknown>;\n source_defs?: ComputeSource[];\n compute?: ComputeStep[];\n computed_values?: Record<string, unknown>;\n /** Ephemeral: populated by run() from sourcesData option. Never persisted. */\n _sourcesData?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// Deep path utilities\n// ---------------------------------------------------------------------------\n\nfunction deepGet(obj: unknown, path: string): unknown {\n if (!path || !obj) return undefined;\n const parts = path.split('.');\n let cur: unknown = obj;\n for (let i = 0; i < parts.length; i++) {\n if (cur == null) return undefined;\n cur = (cur as Record<string, unknown>)[parts[i]];\n }\n return cur;\n}\n\nfunction deepSet(obj: Record<string, unknown>, path: string, value: unknown): void {\n const parts = path.split('.');\n let cur: Record<string, unknown> = obj;\n for (let i = 0; i < parts.length - 1; i++) {\n if (cur[parts[i]] == null || typeof cur[parts[i]] !== 'object') cur[parts[i]] = {};\n cur = cur[parts[i]] as Record<string, unknown>;\n }\n cur[parts[parts.length - 1]] = value;\n}\n\n// ---------------------------------------------------------------------------\n// Engine — JSONata-based async evaluation\n// ---------------------------------------------------------------------------\n\n/**\n * Run all compute steps on a node.\n * Each step's expr is evaluated against { card_data, requires, fetched_sources, computed_values }.\n * Results are written to node.computed_values[bindTo].\n * computed_values and _sourcesData are reset on each call — ephemeral, never persisted.\n *\n * @param options.sourcesData Pre-loaded map of { [bindTo]: data } for fetched_sources namespace.\n * In Node/CLI: loaded from outputFiles by the caller (card-handler).\n * In browser: passed in by the caller (e.g. from fetch results).\n */\nasync function run(node: ComputeNode, options?: RunOptions): Promise<ComputeNode> {\n if (!node?.compute?.length) return node;\n if (!node.card_data) node.card_data = {};\n node.computed_values = {};\n node._sourcesData = options?.sourcesData ?? {};\n\n // Context passed to JSONata\n const ctx: Record<string, unknown> = {\n card_data: node.card_data,\n requires: node.requires ?? {},\n fetched_sources: node._sourcesData,\n computed_values: node.computed_values,\n };\n\n for (const step of node.compute) {\n try {\n const val = await jsonata(step.expr).evaluate(ctx);\n deepSet(node.computed_values, step.bindTo, val);\n ctx.computed_values = node.computed_values; // subsequent steps see earlier results\n } catch (err) {\n console.error(`CardCompute.run error on \"${node.id ?? '?'}.${step.bindTo}\":`, err);\n }\n }\n\n return node;\n}\n\n/**\n * Synchronous version of run() — uses a vendored sync JSONata build\n * (async/await stripped from jsonata.js since all built-in functions\n * are CPU-only).\n *\n * Same semantics as `run()`: evaluates all compute steps, populates\n * `node.computed_values`, returns the mutated node.\n *\n * @returns `{ ok: true, node }` when all steps evaluated successfully.\n * `{ ok: false, node }` is currently never returned but reserved\n * for future use if an expression requires true async evaluation.\n */\nfunction runSync(node: ComputeNode, options?: RunOptions): { ok: boolean; node: ComputeNode } {\n if (!node?.compute?.length) return { ok: true, node };\n if (!node.card_data) node.card_data = {};\n node.computed_values = {};\n node._sourcesData = options?.sourcesData ?? {};\n\n const ctx: Record<string, unknown> = {\n card_data: node.card_data,\n requires: node.requires ?? {},\n fetched_sources: node._sourcesData,\n computed_values: node.computed_values,\n };\n\n for (const step of node.compute) {\n try {\n const val = jsonataSync(step.expr).evaluate(ctx);\n deepSet(node.computed_values, step.bindTo, val);\n ctx.computed_values = node.computed_values;\n } catch (err) {\n console.error(`CardCompute.runSync error on \"${node.id ?? '?'}.${step.bindTo}\":`, err);\n }\n }\n\n return { ok: true, node };\n}\n\n/**\n * Evaluate a single JSONata expression against a node's context.\n * Context is { card_data, requires, fetched_sources, computed_values }.\n */\nasync function evalExpr(expr: string, node: ComputeNode): Promise<unknown> {\n const ctx: Record<string, unknown> = {\n card_data: node.card_data ?? {},\n requires: node.requires ?? {},\n fetched_sources: node._sourcesData ?? {},\n computed_values: node.computed_values ?? {},\n };\n return jsonata(expr).evaluate(ctx);\n}\n\n// ---------------------------------------------------------------------------\n// resolve — synchronous deep-get from node\n// ---------------------------------------------------------------------------\n\nfunction resolve(node: ComputeNode, path: string): unknown {\n if (path.startsWith('fetched_sources.')) {\n return deepGet(node._sourcesData ?? {}, path.slice('fetched_sources.'.length));\n }\n\n return deepGet(node, path);\n}\n\n// ---------------------------------------------------------------------------\n// Validation\n// ---------------------------------------------------------------------------\n\n/** Result of validateNode — ok: true means valid, ok: false has errors[]. */\nexport interface ValidationResult {\n ok: boolean;\n errors: string[];\n}\n\nconst VALID_ELEMENT_KINDS = new Set([\n 'metric', 'table', 'editable-table', 'chart', 'form', 'filter', 'list',\n 'notes', 'todo', 'alert', 'narrative', 'badge', 'text',\n 'markdown', 'ref', 'custom', 'actions',\n]);\n\nconst ALLOWED_KEYS = new Set(['id', 'meta', 'requires', 'provides', 'view', 'card_data', 'compute', 'source_defs']);\n\nfunction validateNode(node: unknown): ValidationResult {\n const errors: string[] = [];\n\n if (!node || typeof node !== 'object' || Array.isArray(node)) {\n return { ok: false, errors: ['Node must be a non-null object'] };\n }\n\n const n = node as Record<string, unknown>;\n\n if (typeof n.id !== 'string' || !n.id) errors.push('id: required, must be a non-empty string');\n\n for (const key of Object.keys(n)) {\n if (!ALLOWED_KEYS.has(key)) errors.push(`Unknown top-level key: \"${key}\"`);\n }\n\n if (n.card_data == null || typeof n.card_data !== 'object' || Array.isArray(n.card_data)) {\n errors.push('card_data: required, must be an object');\n }\n\n if (n.meta != null) {\n if (typeof n.meta !== 'object' || Array.isArray(n.meta)) {\n errors.push('meta: must be an object');\n } else {\n const meta = n.meta as Record<string, unknown>;\n if (meta.title != null && typeof meta.title !== 'string') errors.push('meta.title: must be a string');\n if (meta.tags != null && !Array.isArray(meta.tags)) errors.push('meta.tags: must be an array');\n }\n }\n\n if (n.requires != null && !Array.isArray(n.requires)) errors.push('requires: must be an array of strings');\n\n if (n.provides != null) {\n if (!Array.isArray(n.provides)) {\n errors.push('provides: must be an array of { bindTo, ref } bindings');\n } else {\n (n.provides as unknown[]).forEach((p, i) => {\n if (!p || typeof p !== 'object' || Array.isArray(p)) {\n errors.push(`provides[${i}]: must be an object with bindTo and ref`);\n } else {\n const b = p as Record<string, unknown>;\n if (typeof b.bindTo !== 'string' || !b.bindTo) errors.push(`provides[${i}]: missing required \"bindTo\" string`);\n if (typeof b.ref !== 'string' || !b.ref) errors.push(`provides[${i}]: missing required \"ref\" string`);\n }\n });\n }\n }\n\n // compute — ordered array of { bindTo, expr } steps\n if (n.compute != null) {\n if (!Array.isArray(n.compute)) {\n errors.push('compute: must be an array of compute steps');\n } else {\n (n.compute as unknown[]).forEach((step, i) => {\n if (!step || typeof step !== 'object' || Array.isArray(step)) {\n errors.push(`compute[${i}]: must be a compute step object`);\n } else {\n const s = step as Record<string, unknown>;\n if (typeof s.bindTo !== 'string' || !s.bindTo) errors.push(`compute[${i}]: missing required \"bindTo\" property`);\n if (typeof s.expr !== 'string' || !s.expr) errors.push(`compute[${i}]: missing required \"expr\" string (JSONata expression)`);\n }\n });\n }\n }\n\n if (n.source_defs != null) {\n if (!Array.isArray(n.source_defs)) {\n errors.push('source_defs: must be an array');\n } else {\n const bindTos = new Set<string>();\n const outputFiles = new Set<string>();\n (n.source_defs as unknown[]).forEach((src, i) => {\n if (!src || typeof src !== 'object' || Array.isArray(src)) {\n errors.push(`source_defs[${i}]: must be an object`);\n } else {\n const s = src as Record<string, unknown>;\n if (typeof s.bindTo !== 'string' || !s.bindTo) {\n errors.push(`source_defs[${i}]: missing required \"bindTo\" property`);\n } else {\n if (bindTos.has(s.bindTo)) {\n errors.push(`source_defs[${i}]: bindTo \"${s.bindTo}\" is not unique across source_defs`);\n }\n bindTos.add(s.bindTo);\n }\n if (typeof s.outputFile !== 'string' || !s.outputFile) {\n errors.push(`source_defs[${i}]: missing required \"outputFile\" property`);\n } else {\n if (outputFiles.has(s.outputFile)) {\n errors.push(`source_defs[${i}]: outputFile \"${s.outputFile}\" is not unique across source_defs`);\n }\n outputFiles.add(s.outputFile);\n }\n if (s.optionalForCompletionGating != null && typeof s.optionalForCompletionGating !== 'boolean') {\n errors.push(`source_defs[${i}]: optionalForCompletionGating must be a boolean`);\n }\n }\n });\n }\n }\n\n if (n.view != null) {\n if (typeof n.view !== 'object' || Array.isArray(n.view)) {\n errors.push('view: must be an object');\n } else {\n const view = n.view as Record<string, unknown>;\n if (!Array.isArray(view.elements) || view.elements.length === 0) {\n errors.push('view.elements: required, must be a non-empty array');\n } else {\n (view.elements as Record<string, unknown>[]).forEach((elem, i) => {\n if (!elem || typeof elem !== 'object') { errors.push(`view.elements[${i}]: must be an object`); return; }\n if (!elem.kind || typeof elem.kind !== 'string') {\n errors.push(`view.elements[${i}].kind: required, must be a string`);\n } else if (!VALID_ELEMENT_KINDS.has(elem.kind as string)) {\n errors.push(`view.elements[${i}].kind: unknown kind \"${elem.kind}\". Valid: ${[...VALID_ELEMENT_KINDS].join(', ')}`);\n }\n if (elem.data != null && (typeof elem.data !== 'object' || Array.isArray(elem.data))) {\n errors.push(`view.elements[${i}].data: must be an object`);\n }\n });\n }\n if (view.layout != null && (typeof view.layout !== 'object' || Array.isArray(view.layout))) errors.push('view.layout: must be an object');\n if (view.features != null && (typeof view.features !== 'object' || Array.isArray(view.features))) errors.push('view.features: must be an object');\n }\n }\n\n return { ok: errors.length === 0, errors };\n}\n\n/**\n * Enrich source_defs with execution context for template interpolation and prompt rendering.\n * Pure function: no side effects, returns new enriched source_defs array.\n * \n * @param source_defs - Array of source definitions\n * @param context - Execution context containing requires, sourcesData, computed_values\n * @returns Promise resolving to a new array of source_defs with _projections attached.\n * Each _projections entry is the evaluated result of the corresponding projections expression.\n */\nasync function enrichSources(\n source_defs: any[] | undefined,\n context: {\n card_data?: Record<string, any>;\n requires?: Record<string, any>;\n sourcesData?: Record<string, any>; // unused post-projections, kept for call-site compat\n computed_values?: Record<string, any>; // unused post-projections, kept for call-site compat\n }\n): Promise<any[]> {\n if (!source_defs || source_defs.length === 0) return [];\n\n const evalCtx = {\n card_data: context.card_data ?? {},\n requires: context.requires ?? {},\n };\n\n return Promise.all(\n source_defs.map(async (src: any) => {\n const _projections: Record<string, unknown> = {};\n if (src.projections && typeof src.projections === 'object' && !Array.isArray(src.projections)) {\n for (const [key, expr] of Object.entries(src.projections as Record<string, string>)) {\n if (typeof expr === 'string' && expr.trim().length > 0) {\n try {\n _projections[key] = await jsonata(expr).evaluate(evalCtx);\n } catch {\n _projections[key] = undefined;\n }\n }\n }\n }\n return { ...src, _projections };\n })\n );\n}\n\nfunction enrichSourcesSync(\n source_defs: any[] | undefined,\n context: {\n card_data?: Record<string, any>;\n requires?: Record<string, any>;\n }\n): any[] {\n if (!source_defs || source_defs.length === 0) return [];\n\n const evalCtx = {\n card_data: context.card_data ?? {},\n requires: context.requires ?? {},\n };\n\n return source_defs.map((src: any) => {\n const _projections: Record<string, unknown> = {};\n if (src.projections && typeof src.projections === 'object' && !Array.isArray(src.projections)) {\n for (const [key, expr] of Object.entries(src.projections as Record<string, string>)) {\n if (typeof expr === 'string' && expr.trim().length > 0) {\n try {\n _projections[key] = jsonataSync(expr).evaluate(evalCtx);\n } catch {\n _projections[key] = undefined;\n }\n }\n }\n }\n return { ...src, _projections };\n });\n}\n\nexport const CardCompute = {\n run,\n runSync,\n eval: evalExpr,\n resolve,\n validate: validateNode,\n enrichSources,\n enrichSourcesSync,\n};\n\nexport {\n validateLiveCard,\n validateLiveCardSchema,\n validateLiveCardRuntimeExpressions,\n validateLiveCardDefinition,\n} from './schema-validator.js';\n\nexport default CardCompute;\n\n","\n export function createRequire() {\n return function(req) {\n if (req === './jsonata-sync.cjs') {\n return (typeof globalThis !== 'undefined' && globalThis.__jsonataSync)\n || (typeof globalThis !== 'undefined' && globalThis.jsonata);\n }\n throw new Error('Unsupported require in QuickJS bundle: ' + req);\n };\n }\n ","/**\n * schema-validator — Full JSON Schema validation for LiveCards nodes.\n *\n * Uses AJV to validate against the published live-cards.schema.json.\n * For a lightweight sync check without AJV, use `CardCompute.validate()` instead.\n *\n * @example\n * ```typescript\n * import { validateLiveCardSchema } from 'yaml-flow/card-compute';\n *\n * const result = validateLiveCardSchema(node);\n * if (!result.ok) console.error(result.errors);\n * ```\n */\n\nimport type { ValidationResult } from './index.js';\nimport liveCardsSchema from '../../schema/live-cards.schema.json';\nimport Ajv from 'ajv';\nimport addFormats from 'ajv-formats';\nimport jsonata from 'jsonata';\n\ntype AjvValidateFunction = {\n (data: unknown): boolean;\n errors?: Array<{ instancePath?: string; message?: string }> | null;\n};\n\nlet _compiled: AjvValidateFunction | null = null;\n\nconst KNOWN_NAMESPACES = [\n 'card_data',\n 'requires',\n 'fetched_sources',\n 'computed_values',\n 'source_defs',\n] as const;\n\ntype KnownNamespace = typeof KNOWN_NAMESPACES[number];\n\nconst NAMESPACE_REFERENCE_RE = /\\b(card_data|requires|fetched_sources|computed_values|source_defs)\\b/g;\nconst ROOT_PATH_NAMESPACE_RE = /^\\s*(card_data|requires|fetched_sources|computed_values|source_defs)(\\.|$)/;\n\nfunction referencedNamespaces(expression: string): Set<KnownNamespace> {\n const namespaces = new Set<KnownNamespace>();\n let match: RegExpExecArray | null;\n NAMESPACE_REFERENCE_RE.lastIndex = 0;\n while ((match = NAMESPACE_REFERENCE_RE.exec(expression)) !== null) {\n namespaces.add(match[1] as KnownNamespace);\n }\n return namespaces;\n}\n\nfunction parseRootPathNamespace(pathValue: string): KnownNamespace | null {\n const match = ROOT_PATH_NAMESPACE_RE.exec(pathValue);\n return match ? (match[1] as KnownNamespace) : null;\n}\n\nfunction validateJsonataExprWithNamespaces(\n expr: string,\n path: string,\n allowedNamespaces: Set<KnownNamespace>,\n errors: string[],\n): void {\n try {\n jsonata(expr);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n errors.push(`${path}: invalid JSONata expression (${message})`);\n return;\n }\n\n const usedNamespaces = referencedNamespaces(expr);\n for (const namespace of usedNamespaces) {\n if (!allowedNamespaces.has(namespace)) {\n errors.push(`${path}: disallowed namespace \"${namespace}\" in expression`);\n }\n }\n}\n\nfunction walkViewPathReferences(\n value: unknown,\n path: string,\n errors: string[],\n): void {\n if (Array.isArray(value)) {\n value.forEach((entry, index) => {\n walkViewPathReferences(entry, `${path}/${index}`, errors);\n });\n return;\n }\n\n if (typeof value === 'string') {\n const rootNamespace = parseRootPathNamespace(value);\n if (!rootNamespace) return;\n if (!new Set<KnownNamespace>(['card_data', 'requires', 'fetched_sources', 'computed_values']).has(rootNamespace)) {\n errors.push(`${path}: disallowed namespace \"${rootNamespace}\" in view reference`);\n }\n return;\n }\n\n if (!value || typeof value !== 'object') return;\n\n const record = value as Record<string, unknown>;\n for (const [key, next] of Object.entries(record)) {\n walkViewPathReferences(next, `${path}/${key}`, errors);\n }\n}\n\nfunction getValidator(): AjvValidateFunction {\n if (_compiled) return _compiled;\n const ajv = new Ajv({ allErrors: true });\n addFormats(ajv);\n _compiled = ajv.compile(liveCardsSchema);\n return _compiled;\n}\n\n/**\n * Validate a node against the full LiveCards JSON Schema (draft-07).\n *\n * Requires `ajv` and `ajv-formats` to be installed.\n * Returns the same `ValidationResult` shape as `CardCompute.validate()`.\n */\nexport function validateLiveCardSchema(\n node: unknown,\n): ValidationResult {\n const validate = getValidator();\n const valid = validate(node);\n\n const errors = (validate.errors ?? []).map(e => {\n const path = e.instancePath || '/';\n return `${path}: ${e.message ?? 'unknown error'}`;\n });\n\n // JSON Schema draft-07 cannot enforce per-property uniqueness across array items.\n // Check bindTo and outputFile uniqueness here after the AJV structural pass.\n if (node && typeof node === 'object' && !Array.isArray(node)) {\n const source_defs = (node as Record<string, unknown>).source_defs;\n if (Array.isArray(source_defs)) {\n const bindTos = new Set<string>();\n const outputFiles = new Set<string>();\n source_defs.forEach((src, i) => {\n if (!src || typeof src !== 'object' || Array.isArray(src)) return;\n const s = src as Record<string, unknown>;\n if (typeof s.bindTo === 'string' && s.bindTo) {\n if (bindTos.has(s.bindTo)) {\n errors.push(`/source_defs/${i}/bindTo: bindTo \"${s.bindTo}\" must be unique across all source_defs`);\n }\n bindTos.add(s.bindTo);\n }\n if (typeof s.outputFile === 'string' && s.outputFile) {\n if (outputFiles.has(s.outputFile)) {\n errors.push(`/source_defs/${i}/outputFile: outputFile \"${s.outputFile}\" must be unique across all source_defs`);\n }\n outputFiles.add(s.outputFile);\n }\n });\n }\n }\n\n if (!valid || errors.length > 0) return { ok: false, errors };\n return { ok: true, errors: [] };\n}\n\n/**\n * Validate JSONata expressions in compute[] by compiling with the same parser used at runtime.\n */\nexport function validateLiveCardRuntimeExpressions(\n node: unknown,\n): ValidationResult {\n const errors: string[] = [];\n\n if (!node || typeof node !== 'object' || Array.isArray(node)) {\n return { ok: true, errors: [] };\n }\n\n const asRecord = node as Record<string, unknown>;\n\n const compute = asRecord.compute;\n if (Array.isArray(compute)) {\n compute.forEach((step, i) => {\n if (!step || typeof step !== 'object' || Array.isArray(step)) return;\n const expr = (step as Record<string, unknown>).expr;\n if (typeof expr !== 'string' || expr.trim().length === 0) return;\n validateJsonataExprWithNamespaces(\n expr,\n `/compute/${i}/expr`,\n new Set<KnownNamespace>(['card_data', 'requires', 'fetched_sources', 'computed_values']),\n errors,\n );\n });\n }\n\n // Validate provides[].ref paths use a valid root namespace.\n const VALID_PROVIDES_SRC_NAMESPACES = new Set<KnownNamespace>([\n 'card_data', 'requires', 'fetched_sources', 'computed_values',\n ]);\n const provides = asRecord.provides;\n if (Array.isArray(provides)) {\n provides.forEach((entry, i) => {\n if (!entry || typeof entry !== 'object' || Array.isArray(entry)) return;\n const ref = (entry as Record<string, unknown>).ref;\n if (typeof ref !== 'string' || ref.trim().length === 0) return;\n const rootNamespace = parseRootPathNamespace(ref);\n if (rootNamespace === null) {\n errors.push(`/provides/${i}/ref: path \"${ref}\" must start with a valid namespace (${[...VALID_PROVIDES_SRC_NAMESPACES].join(', ')})`);\n } else if (!VALID_PROVIDES_SRC_NAMESPACES.has(rootNamespace)) {\n errors.push(`/provides/${i}/ref: disallowed namespace \"${rootNamespace}\" in path \"${ref}\" (valid: ${[...VALID_PROVIDES_SRC_NAMESPACES].join(', ')})`);\n }\n });\n }\n\n const view = asRecord.view;\n if (view && typeof view === 'object' && !Array.isArray(view)) {\n walkViewPathReferences(view, '/view', errors);\n }\n\n // Validate source_defs[i].projections values: each must be a JSONata expression rooted at\n // card_data or requires only. fetched_sources/computed_values/source_defs are not\n // valid here because sources run before those namespaces exist.\n const VALID_PROJECTION_NAMESPACES = new Set<KnownNamespace>(['card_data', 'requires']);\n const source_defs = asRecord.source_defs;\n if (Array.isArray(source_defs)) {\n source_defs.forEach((srcDef, i) => {\n if (!srcDef || typeof srcDef !== 'object' || Array.isArray(srcDef)) return;\n const projections = (srcDef as Record<string, unknown>).projections;\n if (!projections || typeof projections !== 'object' || Array.isArray(projections)) return;\n for (const [key, exprVal] of Object.entries(projections as Record<string, unknown>)) {\n if (typeof exprVal !== 'string' || exprVal.trim().length === 0) continue;\n validateJsonataExprWithNamespaces(\n exprVal,\n `/source_defs/${i}/projections/${key}`,\n VALID_PROJECTION_NAMESPACES,\n errors,\n );\n }\n });\n }\n\n return { ok: errors.length === 0, errors };\n}\n\nexport function validateLiveCard(\n node: unknown,\n): ValidationResult {\n return validateLiveCardDefinition(node);\n}\n\n/**\n * Full validation for live card definitions:\n * 1) JSON Schema structure/contract checks\n * 2) Runtime JSONata parser compatibility checks for compute expressions\n */\nexport function validateLiveCardDefinition(\n node: unknown,\n): ValidationResult {\n const schema = validateLiveCardSchema(node);\n if (!schema.ok) return schema;\n\n const runtime = validateLiveCardRuntimeExpressions(node);\n if (!runtime.ok) return { ok: false, errors: runtime.errors };\n\n return { ok: true, errors: [] };\n}\n","/**\n * board-live-cards-lib — Pure logic library for the board-live-cards CLI.\n *\n * Merged from:\n * board-live-cards-all-stores.ts\n * board-live-cards-lib-types.ts\n * board-live-cards-lib-board-status.ts\n * board-live-cards-lib-card-handler.ts\n * board-live-cards-cli-board-commands.ts\n * board-live-cards-cli-card-commands.ts\n * board-live-cards-cli-callbacks.ts\n *\n * Zero platform imports. All storage is injected via adapter interfaces.\n * Safe for Node, browser, and neutral (V8/PyMiniRacer) bundles.\n */\n\nimport type { KVStorage, BlobStorage, KindValueRef } from './storage-interface.js';\nimport { serializeRef } from './storage-interface.js';\nimport { parseExecutionRef, serializeExecutionRef } from './execution-interface.js';\nimport type { ExecutionRef } from './execution-interface.js';\nimport type { GraphEvent, TaskConfig, GraphConfig } from '../../event-graph/types.js';\nimport type { LiveGraph, LiveGraphSnapshot } from '../../continuous-event-graph/types.js';\nimport { schedule } from '../../continuous-event-graph/schedule.js';\nimport type { TaskHandlerFn } from '../../continuous-event-graph/reactive.js';\nimport { CardCompute } from '../../card-compute/index.js';\nimport type { ComputeNode, ComputeStep, ComputeSource } from '../../card-compute/index.js';\nexport type { DispatchResult, InvocationAdapter } from './process-interface.js';\n\n// ============================================================================\n// ---- from board-live-cards-all-stores.ts ----\n// ============================================================================\n\n// ============================================================================\n// Card store — types\n// ============================================================================\n\nexport interface LiveCard {\n id: string;\n [key: string]: unknown;\n}\n\nexport interface CardIndexEntry {\n /** Storage-specific address (file path, Cosmos doc id, localStorage key). */\n key: string;\n /** Checksum of card content — computed by the adapter at write time. */\n checksum: string;\n updatedAt: string;\n}\n\nexport type CardIndex = Record<string, CardIndexEntry>;\nexport type CardChecksumIndex = Record<string, string>;\n\n/**\n * Per-card entry stored in the card-upsert KV cache (one key per cardId).\n * Lives alongside the board journal — NOT inside the board snapshot.\n * Purpose: dedup gate to avoid redundant task-upsert journal entries.\n *\n * Write order: journal.append() THEN kv.write() — so a crash between the two\n * leaves the journal entry intact (board is correct) and the KV stale (next\n * upsert will see \"changed\" and re-append; addNode is idempotent in the board).\n */\nexport interface CardUpsertIndexEntry {\n /** Logical reference to the card blob — absolute path for fs, blob name for cloud. */\n blobRef: string;\n /** SHA-256 of stable-JSON-serialised taskConfig. Dedup key. */\n taskConfigHash: string;\n updatedAt: string;\n}\n\n// ============================================================================\n// CardStorageAdapter — injected by the caller\n// ============================================================================\n\nexport interface CardStorageAdapter {\n readIndex(): CardIndex | null;\n writeIndex(index: CardIndex): void;\n readCard(key: string): LiveCard | null;\n /** Write card content; returns checksum of what was written. */\n writeCard(key: string, card: LiveCard): string;\n cardExists(key: string): boolean;\n defaultCardKey(cardId: string): string;\n}\n\n// ============================================================================\n// CardStore — board one-cycle (read-only)\n// ============================================================================\n\nexport interface CardStore {\n readCard(id: string): LiveCard | null;\n readCardKey(id: string): string | null;\n readAllCards(): LiveCard[];\n readChecksumIndex(): CardChecksumIndex;\n changedSince(snapshotChecksumIndex: CardChecksumIndex): string[];\n}\n\n// ============================================================================\n// CardAdminStore — CLI write interface\n// ============================================================================\n\nexport interface CardUpsertValidation {\n ok: boolean;\n error?: string;\n}\n\nexport interface CardAdminStore extends CardStore {\n validateUpsert(id: string, cardKey: string): CardUpsertValidation;\n writeCard(id: string, card: LiveCard, cardKey?: string): void;\n patchCard(id: string, jsonPath: string, value: unknown): void;\n removeCard(id: string): void;\n readIndex(): CardIndex;\n}\n\n// ============================================================================\n// createCardStore — pure logic factory\n// ============================================================================\n\nexport function createCardStore(adapter: CardStorageAdapter, onWarn?: (msg: string) => void): CardAdminStore {\n function loadIndex(): CardIndex {\n return adapter.readIndex() ?? {};\n }\n\n function applyJsonPath(obj: Record<string, unknown>, jsonPath: string, value: unknown): Record<string, unknown> {\n const segments = String(jsonPath || '').split('.').filter(Boolean);\n if (segments.length === 0) {\n return (value && typeof value === 'object' && !Array.isArray(value))\n ? value as Record<string, unknown>\n : { value };\n }\n\n const out: Record<string, unknown> = { ...obj };\n let target: Record<string, unknown> = out;\n for (let i = 0; i < segments.length - 1; i++) {\n const key = segments[i];\n const cur = target[key];\n const next = (cur && typeof cur === 'object' && !Array.isArray(cur))\n ? { ...(cur as Record<string, unknown>) }\n : {};\n target[key] = next;\n target = next;\n }\n target[segments[segments.length - 1]] = value;\n return out;\n }\n\n return {\n readCard(id: string): LiveCard | null {\n const entry = loadIndex()[id];\n if (!entry || !adapter.cardExists(entry.key)) return null;\n return adapter.readCard(entry.key);\n },\n\n readCardKey(id: string): string | null {\n return loadIndex()[id]?.key ?? null;\n },\n\n readAllCards(): LiveCard[] {\n const cards: LiveCard[] = [];\n for (const [id, entry] of Object.entries(loadIndex())) {\n if (!adapter.cardExists(entry.key)) continue;\n const card = adapter.readCard(entry.key);\n if (card) cards.push(card);\n else onWarn?.(`[card-store] could not read card \"${id}\" at key \"${entry.key}\"`);\n }\n return cards;\n },\n\n readChecksumIndex(): CardChecksumIndex {\n const result: CardChecksumIndex = {};\n for (const [id, entry] of Object.entries(loadIndex())) result[id] = entry.checksum;\n return result;\n },\n\n changedSince(snapshotChecksumIndex: CardChecksumIndex): string[] {\n const localIndex = loadIndex();\n const changed: string[] = [];\n for (const [id, entry] of Object.entries(localIndex)) {\n if (snapshotChecksumIndex[id] !== entry.checksum) changed.push(id);\n }\n for (const id of Object.keys(snapshotChecksumIndex)) {\n if (!localIndex[id]) changed.push(id);\n }\n return changed;\n },\n\n validateUpsert(id: string, cardKey: string): CardUpsertValidation {\n const index = loadIndex();\n const existingById = index[id];\n const existingByKey = Object.entries(index).find(([, e]) => e.key === cardKey);\n if (existingById && existingById.key !== cardKey)\n return { ok: false, error: `Card id \"${id}\" is already mapped to key \"${existingById.key}\", cannot remap to \"${cardKey}\"` };\n if (existingByKey && existingByKey[0] !== id)\n return { ok: false, error: `Key \"${cardKey}\" is already mapped to card id \"${existingByKey[0]}\", cannot remap to \"${id}\"` };\n return { ok: true };\n },\n\n writeCard(id: string, card: LiveCard, cardKey?: string): void {\n const index = loadIndex();\n const resolvedKey = cardKey ?? index[id]?.key ?? adapter.defaultCardKey(id);\n const checksum = adapter.writeCard(resolvedKey, card);\n index[id] = { key: resolvedKey, checksum, updatedAt: new Date().toISOString() };\n adapter.writeIndex(index);\n },\n\n patchCard(id: string, jsonPath: string, value: unknown): void {\n const index = loadIndex();\n const entry = index[id];\n if (!entry || !adapter.cardExists(entry.key)) {\n throw new Error(`card \"${id}\" not found`);\n }\n const current = adapter.readCard(entry.key);\n if (!current || typeof current !== 'object' || Array.isArray(current)) {\n throw new Error(`card \"${id}\" is not patchable`);\n }\n const next = applyJsonPath(current as Record<string, unknown>, jsonPath, value) as LiveCard;\n const checksum = adapter.writeCard(entry.key, next);\n index[id] = { key: entry.key, checksum, updatedAt: new Date().toISOString() };\n adapter.writeIndex(index);\n },\n\n removeCard(id: string): void {\n const index = loadIndex();\n if (!index[id]) return;\n delete index[id];\n adapter.writeIndex(index);\n },\n\n readIndex(): CardIndex {\n return loadIndex();\n },\n };\n}\n\n// ============================================================================\n// FetchedSourcesStore\n// ============================================================================\n\nexport interface FetchedSourcesStore {\n /** Read committed source content. Returns parsed JSON or raw string; null if not yet committed. */\n readSourceData(cardId: string, outputFile: string): unknown;\n /** Stage incoming source data under deliveryToken. resolveRef converts the ref to content bytes. */\n ingestSourceDataStaged(cardId: string, outputFile: string, ref: KindValueRef, deliveryToken: string): void;\n /** Move staged data to live position. Returns false if staged entry is absent (stale delivery). */\n commitSourceData(cardId: string, outputFile: string, deliveryToken: string): boolean;\n /** True if live (committed) source data exists for this outputFile. */\n hasSource(cardId: string, outputFile: string): boolean;\n}\n\nexport function createFetchedSourcesStore(\n blob: BlobStorage,\n resolveRef: (ref: KindValueRef) => string,\n): FetchedSourcesStore {\n return {\n readSourceData(cardId, outputFile): unknown {\n const raw = blob.read(`${cardId}/${outputFile}`);\n if (raw == null) return null;\n const trimmed = raw.trim();\n if (!trimmed) return null;\n try { return JSON.parse(trimmed); } catch { return trimmed; }\n },\n ingestSourceDataStaged(cardId, outputFile, ref, deliveryToken): void {\n const content = resolveRef(ref);\n blob.write(`${cardId}/.staged/${deliveryToken}/${outputFile}`, content);\n },\n commitSourceData(cardId, outputFile, deliveryToken): boolean {\n const stagedKey = `${cardId}/.staged/${deliveryToken}/${outputFile}`;\n const content = blob.read(stagedKey);\n if (content == null) return false;\n blob.write(`${cardId}/${outputFile}`, content);\n blob.remove(stagedKey);\n return true;\n },\n hasSource(cardId, outputFile): boolean {\n return blob.exists(`${cardId}/${outputFile}`);\n },\n };\n}\n\n// ============================================================================\n// Journal store — types\n// ============================================================================\n\nexport interface JournalEntry {\n id: string;\n event: GraphEvent;\n}\n\nexport interface JournalStorageAdapter {\n readAllEntries(): JournalEntry[];\n appendEntry(entry: JournalEntry): void;\n generateId(): string;\n}\n\nexport interface JournalStore {\n readEntriesAfterCursor(cursor: string): { events: GraphEvent[]; newCursor: string };\n pendingCount(cursor: string): number;\n}\n\nexport interface JournalAdminStore extends JournalStore {\n appendEvent(event: GraphEvent): void;\n}\n\nexport function createJournalStore(adapter: JournalStorageAdapter): JournalAdminStore {\n function entriesAfterCursor(cursor: string): JournalEntry[] {\n const all = adapter.readAllEntries();\n if (!cursor) return all;\n const idx = all.findIndex(e => e.id === cursor);\n return idx === -1 ? all : all.slice(idx + 1);\n }\n\n return {\n readEntriesAfterCursor(cursor: string): { events: GraphEvent[]; newCursor: string } {\n const entries = entriesAfterCursor(cursor);\n if (entries.length === 0) return { events: [], newCursor: cursor };\n return { events: entries.map(e => e.event), newCursor: entries[entries.length - 1].id };\n },\n\n pendingCount(cursor: string): number {\n return entriesAfterCursor(cursor).length;\n },\n\n appendEvent(event: GraphEvent): void {\n adapter.appendEntry({ id: adapter.generateId(), event });\n },\n };\n}\n\n// ============================================================================\n// ExecutionRequest store\n// ============================================================================\n\nexport interface ExecutionRequestEntry {\n taskKind: string;\n payload: unknown;\n}\n\nexport interface ExecutionRequestStore {\n appendEntries(journalId: string, entries: ExecutionRequestEntry[]): void;\n dispatchEntriesForJournalId(journalId: string, processorFn: (entry: ExecutionRequestEntry) => void): void;\n}\n\nexport function createExecutionRequestStore(\n kv: KVStorage,\n onDispatchFailed: (entry: ExecutionRequestEntry, error: string) => void,\n): ExecutionRequestStore {\n return {\n appendEntries(journalId: string, entries: ExecutionRequestEntry[]): void {\n if (!journalId || entries.length === 0) return;\n const existing = (kv.read(journalId) as ExecutionRequestEntry[] | null) ?? [];\n kv.write(journalId, [...existing, ...entries]);\n },\n\n dispatchEntriesForJournalId(journalId: string, processorFn: (entry: ExecutionRequestEntry) => void): void {\n if (!journalId) return;\n const entries = kv.read(journalId) as ExecutionRequestEntry[] | null;\n if (!entries || entries.length === 0) return;\n for (const entry of entries) {\n try { processorFn(entry); } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n try { onDispatchFailed(entry, msg); } catch { /* guard against failure in error handler */ }\n }\n }\n kv.delete(journalId);\n },\n };\n}\n\n// ============================================================================\n// StateSnapshot store\n// ============================================================================\n\nexport const SNAPSHOT_SCHEMA_VERSION_V1 = 'v1';\n\nexport const BOARD_GRAPH_KEY = 'board/graph';\nexport const BOARD_LAST_JOURNAL_PROCESSED_ID_KEY = 'board/lastJournalProcessedId';\n\nexport function cardRuntimeKey(cardId: string): string {\n return `cards/${cardId}/runtime`;\n}\n\nexport function cardFetchedSourcesManifestKey(cardId: string): string {\n return `cards/${cardId}/fetched-sources-manifest`;\n}\n\nexport interface CardRuntimeSnapshot {\n _sources: Record<string, { lastRequestedAt?: string; lastFetchedAt?: string; queueRequestedAt?: string }>;\n _lastExecutionCount?: number;\n}\n\nexport interface CardRuntimeStore {\n readRuntime(cardId: string): CardRuntimeSnapshot;\n writeRuntime(cardId: string, state: CardRuntimeSnapshot): void;\n}\n\nexport function createCardRuntimeStore(kv: KVStorage): CardRuntimeStore {\n return {\n readRuntime(cardId) {\n return (kv.read(cardRuntimeKey(cardId)) as CardRuntimeSnapshot | null) ?? { _sources: {} };\n },\n writeRuntime(cardId, state) {\n kv.write(cardRuntimeKey(cardId), state);\n },\n };\n}\n\nexport interface FetchedSourceManifestEntry {\n outputFile: string;\n blobRef: string;\n fetchedAt: string;\n sourceChecksum?: string;\n contentType?: string;\n sizeBytes?: number;\n}\n\nexport interface StateSnapshotReadView {\n version: string | null;\n values: Record<string, unknown>;\n}\n\nexport interface StateSnapshotCommitEnvelope {\n schemaVersion: typeof SNAPSHOT_SCHEMA_VERSION_V1;\n expectedVersion: string | null;\n commitId: string;\n committedAt: string;\n deleteKeys: string[];\n shallowMerge: Record<string, unknown>;\n}\n\nexport interface StateSnapshotCommitSuccess {\n ok: true;\n newVersion: string;\n}\n\nexport interface StateSnapshotCommitVersionMismatch {\n ok: false;\n reason: 'version-mismatch';\n currentVersion: string | null;\n}\n\nexport type StateSnapshotCommitResult =\n | StateSnapshotCommitSuccess\n | StateSnapshotCommitVersionMismatch;\n\nexport interface StateSnapshotStorageAdapter {\n readValues(scopeId: string): StateSnapshotReadView;\n writeValues(scopeId: string, nextValues: Record<string, unknown>, deletedKeys: string[]): string;\n}\n\nexport interface StateSnapshotStore {\n readSnapshot(scopeId: string): StateSnapshotReadView;\n commitSnapshot(scopeId: string, envelope: StateSnapshotCommitEnvelope): StateSnapshotCommitResult;\n}\n\nexport function applyStateSnapshotCommitEnvelope(\n current: Record<string, unknown>,\n envelope: Pick<StateSnapshotCommitEnvelope, 'deleteKeys' | 'shallowMerge'>,\n): Record<string, unknown> {\n const next: Record<string, unknown> = { ...current };\n for (const key of envelope.deleteKeys) {\n delete next[key];\n }\n return { ...next, ...envelope.shallowMerge };\n}\n\nexport function createStateSnapshotStore(adapter: StateSnapshotStorageAdapter): StateSnapshotStore {\n return {\n readSnapshot(scopeId: string): StateSnapshotReadView {\n return adapter.readValues(scopeId);\n },\n\n commitSnapshot(scopeId: string, envelope: StateSnapshotCommitEnvelope): StateSnapshotCommitResult {\n if (envelope.schemaVersion !== SNAPSHOT_SCHEMA_VERSION_V1) {\n throw new Error(`Unsupported snapshot schema version: ${envelope.schemaVersion}`);\n }\n const current = adapter.readValues(scopeId);\n if (current.version !== envelope.expectedVersion) {\n return { ok: false, reason: 'version-mismatch', currentVersion: current.version };\n }\n const nextValues = applyStateSnapshotCommitEnvelope(current.values, envelope);\n const newVersion = adapter.writeValues(scopeId, nextValues, envelope.deleteKeys);\n return { ok: true, newVersion };\n },\n };\n}\n\n// ============================================================================\n// BoardConfigStore\n// ============================================================================\n\nexport interface BoardConfigStore {\n readTaskExecutorRef(): ExecutionRef | undefined;\n writeTaskExecutorRef(ref: ExecutionRef): void;\n readChatHandlerRef(): ExecutionRef | undefined;\n writeChatHandlerRef(ref: ExecutionRef): void;\n readCardStoreRef(): string | null;\n writeCardStoreRef(ref: string): void;\n readOutputsStoreRef(): string | null;\n writeOutputsStoreRef(ref: string): void;\n /** @deprecated use readChatHandlerRef */\n readChatHandler(): string | undefined;\n /** @deprecated use writeChatHandlerRef */\n writeChatHandler(value: string): void;\n}\n\nexport function createBoardConfigStore(kv: KVStorage): BoardConfigStore {\n function readKey(key: string): string | null {\n const v = kv.read(key);\n if (v == null) return null;\n return typeof v === 'string' ? v : JSON.stringify(v);\n }\n\n return {\n readTaskExecutorRef(): ExecutionRef | undefined {\n const raw = readKey('task-executor');\n if (!raw?.trim()) return undefined;\n return parseExecutionRef(raw.trim());\n },\n\n writeTaskExecutorRef(ref: ExecutionRef): void {\n kv.write('task-executor', serializeExecutionRef(ref));\n },\n\n readChatHandlerRef(): ExecutionRef | undefined {\n const raw = readKey('chat-handler');\n if (!raw?.trim()) return undefined;\n return parseExecutionRef(raw.trim());\n },\n\n writeChatHandlerRef(ref: ExecutionRef): void {\n kv.write('chat-handler', serializeExecutionRef(ref));\n },\n\n readCardStoreRef(): string | null {\n return readKey('card-store-ref');\n },\n\n writeCardStoreRef(ref: string): void {\n kv.write('card-store-ref', ref);\n },\n\n readOutputsStoreRef(): string | null {\n return readKey('outputs-store-ref');\n },\n\n writeOutputsStoreRef(ref: string): void {\n kv.write('outputs-store-ref', ref);\n },\n\n readChatHandler(): string | undefined {\n return readKey('chat-handler')?.trim() || undefined;\n },\n\n writeChatHandler(value: string): void {\n kv.write('chat-handler', value);\n },\n };\n}\n\n// ============================================================================\n// PublishedOutputsStore\n// ============================================================================\n\nexport type OutputStoreEvent =\n | { kind: 'computed_values'; cardId: string; values: Record<string, unknown> }\n | { kind: 'data_object'; key: string; payload: unknown }\n | { kind: 'status'; status: unknown };\n\nexport interface PublishedOutputsStore {\n writeComputedValues(cardId: string, values: Record<string, unknown>): void;\n readComputedValues(cardId: string): unknown | null;\n readAllComputedValues(): Record<string, unknown>;\n writeDataObjects(data: Record<string, unknown>): void;\n readDataObject(key: string): unknown | null;\n readAllDataObjects(): Record<string, unknown>;\n writeStatusSnapshot(status: unknown): void;\n readStatusSnapshot(): unknown | null;\n}\n\nexport function createPublishedOutputsStore(kv: KVStorage): PublishedOutputsStore {\n return {\n writeComputedValues(cardId, values) {\n kv.write(`cards/${cardId}/computed_values`, values);\n },\n readComputedValues(cardId) { return kv.read(`cards/${cardId}/computed_values`); },\n readAllComputedValues() {\n const out: Record<string, unknown> = {};\n for (const key of kv.listKeys('cards/')) {\n const m = key.match(/^cards\\/([^/]+)\\/computed_values$/);\n if (m) out[m[1]] = kv.read(key);\n }\n return out;\n },\n writeDataObjects(data) {\n for (const [token, payload] of Object.entries(data)) {\n if (!token) continue;\n kv.write(`data-objects/${token}`, payload);\n }\n },\n readDataObject(key) { return kv.read(`data-objects/${key}`); },\n readAllDataObjects() {\n const out: Record<string, unknown> = {};\n for (const key of kv.listKeys('data-objects/')) {\n out[key.slice('data-objects/'.length)] = kv.read(key);\n }\n return out;\n },\n writeStatusSnapshot(status) {\n kv.write('status', status);\n },\n readStatusSnapshot() { return kv.read('status'); },\n };\n}\n\n// ============================================================================\n// Future-facing blob and read-model cache interfaces\n// ============================================================================\n\nexport interface FetchedSourcesBlobStore {\n readBlob(blobRef: string): Promise<unknown | null>;\n}\n\nexport interface PublishedBoardStatusCache {\n writeStatusBestEffort(scopeId: string, statusPayload: unknown): Promise<void>;\n readStatus(scopeId: string): Promise<unknown | null>;\n}\n\n// ============================================================================\n// ---- from board-live-cards-lib-types.ts ----\n// ============================================================================\n\nexport interface SourceRuntimeEntry {\n lastRequestedAt?: string;\n lastFetchedAt?: string;\n lastError?: string;\n queueRequestedAt?: string;\n}\n\nexport type FetchRuntimeEntry = SourceRuntimeEntry;\n\nexport interface SourceTokenPayload {\n cbk: string;\n rg: string;\n br: string;\n cid: string;\n b: string;\n d: string;\n cs?: string;\n rqt: string;\n}\n\nexport function isSourceInFlight(entry: FetchRuntimeEntry | undefined): boolean {\n if (!entry?.lastRequestedAt) return false;\n return !entry.lastFetchedAt || entry.lastFetchedAt < entry.lastRequestedAt;\n}\n\nexport function decideSourceAction(\n entry: FetchRuntimeEntry | undefined,\n queueRequestedAt: string,\n): 'dispatch' | 'in-flight' | 'idle' {\n if (!entry?.lastRequestedAt) return 'dispatch';\n const inFlight = isSourceInFlight(entry);\n if (inFlight) return 'in-flight';\n if (!entry.lastFetchedAt) return 'dispatch';\n if (entry.lastFetchedAt < queueRequestedAt) return 'dispatch';\n return 'idle';\n}\n\nexport function nextEntryAfterFetchDelivery<T extends FetchRuntimeEntry>(\n entry: T,\n fetchedAt: string,\n): T {\n const next = { ...entry, lastFetchedAt: fetchedAt };\n delete (next as FetchRuntimeEntry).lastError;\n return next as T;\n}\n\nexport function nextEntryAfterFetchFailure<T extends FetchRuntimeEntry>(\n entry: T,\n reason: string,\n): T {\n const next = { ...entry, lastError: reason };\n delete (next as FetchRuntimeEntry).lastFetchedAt;\n return next as T;\n}\n\nexport interface CardHandlerAdapters {\n cardStore: CardStore;\n cardRuntimeStore: CardRuntimeStore;\n fetchedSourcesStore: FetchedSourcesStore;\n outputStore: PublishedOutputsStore;\n executionRequestStore: ExecutionRequestStore;\n}\n\nexport interface CommandResponse<T extends Record<string, unknown> = Record<string, unknown>> {\n status: 'success' | 'error';\n data: T;\n error?: string;\n}\n\nexport const Resp = {\n success<T extends Record<string, unknown>>(data: T): CommandResponse<T> {\n return { status: 'success', data };\n },\n\n error(error: string, data: Record<string, unknown> = {}): CommandResponse {\n return { status: 'error', data, error };\n },\n\n getStatus(r: CommandResponse): 'success' | 'error' {\n return r.status;\n },\n\n getData<T extends Record<string, unknown>>(r: CommandResponse<T>): T {\n return r.data;\n },\n\n isSuccess(r: CommandResponse): boolean {\n return r.status === 'success';\n },\n} as const;\n\n// ============================================================================\n// ---- from board-live-cards-lib-board-status.ts ----\n// ============================================================================\n\nexport interface BoardStatusCard {\n name: string;\n status: string;\n error?: {\n message: string;\n code?: string;\n at?: string;\n source?: 'task-runtime' | 'source-fetch' | 'timeout' | 'unknown';\n };\n requires: string[];\n requires_satisfied: string[];\n requires_missing: string[];\n provides_declared: string[];\n provides_runtime: string[];\n blocked_by: string[];\n unblocks: string[];\n runtime: {\n attempt_count: number;\n restart_count: number;\n in_progress_since: string | null;\n last_transition_at: string | null;\n last_completed_at: string | null;\n last_restarted_at: string | null;\n status_age_ms: number | null;\n };\n}\n\nexport interface BoardStatusObject {\n schema_version: 'v1';\n meta: {\n board: {\n path: string;\n };\n };\n summary: {\n card_count: number;\n completed: number;\n eligible: number;\n pending: number;\n blocked: number;\n unresolved: number;\n failed?: number;\n in_progress?: number;\n orphan_cards?: number;\n topology?: {\n edge_count: number;\n max_fan_out_card: string | null;\n max_fan_out: number;\n };\n };\n cards: BoardStatusCard[];\n}\n\nexport function buildBoardStatusObject(boardPath: string, live: LiveGraph): BoardStatusObject {\n const taskState = live.state.tasks;\n const taskConfig = live.config.tasks;\n const cardNames = Object.keys(taskState);\n const sched = schedule(live);\n\n const statusCounts = {\n completed: 0,\n failed: 0,\n in_progress: 0,\n pending: 0,\n blocked: 0,\n unresolved: 0,\n };\n\n const waitingByCard = new Map<string, string[]>();\n for (const p of sched.pending) waitingByCard.set(p.taskName, p.waitingOn);\n for (const u of sched.unresolved) waitingByCard.set(u.taskName, u.missingTokens);\n for (const b of sched.blocked) waitingByCard.set(b.taskName, b.failedTokens);\n\n const dependentsByToken = new Map<string, string[]>();\n for (const [name, cfg] of Object.entries(taskConfig)) {\n for (const token of cfg.requires ?? []) {\n const dependents = dependentsByToken.get(token) ?? [];\n dependents.push(name);\n dependentsByToken.set(token, dependents);\n }\n }\n\n const cards: BoardStatusCard[] = cardNames.sort().map((name) => {\n const state = taskState[name] as {\n status: string;\n data?: Record<string, unknown>;\n error?: string;\n startedAt?: string;\n completedAt?: string;\n failedAt?: string;\n lastUpdated?: string;\n executionCount?: number;\n retryCount?: number;\n };\n const cfg = taskConfig[name] ?? { requires: [], provides: [] };\n\n if (state.status === 'completed') statusCounts.completed += 1;\n else if (state.status === 'failed') statusCounts.failed += 1;\n else if (state.status === 'in-progress') statusCounts.in_progress += 1;\n\n const requires = cfg.requires ?? [];\n const provides = cfg.provides ?? [];\n const runtimeKeys = Object.keys(state.data ?? {}).sort();\n const requiresSatisfied = requires.filter(token => live.state.availableOutputs.includes(token));\n const requiresMissing = requires.filter(token => !live.state.availableOutputs.includes(token));\n const blockedBy = waitingByCard.get(name) ?? requiresMissing;\n\n const unblocks = new Set<string>();\n for (const token of provides) {\n for (const dependent of dependentsByToken.get(token) ?? []) {\n if (dependent !== name) unblocks.add(dependent);\n }\n }\n\n const lastFailureAt = state.failedAt;\n const error = state.error\n ? {\n message: state.error,\n code: 'TASK_FAILED',\n at: lastFailureAt,\n source: 'task-runtime' as const,\n }\n : undefined;\n\n return {\n name,\n status: state.status,\n error,\n requires,\n requires_satisfied: requiresSatisfied,\n requires_missing: requiresMissing,\n provides_declared: provides,\n provides_runtime: runtimeKeys,\n blocked_by: blockedBy,\n unblocks: Array.from(unblocks).sort(),\n runtime: {\n attempt_count: state.executionCount ?? 0,\n restart_count: state.retryCount ?? 0,\n in_progress_since: state.status === 'in-progress' ? (state.startedAt ?? null) : null,\n last_transition_at: state.lastUpdated ?? null,\n last_completed_at: state.completedAt ?? null,\n last_restarted_at: state.startedAt ?? null,\n // Keep status snapshots immutable across reads: this field must not depend on wall-clock pull time.\n status_age_ms: state.lastUpdated ? 0 : null,\n },\n };\n });\n\n statusCounts.pending = sched.pending.length;\n statusCounts.blocked = sched.blocked.length;\n statusCounts.unresolved = sched.unresolved.length;\n\n const fanOut = cards\n .map(c => ({ name: c.name, fanOut: c.unblocks.length }))\n .sort((a, b) => b.fanOut - a.fanOut || a.name.localeCompare(b.name));\n const maxFanOut = fanOut.length > 0 ? fanOut[0] : { name: null, fanOut: 0 };\n\n const allRequires = new Set<string>();\n for (const cfg of Object.values(taskConfig)) {\n for (const r of cfg.requires ?? []) allRequires.add(r);\n }\n let orphanCards = 0;\n for (const [name, cfg] of Object.entries(taskConfig)) {\n const requiresNone = (cfg.requires ?? []).length === 0;\n const providesList = cfg.provides ?? [];\n const feedsAny = providesList.some(p => (dependentsByToken.get(p) ?? []).some(d => d !== name));\n if (requiresNone && !feedsAny) orphanCards += 1;\n }\n\n return {\n schema_version: 'v1',\n meta: { board: { path: boardPath } },\n summary: {\n card_count: cardNames.length,\n completed: statusCounts.completed,\n eligible: sched.eligible.length,\n pending: statusCounts.pending,\n blocked: statusCounts.blocked,\n unresolved: statusCounts.unresolved,\n failed: statusCounts.failed,\n in_progress: statusCounts.in_progress,\n orphan_cards: orphanCards,\n topology: {\n edge_count: Array.from(allRequires).length,\n max_fan_out_card: maxFanOut.name,\n max_fan_out: maxFanOut.fanOut,\n },\n },\n cards,\n };\n}\n\n// ============================================================================\n// ---- from board-live-cards-lib-card-handler.ts ----\n// ============================================================================\n\nfunction nowHighRes(): string {\n return new Date().toISOString();\n}\n\nexport function createCardHandlerFn(\n baseRef: KindValueRef,\n journalId: string,\n adapters: CardHandlerAdapters,\n taskCompletedFn: (taskName: string, data: Record<string, unknown>) => void,\n _taskFailedFn: (taskName: string, error: string) => void,\n writeComputedValuesFn?: (cardId: string, values: Record<string, unknown>) => void,\n writeDataObjectsFn?: (data: Record<string, unknown>) => void,\n notifyCardFn?: (cardId: string, card: LiveCard) => void,\n): TaskHandlerFn {\n return async (input) => {\n const pendingRequests: ExecutionRequestEntry[] = [];\n const card = adapters.cardStore.readCard(input.nodeId);\n if (!card) return 'task-initiate-failure';\n\n const cardId = card.id as string;\n // Notify on fresh evaluations only (not source-fetch callbacks).\n if (!input.update) notifyCardFn?.(cardId, card);\n const cardState = (card.card_data ?? {}) as Record<string, unknown>;\n const allSources: ComputeSource[] = (card.source_defs ?? []) as ComputeSource[];\n const requiredSources = allSources.filter(s => s.optionalForCompletionGating !== true);\n\n let state: CardRuntimeSnapshot = adapters.cardRuntimeStore.readRuntime(cardId);\n let dirty = false;\n\n const flush = (): void => {\n if (!dirty) return;\n adapters.cardRuntimeStore.writeRuntime(cardId, state);\n dirty = false;\n };\n\n const getSourceEntry = (outputFile: string): SourceRuntimeEntry =>\n ({ ...(state._sources[outputFile] ?? {}) });\n const setSourceEntry = (outputFile: string, entry: SourceRuntimeEntry): void => {\n state._sources[outputFile] = entry; dirty = true;\n };\n\n const currentExecutionCount = input.taskState?.executionCount ?? 0;\n const lastExecCount = state._lastExecutionCount;\n if (typeof lastExecCount === 'number' && lastExecCount !== currentExecutionCount) {\n state._sources = {}; dirty = true;\n }\n if (lastExecCount !== currentExecutionCount) {\n state._lastExecutionCount = currentExecutionCount; dirty = true;\n }\n\n if (input.update) {\n const u = input.update;\n const outputFile = u.outputFile as string;\n if (outputFile) {\n const entry = getSourceEntry(outputFile);\n if (u.failure) {\n setSourceEntry(outputFile, nextEntryAfterFetchFailure(entry, (u.reason as string | undefined) ?? 'unknown'));\n } else {\n const incomingRqt = u.rqt as string;\n if (!entry.lastFetchedAt || incomingRqt > entry.lastFetchedAt) {\n const deliveryToken = typeof u.deliveryToken === 'string' ? u.deliveryToken : undefined;\n if (deliveryToken) {\n adapters.fetchedSourcesStore.commitSourceData(cardId, outputFile, deliveryToken);\n }\n setSourceEntry(outputFile, nextEntryAfterFetchDelivery(entry, incomingRqt));\n }\n }\n flush();\n }\n }\n\n const sourcesData: Record<string, unknown> = {};\n for (const src of allSources) {\n if (src.outputFile) {\n const content = adapters.fetchedSourcesStore.readSourceData(cardId, src.outputFile as string);\n if (content !== null) {\n sourcesData[src.bindTo] = content;\n }\n }\n }\n\n const requires: Record<string, unknown> = {};\n for (const [token, taskData] of Object.entries(input.state ?? {})) {\n if (taskData !== null && typeof taskData === 'object' && !Array.isArray(taskData)) {\n const unwrapped = (taskData as Record<string, unknown>)[token];\n requires[token] = unwrapped !== undefined ? unwrapped : taskData;\n } else {\n requires[token] = taskData;\n }\n }\n\n const computeNode: ComputeNode = {\n id: cardId,\n card_data: { ...cardState },\n requires,\n source_defs: allSources,\n compute: card.compute as ComputeStep[] | undefined,\n };\n computeNode._sourcesData = sourcesData;\n if (card.compute) {\n CardCompute.runSync(computeNode, { sourcesData });\n }\n\n (writeComputedValuesFn ?? adapters.outputStore.writeComputedValues.bind(adapters.outputStore))(cardId, computeNode.computed_values ?? {});\n\n const enrichedCard = { ...card };\n const enrichedSources = CardCompute.enrichSourcesSync(\n Array.isArray(card.source_defs) ? card.source_defs : undefined,\n {\n card_data: card.card_data as Record<string, unknown>,\n requires,\n },\n );\n\n const dir = baseRef.value;\n enrichedCard.source_defs = Array.isArray(enrichedSources)\n ? enrichedSources.map(src => ({\n ...src,\n boardDir: typeof src.boardDir === 'string' && src.boardDir ? src.boardDir : dir,\n }))\n : enrichedSources;\n\n const now = nowHighRes();\n const runQueuedAt = input.update ? undefined : now;\n\n const undeliveredRequired = requiredSources.filter(s => {\n const outputFile = s.outputFile;\n if (typeof outputFile !== 'string' || !outputFile) return true;\n let entry = getSourceEntry(outputFile);\n if (runQueuedAt) {\n entry = { ...entry, queueRequestedAt: runQueuedAt };\n setSourceEntry(outputFile, entry);\n }\n const qrt = entry.queueRequestedAt ?? entry.lastRequestedAt ?? now;\n const action = decideSourceAction(entry, qrt);\n if (action === 'in-flight') return false;\n return action === 'dispatch';\n });\n\n flush();\n\n if (undeliveredRequired.length > 0) {\n let stampedAny = false;\n let dispatchRqt = now;\n for (const src of undeliveredRequired) {\n const outputFile = src.outputFile;\n if (typeof outputFile !== 'string' || !outputFile) continue;\n const entry = getSourceEntry(outputFile);\n const queuedAt = entry.queueRequestedAt ?? now;\n setSourceEntry(outputFile, { ...entry, lastRequestedAt: queuedAt });\n dispatchRqt = queuedAt;\n stampedAny = true;\n }\n if (stampedAny) flush();\n if (!stampedAny) return 'task-initiated';\n\n pendingRequests.push({ taskKind: 'source-fetch', payload: { boardRef: serializeRef(baseRef), enrichedCard: enrichedCard as Record<string, unknown>, callbackToken: input.callbackToken, rqt: dispatchRqt } });\n adapters.executionRequestStore.appendEntries(journalId, pendingRequests);\n return 'task-initiated';\n }\n\n const providesBindings = (card.provides ?? []) as { bindTo: string; ref: string }[];\n const data: Record<string, unknown> = {};\n for (const { bindTo, ref } of providesBindings) {\n data[bindTo] = CardCompute.resolve(computeNode, ref);\n }\n\n (writeDataObjectsFn ?? adapters.outputStore.writeDataObjects.bind(adapters.outputStore))(data);\n\n const undeliveredOptional = allSources.filter(s => {\n if (s.optionalForCompletionGating !== true) return false;\n const entry = getSourceEntry(s.outputFile as string);\n if (!entry.lastRequestedAt) return true;\n if (!entry.lastFetchedAt) return true;\n return entry.lastFetchedAt <= entry.lastRequestedAt;\n });\n if (undeliveredOptional.length > 0) {\n pendingRequests.push({ taskKind: 'source-fetch', payload: { boardRef: serializeRef(baseRef), enrichedCard: enrichedCard as Record<string, unknown>, callbackToken: input.callbackToken, rqt: now } });\n }\n\n taskCompletedFn(input.nodeId, data);\n if (pendingRequests.length > 0) adapters.executionRequestStore.appendEntries(journalId, pendingRequests);\n return 'task-initiated';\n };\n}\n\n// ============================================================================\n// ---- pure constants / codecs lifted from board-live-cards-cli.ts ----\n// ============================================================================\n\nexport const EMPTY_CONFIG: GraphConfig = { settings: { completion: 'manual', refreshStrategy: 'data-changed' }, tasks: {} } as GraphConfig;\n\n/** Envelope stored in the snapshot store — wraps the LiveGraph snapshot with journal pointer. */\nexport interface BoardEnvelope {\n lastDrainedJournalId: string;\n graph: LiveGraphSnapshot;\n}\n\nexport function boardEnvelopeToSnapshotEntries(envelope: BoardEnvelope): Record<string, unknown> {\n return {\n [BOARD_GRAPH_KEY]: envelope.graph,\n [BOARD_LAST_JOURNAL_PROCESSED_ID_KEY]: envelope.lastDrainedJournalId,\n };\n}\n\nexport function snapshotEntriesToBoardEnvelope(entries: Record<string, unknown>): BoardEnvelope {\n const graph = entries[BOARD_GRAPH_KEY] as LiveGraphSnapshot | undefined;\n const lastDrainedJournalId = entries[BOARD_LAST_JOURNAL_PROCESSED_ID_KEY] as string | undefined;\n if (!graph || typeof graph !== 'object') {\n throw new Error(`State snapshot is missing required key: ${BOARD_GRAPH_KEY}`);\n }\n return {\n graph,\n lastDrainedJournalId: typeof lastDrainedJournalId === 'string' ? lastDrainedJournalId : '',\n };\n}\n\nexport interface CardInventoryEntry {\n cardId: string;\n cardFilePath: string;\n addedAt: string;\n}\n\nexport interface CardInventoryIndex {\n byCardId: Map<string, CardInventoryEntry>;\n byCardPath: Map<string, CardInventoryEntry>;\n}\n\n/**\n * Transform a LiveCard into a TaskConfig for the reactive graph.\n * Every card gets handler: 'card-handler'.\n */\nexport function liveCardToTaskConfig(card: LiveCard): TaskConfig {\n const requires = card.requires as string[] | undefined;\n const provides = (card.provides as Array<{ bindTo: string }> | undefined)?.map(p => p.bindTo) ?? [];\n\n return {\n requires: requires && requires.length > 0 ? requires : undefined,\n provides,\n taskHandlers: ['card-handler'],\n description: (card.meta as { title?: string } | undefined)?.title ?? card.id,\n };\n}\n","/**\n * board-live-cards-public.ts\n *\n * Platform-free public API layer for the board-live-cards system.\n *\n * ─────────────────────────────────────────────────────────────────────────────\n * LAYER DIAGRAM\n * ─────────────────────────────────────────────────────────────────────────────\n *\n * board-live-cards-cli.ts (THIN — arg parse → call public → print JSON)\n * ↓ calls\n * board-live-cards-public.ts (THIS FILE — facade, all logic, no platform code)\n * ↓ depends on injected\n * board-live-cards-lib.ts (pure domain — stores, graph, codecs)\n *\n * ─────────────────────────────────────────────────────────────────────────────\n * PLATFORM ADAPTERS (injected into BoardPlatformAdapter)\n * ─────────────────────────────────────────────────────────────────────────────\n *\n * Node/FS createFsBoardPlatformAdapter(baseRef, cliDir)\n * Azure Functions createAzureBoardPlatformAdapter(baseRef, containerClient, …)\n * Firebase Fn createFirebaseBoardPlatformAdapter(baseRef, firestoreDb, …)\n * In-memory/test createInMemoryBoardPlatformAdapter(baseRef)\n *\n * ─────────────────────────────────────────────────────────────────────────────\n * USAGE\n * ─────────────────────────────────────────────────────────────────────────────\n *\n * const board = createBoardLiveCardsPublic(baseRef, adapter);\n * const result = await board.processAccumulatedEvents();\n * const status = board.status();\n */\n\nimport type { KVStorage, BlobStorage, KindValueRef, AtomicRelayLock } from './storage-interface.js';\nimport { withRelayLock, serializeRef, parseRef } from './storage-interface.js';\nimport type { ExecutionRef } from './execution-interface.js';\nimport { restore, createLiveGraph, snapshot } from '../../continuous-event-graph/core.js';\nimport { createReactiveGraph } from '../../continuous-event-graph/reactive.js';\nimport type { GraphEvent } from '../../event-graph/types.js';\nimport {\n createCardStore,\n createJournalStore,\n createExecutionRequestStore,\n createCardRuntimeStore,\n createFetchedSourcesStore,\n createPublishedOutputsStore,\n createBoardConfigStore,\n createStateSnapshotStore,\n buildBoardStatusObject,\n createCardHandlerFn,\n EMPTY_CONFIG,\n BOARD_GRAPH_KEY,\n SNAPSHOT_SCHEMA_VERSION_V1,\n boardEnvelopeToSnapshotEntries,\n snapshotEntriesToBoardEnvelope,\n liveCardToTaskConfig,\n} from './board-live-cards-lib.js';\nimport type {\n JournalStorageAdapter,\n StateSnapshotStorageAdapter,\n CardStorageAdapter,\n StateSnapshotReadView,\n CardUpsertIndexEntry,\n ExecutionRequestEntry,\n BoardEnvelope,\n SourceTokenPayload,\n BoardStatusObject,\n LiveCard,\n CardIndex,\n CardRuntimeStore,\n CardRuntimeSnapshot,\n FetchedSourcesStore,\n OutputStoreEvent,\n} from './board-live-cards-lib.js';\n\n// Re-export constants so platform adapter files can import them without going through lib directly.\nexport { BOARD_GRAPH_KEY, SNAPSHOT_SCHEMA_VERSION_V1, EMPTY_CONFIG } from './board-live-cards-lib.js';\n\n// ============================================================================\n// CommandInput — uniform request envelope\n//\n// params — scalar routing/identity args (cardId, token, restart, etc.)\n// body — structured payload that arrives via stdin / HTTP body / in-process\n// (card JSON, source-def object, task data, mock-projections, ...)\n//\n// Transport adapters (CLI, Azure Fn, in-process) are responsible for reading\n// the transport channel and building this shape before calling any method.\n// The public layer never knows how data arrived.\n// ============================================================================\n\nexport type CommandInput = {\n params?: Record<string, string | number | boolean>;\n body?: unknown;\n};\n\n// ============================================================================\n// CommandResult — uniform return envelope (success / fail / error)\n//\n// success — operation completed normally\n// fail — operation rejected due to caller input (card not found, bad token)\n// error — unexpected internal error (exception caught)\n// ============================================================================\n\nexport type CommandResult<T = undefined> =\n | (T extends undefined ? { status: 'success' } : { status: 'success'; data: T })\n | { status: 'fail'; error: string }\n | { status: 'error'; error: string };\n\n// Internal helpers for building CommandResult values.\nfunction ok(): CommandResult;\nfunction ok<T>(data: T): CommandResult<T>;\nfunction ok<T>(data?: T): CommandResult<T> {\n return (data !== undefined\n ? { status: 'success', data }\n : { status: 'success' }) as CommandResult<T>;\n}\nfunction fail(error: string): CommandResult { return { status: 'fail', error }; }\nfunction err(e: unknown): CommandResult { return { status: 'error', error: e instanceof Error ? e.message : String(e) }; }\n\n// ============================================================================\n// BoardPlatformAdapter — the single injection point\n// ============================================================================\n\nexport interface BoardPlatformAdapter {\n /**\n * KV storage factory — scoped by namespace.\n * Namespaces used by the public layer:\n * 'state-snapshot' — board graph snapshot (StateSnapshotStorageAdapter, built internally)\n * 'config' — board configuration (.task-executor, .chat-handler, .card-store-ref)\n * 'card-upsert' — card upsert dedup index\n * 'execution-requests' — queued execution requests (keyed by journalId)\n * 'card-runtime' — card runtime state snapshots\n * 'output' — published board status + card computed outputs\n */\n kvStorage(namespace: string): KVStorage;\n\n /**\n * Build a KVStorage rooted at the given ref.\n * Used by the public layer for both card store and outputs store routing.\n * FS: createFsKvStorage(parseRef(ref).value)\n * localStorage: createLocalStorageKvStorage(parseRef(ref).value)\n */\n kvStorageForRef(ref: string): KVStorage;\n\n /**\n * Blob storage factory — scoped by namespace.\n * Namespaces used by the public layer:\n * 'sources' — fetched source data files (keyed by cardId/outputFile)\n * '' — root-scoped blob access (for resolving arbitrary KindValueRef blobs)\n */\n blobStorage(namespace: string): BlobStorage;\n\n /**\n * Journal storage adapter (append-only log).\n * Uses the lib's JournalStorageAdapter interface.\n * One journal per board — no namespace parameter needed.\n */\n journalAdapter(): JournalStorageAdapter;\n\n /**\n * AtomicRelayLock — non-blocking try-acquire with relay-on-busy semantics.\n * Guards processAccumulatedEvents drain cycle.\n * FS: proper-lockfile (createFsAtomicRelayLock)\n * Azure: blob lease\n * Firestore: Firestore transaction + sentinel document\n */\n lock: AtomicRelayLock;\n\n /**\n * Self-identity ExecutionRef — how to invoke THIS board instance.\n * Embedded in source callback tokens so executors know where to report back.\n * Node/FS: { howToRun: 'local-node', whatToRun: '::fs-path::/path/to/cli.js' }\n * Azure Fn: { howToRun: 'http:post', whatToRun: '::http-url::https://…/api/board' }\n */\n selfRef: ExecutionRef;\n\n /**\n * Generic execution dispatch — platform adapts ExecutionRef → actual transport.\n * Public layer constructs fully-formed semantic args (source def, base_ref,\n * callback token with selfRef baked in). Platform handles transport:\n * Node: writes args to temp file, spawns detached process\n * Azure: HTTP POST args as JSON body\n * Firebase: publishes args as pubsub message\n */\n dispatchExecution(ref: ExecutionRef, args: Record<string, unknown>): Promise<{ dispatched: boolean; error?: string }>;\n\n /**\n * Resolve a blob ref to its string contents.\n * The adapter handles the platform-specific lookup (e.g. absolute FS path vs board-relative key).\n * Throws if the blob does not exist.\n */\n resolveBlob(ref: KindValueRef): string;\n\n /**\n * Compute a stable, deterministic content hash for any JSON-serializable value.\n * Used for dedup indexes and snapshot versioning.\n * Node/FS: computeStableJsonHash (storage-fs-adapters)\n * Browser: Web Crypto subtle.digest or equivalent\n */\n hashFn(value: unknown): string;\n\n /**\n * Generate a random short ID (32 hex chars).\n * Used for commit IDs and delivery tokens.\n * Node/FS: getHash(`${Date.now()}-${Math.random()}`).slice(0, 32)\n * Browser: crypto.randomUUID().replace(/-/g, '')\n */\n genId(): string;\n\n /**\n * Request an additional drain pass asynchronously (e.g. spawn a background process).\n * Called as the relay continuation after each drain cycle so that events written\n * during the cycle (e.g. task-completed appended by the card handler) are eventually\n * processed even when the current process exits immediately after returning.\n * Optional — if absent, no continuation is scheduled.\n */\n requestProcessAccumulated?(): void;\n\n /**\n * Optional cross-process board change notification publisher (named pipe, webhook, pubsub, etc.).\n * Called once per drain cycle with the complete batch of notifications produced in that cycle.\n */\n publishBoardChangeNotifications?(notifications: BoardChangeNotification[]): void | Promise<void>;\n\n /** Optional warn sink — defaults to no-op. */\n onWarn?(msg: string): void;\n}\n\n// ============================================================================\n// BoardLiveCardsPublic — the public API surface\n//\n// All methods are scoped to the baseRef provided at construction time.\n// ============================================================================\n\nexport interface BoardLiveCardsPublic {\n // Board management\n // params: taskExecutor?, chatHandler?\n init(input: CommandInput): CommandResult;\n // no params needed\n status(input: CommandInput): CommandResult<BoardStatusObject>;\n // no params needed\n getCardStoreRef(input: CommandInput): CommandResult<{ storeRef: string }>;\n getOutputsStoreRef(input: CommandInput): CommandResult<{ storeRef: string }>;\n // params: key\n getOutputsDataObject(input: CommandInput): CommandResult;\n // no params needed\n getAllOutputsDataObjects(input: CommandInput): CommandResult<Record<string, unknown>>;\n // params: key\n getOutputsComputedValues(input: CommandInput): CommandResult;\n // no params needed\n getAllOutputsComputedValues(input: CommandInput): CommandResult<Record<string, unknown>>;\n // params: id\n removeCard(input: CommandInput): CommandResult;\n // params: id\n retrigger(input: CommandInput): CommandResult;\n // no params needed\n processAccumulatedEvents(input: CommandInput): Promise<CommandResult>;\n\n // Card management — params: cardId, restart?\n upsertCard(input: CommandInput): CommandResult;\n\n // Task callbacks — params.token encodes baseRef; body = task data payload\n // params: token, error?\n taskFailed(input: CommandInput): CommandResult;\n // params: token; body = update payload\n taskProgress(input: CommandInput): CommandResult;\n\n // Source callbacks — params: token, ref | token, reason?\n sourceDataFetched(input: CommandInput): CommandResult;\n sourceDataFetchFailure(input: CommandInput): CommandResult;\n}\n\nexport type BoardChangeNotification =\n | OutputStoreEvent\n | { kind: 'card_refreshed'; cardId: string; card: LiveCard };\n\n// ============================================================================\n// Internal pure helpers — no platform deps\n// ============================================================================\n\n// Pure JS base64url encode/decode — no Node/Buffer dependency.\n// TextEncoder/TextDecoder and btoa/atob are globally available in browsers and Node 16+.\nfunction toBase64Url(str: string): string {\n const bytes = new TextEncoder().encode(str);\n const binStr = Array.from(bytes, b => String.fromCharCode(b)).join('');\n return btoa(binStr).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n}\n\nfunction fromBase64Url(str: string): string {\n const base64 = str.replace(/-/g, '+').replace(/_/g, '/');\n const padded = base64 + '='.repeat((4 - base64.length % 4) % 4);\n const binStr = atob(padded);\n const bytes = Uint8Array.from(binStr, c => c.charCodeAt(0));\n return new TextDecoder().decode(bytes);\n}\n\nfunction decodeCallbackToken(token: string): { taskName: string } | null {\n try {\n const p = JSON.parse(fromBase64Url(token));\n return typeof p?.t === 'string' ? { taskName: p.t } : null;\n } catch { return null; }\n}\n\nfunction encodeSourceToken(payload: SourceTokenPayload): string {\n return toBase64Url(JSON.stringify(payload));\n}\n\nfunction decodeSourceToken(token: string): SourceTokenPayload | null {\n try {\n const p = JSON.parse(fromBase64Url(token));\n if (typeof p?.cbk === 'string' && typeof p?.cid === 'string' &&\n typeof p?.b === 'string' && typeof p?.d === 'string') return p as SourceTokenPayload;\n return null;\n } catch { return null; }\n}\n\nfunction nowIso(): string { return new Date().toISOString(); }\n\n// ============================================================================\n// createBoardLiveCardsPublic — factory\n// ============================================================================\n\nexport function createBoardLiveCardsPublic(\n baseRef: KindValueRef,\n adapter: BoardPlatformAdapter,\n): BoardLiveCardsPublic {\n const warn = adapter.onWarn ?? (() => { /* no-op */ });\n const boardPath = serializeRef(baseRef);\n\n function flushBoardChangeNotifications(notifications: BoardChangeNotification[]): void {\n if (notifications.length === 0) return;\n try {\n const p = adapter.publishBoardChangeNotifications?.(notifications);\n if (p && typeof (p as Promise<void>).catch === 'function') {\n void (p as Promise<void>).catch((e: unknown) =>\n warn(`[board-live-cards-public] publishBoardChangeNotifications failed: ${e instanceof Error ? e.message : String(e)}`),\n );\n }\n } catch (e) {\n warn(`[board-live-cards-public] publishBoardChangeNotifications failed: ${e instanceof Error ? e.message : String(e)}`);\n }\n }\n\n // ── Inline storage adapters built from the three primitives ─────────────────\n //\n // Both CardStorageAdapter and StateSnapshotStorageAdapter are pure KV\n // compositions — no platform-specific atomicity needed at this layer.\n // The public layer builds them here so BoardPlatformAdapter stays minimal.\n\n function makeCardAdapter(): CardStorageAdapter {\n const storeRef = configStore().readCardStoreRef();\n if (!storeRef) throw new Error(`Board at ${baseRef.value} has no card store configured. Run: init --base-ref <ref> --store-ref <::kind::value>`);\n const kv = adapter.kvStorageForRef(storeRef);\n return {\n readIndex(): CardIndex | null { return kv.read('_index') as CardIndex | null; },\n writeIndex(index: CardIndex): void { kv.write('_index', index); },\n readCard(id: string): LiveCard | null { return kv.read(id) as LiveCard | null; },\n writeCard(id: string, card: LiveCard): string { kv.write(id, card); return adapter.hashFn(card); },\n cardExists(id: string): boolean { return kv.read(id) !== null; },\n defaultCardKey(cardId: string): string { return cardId; },\n };\n }\n\n // scopeId is intentionally ignored — the adapter is already board-scoped via\n // adapter.kvStorage('state-snapshot'), which closes over baseRef's directory.\n const snapshotAdapterImpl: StateSnapshotStorageAdapter = {\n readValues(_scopeId: string): StateSnapshotReadView {\n const kv = adapter.kvStorage('state-snapshot');\n const keys = kv.listKeys().sort();\n if (keys.length === 0) return { version: null, values: {} };\n const values: Record<string, unknown> = {};\n for (const key of keys) values[key] = kv.read(key);\n return { version: adapter.hashFn(values), values };\n },\n writeValues(_scopeId: string, nextValues: Record<string, unknown>, deletedKeys: string[]): string {\n const kv = adapter.kvStorage('state-snapshot');\n for (const key of deletedKeys) kv.delete(key);\n for (const [key, value] of Object.entries(nextValues)) kv.write(key, value);\n return adapter.hashFn(nextValues);\n },\n };\n\n // Store factory helpers — no long-lived singletons, created per call\n const configStore = () => createBoardConfigStore(adapter.kvStorage('config'));\n const snapshotStore = () => createStateSnapshotStore(snapshotAdapterImpl);\n const journalStore = () => createJournalStore(adapter.journalAdapter());\n const cardStore = () => createCardStore(makeCardAdapter(), warn);\n const outputStore = () => {\n const ref = configStore().readOutputsStoreRef();\n if (!ref) throw new Error(`Board at ${baseRef.value} has no outputs store configured. Run: init --outputs-store-ref <::kind::value>`);\n return createPublishedOutputsStore(adapter.kvStorageForRef(ref));\n };\n\n function boardExists(): boolean {\n return !!snapshotStore().readSnapshot(baseRef.value).values[BOARD_GRAPH_KEY];\n }\n\n function loadEnvelope(): BoardEnvelope {\n const snap = snapshotStore().readSnapshot(baseRef.value);\n if (!snap.values[BOARD_GRAPH_KEY]) throw new Error(`Board not initialized at ${baseRef.value}`);\n return snapshotEntriesToBoardEnvelope(snap.values);\n }\n\n function commitEnvelope(envelope: BoardEnvelope, expectedVersion: string | null): void {\n const result = snapshotStore().commitSnapshot(baseRef.value, {\n schemaVersion: SNAPSHOT_SCHEMA_VERSION_V1,\n expectedVersion,\n commitId: adapter.genId(),\n committedAt: nowIso(),\n deleteKeys: [],\n shallowMerge: boardEnvelopeToSnapshotEntries(envelope),\n });\n if (!result.ok) {\n throw new Error(\n `Snapshot commit failed (version mismatch): expected=${expectedVersion ?? 'null'} current=${result.currentVersion ?? 'null'}`,\n );\n }\n }\n\n function appendJournalEvent(event: GraphEvent): void { journalStore().appendEvent(event); }\n\n // ── Drain cycle ─────────────────────────────────────────────────────────────\n\n async function drainCycle(): Promise<void> {\n const onDispatchFailed = (entry: ExecutionRequestEntry, error: string): void => {\n const p = entry.payload as Record<string, unknown>;\n const enriched = (p?.enrichedCard ?? {}) as Record<string, unknown>;\n const taskName = (enriched.id ?? p?.cardId ?? 'unknown') as string;\n appendJournalEvent({ type: 'task-failed', taskName, error, timestamp: nowIso() });\n };\n\n const executionRequestStore = createExecutionRequestStore(\n adapter.kvStorage('execution-requests'),\n onDispatchFailed,\n );\n\n const realCardRuntimeStore = createCardRuntimeStore(adapter.kvStorage('card-runtime'));\n const realFetchedSourcesStore = createFetchedSourcesStore(\n adapter.blobStorage('sources'),\n (ref) => adapter.resolveBlob(ref),\n );\n\n // RX: in-memory overlay for card runtime writes — reads check overlay first\n const RX = new Map<string, CardRuntimeSnapshot>();\n const overlayCardRuntimeStore: CardRuntimeStore = {\n readRuntime(cardId) {\n return RX.get(cardId) ?? realCardRuntimeStore.readRuntime(cardId);\n },\n writeRuntime(cardId, state) {\n RX.set(cardId, state);\n },\n };\n\n // SX: in-memory overlay for source commits — reads check overlay first\n const SX: { cardId: string; outputFile: string; deliveryToken: string }[] = [];\n const sxCache = new Map<string, unknown>();\n const overlayFetchedSourcesStore: FetchedSourcesStore = {\n readSourceData(cardId, outputFile) {\n const key = `${cardId}/${outputFile}`;\n if (sxCache.has(key)) return sxCache.get(key)!;\n return realFetchedSourcesStore.readSourceData(cardId, outputFile);\n },\n ingestSourceDataStaged(cardId, outputFile, ref, deliveryToken) {\n realFetchedSourcesStore.ingestSourceDataStaged(cardId, outputFile, ref, deliveryToken);\n },\n commitSourceData(cardId, outputFile, deliveryToken) {\n // Read staged content into overlay so readSourceData sees it immediately\n const stagedKey = `${cardId}/.staged/${deliveryToken}/${outputFile}`;\n const blob = adapter.blobStorage('sources');\n const content = blob.read(stagedKey);\n if (content == null) return false;\n const key = `${cardId}/${outputFile}`;\n const trimmed = content.trim();\n try { sxCache.set(key, JSON.parse(trimmed)); } catch { sxCache.set(key, trimmed); }\n SX.push({ cardId, outputFile, deliveryToken });\n return true;\n },\n hasSource(cardId, outputFile) {\n const key = `${cardId}/${outputFile}`;\n if (sxCache.has(key)) return true;\n return realFetchedSourcesStore.hasSource(cardId, outputFile);\n },\n };\n\n const cardHandlerAdapters = {\n cardStore: cardStore(),\n cardRuntimeStore: overlayCardRuntimeStore,\n fetchedSourcesStore: overlayFetchedSourcesStore,\n outputStore: outputStore(),\n executionRequestStore,\n };\n\n const envelope = loadEnvelope();\n const live = restore(envelope.graph);\n const { events: undrained, newCursor } = journalStore().readEntriesAfterCursor(envelope.lastDrainedJournalId);\n\n let TX: GraphEvent[] = [];\n const CX: { cardId: string; values: Record<string, unknown> }[] = [];\n const DX: Record<string, unknown>[] = [];\n // NX: card refreshes — Map so last write per cardId wins, deduplicating rapid updates.\n const NX = new Map<string, LiveCard>();\n\n const taskCompletedFn = (taskName: string, data: Record<string, unknown>): void => {\n TX.push({ type: 'task-completed', taskName, data, timestamp: nowIso() } as GraphEvent);\n };\n const taskFailedFn = (taskName: string, error: string): void =>\n appendJournalEvent({ type: 'task-failed', taskName, error, timestamp: nowIso() });\n const writeComputedValuesFn = (cardId: string, values: Record<string, unknown>): void => {\n CX.push({ cardId, values });\n };\n const writeDataObjectsFn = (data: Record<string, unknown>): void => {\n DX.push(data);\n };\n const notifyCardFn = (cardId: string, card: LiveCard): void => {\n NX.set(cardId, card);\n };\n\n // Wire output-store notifications for this drain cycle.\n // (notifications are batched and flushed at the end of the drain cycle)\n\n const rg = createReactiveGraph(live, {\n handlers: {\n 'card-handler': createCardHandlerFn(baseRef, newCursor, cardHandlerAdapters, taskCompletedFn, taskFailedFn, writeComputedValuesFn, writeDataObjectsFn, notifyCardFn),\n },\n });\n\n TX = undrained;\n while (TX.length > 0) {\n const pending = TX;\n TX = [];\n rg.pushAll(pending);\n await rg.waitForHandlers();\n }\n\n const finalLive = rg.getState();\n await rg.dispose({ wait: true });\n\n const currentVersion = snapshotStore().readSnapshot(baseRef.value).version;\n commitEnvelope({ lastDrainedJournalId: newCursor, graph: snapshot(finalLive) }, currentVersion);\n\n // Flush deferred output writes after board state is saved\n for (const { cardId, values } of CX) cardHandlerAdapters.outputStore.writeComputedValues(cardId, values);\n for (const data of DX) cardHandlerAdapters.outputStore.writeDataObjects(data);\n\n // Flush RX: card runtime overlay → real store\n for (const [cardId, state] of RX) realCardRuntimeStore.writeRuntime(cardId, state);\n\n // Flush SX: deferred source commits → real store\n for (const { cardId, outputFile, deliveryToken } of SX) realFetchedSourcesStore.commitSourceData(cardId, outputFile, deliveryToken);\n\n let statusObj: unknown;\n try {\n statusObj = buildBoardStatusObject(boardPath, finalLive);\n cardHandlerAdapters.outputStore.writeStatusSnapshot(statusObj);\n } catch (e) {\n warn(`[board-live-cards-public] status publish failed: ${e instanceof Error ? e.message : String(e)}`);\n }\n\n // Batch all drain-cycle notifications and flush them atomically in one write\n const batch: BoardChangeNotification[] = [];\n for (const { cardId, values } of CX) batch.push({ kind: 'computed_values', cardId, values });\n for (const data of DX) {\n for (const [key, payload] of Object.entries(data)) {\n if (key) batch.push({ kind: 'data_object', key, payload });\n }\n }\n for (const [cardId, card] of NX) batch.push({ kind: 'card_refreshed', cardId, card });\n if (statusObj !== undefined) batch.push({ kind: 'status', status: statusObj });\n flushBoardChangeNotifications(batch);\n\n const executorRef = configStore().readTaskExecutorRef()\n ?? { howToRun: 'built-in' as const, whatToRun: '::built-in::source-cli-task-executor' };\n\n executionRequestStore.dispatchEntriesForJournalId(newCursor, (entry) => {\n if (entry.taskKind !== 'source-fetch') {\n warn(`[process-accumulated-events] unknown taskKind \"${entry.taskKind}\" — skipping`);\n return;\n }\n const p = entry.payload as { boardRef: string; enrichedCard: Record<string, unknown>; callbackToken: string; rqt: string };\n const cardId = (p.enrichedCard?.id as string | undefined) ?? 'unknown';\n const sourceDefs = (p.enrichedCard?.source_defs ?? []) as Array<{ bindTo: string; outputFile?: string; [k: string]: unknown }>;\n\n for (const src of sourceDefs) {\n if (!src.outputFile) { warn(`[dispatch] source \"${src.bindTo}\" has no outputFile — skipping`); continue; }\n const sourceToken = encodeSourceToken({\n cbk: p.callbackToken, rg: baseRef.value, br: serializeRef(baseRef),\n cid: cardId, b: src.bindTo, d: src.outputFile, cs: undefined, rqt: p.rqt,\n });\n adapter.dispatchExecution(executorRef, {\n source_def: src, base_ref: serializeRef(baseRef),\n callback: { token: sourceToken, via: adapter.selfRef },\n }).catch((e: unknown) => taskFailedFn(cardId, e instanceof Error ? e.message : String(e)));\n }\n });\n }\n\n // ── Public methods ──────────────────────────────────────────────────────────\n\n // Internal drain — called directly from within the factory (no CommandInput needed).\n async function drain(): Promise<CommandResult> {\n try {\n // After each drain cycle, check if new journal entries accumulated while we\n // held the lock (e.g. concurrent upsertCard calls). If so, run another cycle.\n // This is the in-process equivalent of requestProcessAccumulated (which spawns\n // a child process for the CLI case). The self-continuation runs after the lock\n // is released, so it re-acquires cleanly.\n const continuation = () => {\n const envelope = loadEnvelope();\n const { events } = journalStore().readEntriesAfterCursor(envelope.lastDrainedJournalId);\n if (events.length <= 0) {\n return;\n }\n void drain();\n // Also fire the platform continuation (e.g. detached process for source fetches)\n adapter.requestProcessAccumulated?.();\n };\n const ran = await withRelayLock(adapter.lock, drainCycle, continuation);\n return ok({ ran: ran !== false });\n } catch (e) { return err(e); }\n }\n\n function init(input: CommandInput): CommandResult {\n try {\n // cardStoreRef is required — create a card store with card-store-cli first\n const storeRef = input.params?.['cardStoreRef'] as string | undefined;\n if (!storeRef) return fail('init requires params.cardStoreRef — create a card store with card-store-cli and pass its ref here');\n if (!boardExists()) {\n const live = createLiveGraph(EMPTY_CONFIG);\n commitEnvelope({ lastDrainedJournalId: '', graph: snapshot(live) }, null);\n }\n const outputsStoreRef = input.params?.['outputsStoreRef'] as string | undefined;\n if (!outputsStoreRef) return fail('init requires params.outputsStoreRef — pass the outputs store ref here');\n const cfg = configStore();\n cfg.writeCardStoreRef(storeRef);\n cfg.writeOutputsStoreRef(outputsStoreRef);\n const body = (input.body ?? {}) as Record<string, unknown>;\n if (body['task-executor-ref']) cfg.writeTaskExecutorRef(body['task-executor-ref'] as ExecutionRef);\n if (body['chat-handler-ref']) cfg.writeChatHandlerRef(body['chat-handler-ref'] as ExecutionRef);\n try { outputStore().writeStatusSnapshot(buildBoardStatusObject(boardPath, restore(loadEnvelope().graph))); } catch { /* best-effort */ }\n return ok();\n } catch (e) { return err(e); }\n }\n\n function status(_input: CommandInput): CommandResult<BoardStatusObject> {\n try {\n let s = outputStore().readStatusSnapshot() as BoardStatusObject | null;\n if (!s) {\n s = buildBoardStatusObject(boardPath, restore(loadEnvelope().graph));\n try { outputStore().writeStatusSnapshot(s); } catch { /* best-effort */ }\n }\n return ok(s);\n } catch (e) { return err(e) as CommandResult<BoardStatusObject>; }\n }\n\n function removeCard(input: CommandInput): CommandResult {\n try {\n const id = input.params?.['id'] as string | undefined;\n if (!id) return fail('removeCard requires params.id');\n appendJournalEvent({ type: 'task-removal', taskName: id, timestamp: nowIso() });\n void drain();\n return ok();\n } catch (e) { return err(e); }\n }\n\n function retrigger(input: CommandInput): CommandResult {\n try {\n const id = input.params?.['id'] as string | undefined;\n if (!id) return fail('retrigger requires params.id');\n appendJournalEvent({ type: 'task-restart', taskName: id, timestamp: nowIso() });\n void drain();\n return ok();\n } catch (e) { return err(e); }\n }\n\n async function processAccumulatedEvents(_input: CommandInput): Promise<CommandResult> {\n return drain();\n }\n\n function upsertCard(input: CommandInput): CommandResult {\n try {\n const cardId = input.params?.['cardId'] as string | undefined;\n const all = input.params?.['all'];\n const restart = !!input.params?.['restart'];\n if (!cardId && !all) return fail('upsertCard requires --card-id <id> or --all');\n\n const ids = all ? cardStore().readAllCards().map(c => c.id) : [cardId as string];\n\n // Validate all cards exist before writing anything (atomicity)\n for (const id of ids) {\n if (!cardStore().readCard(id)) return fail(`Card \"${id}\" not found in board at ${baseRef.value}`);\n }\n\n for (const id of ids) {\n const card = cardStore().readCard(id)!;\n const taskConfig = liveCardToTaskConfig(card);\n const taskConfigHash = adapter.hashFn(taskConfig);\n const upsertKv = adapter.kvStorage('card-upsert');\n const existing = upsertKv.read(id) as CardUpsertIndexEntry | null;\n const taskConfigChanged = existing?.taskConfigHash !== taskConfigHash;\n\n if (!taskConfigChanged && !restart) continue;\n\n if (taskConfigChanged) {\n const blobRef = existing?.blobRef ?? cardStore().readCardKey(id) ?? id;\n appendJournalEvent({ type: 'task-upsert', taskName: id, taskConfig, timestamp: nowIso() });\n upsertKv.write(id, { blobRef, taskConfigHash, updatedAt: nowIso() } satisfies CardUpsertIndexEntry);\n }\n if (restart) appendJournalEvent({ type: 'task-restart', taskName: id, timestamp: nowIso() });\n }\n\n void drain();\n return ok();\n } catch (e) { return err(e); }\n }\n\n function taskFailed(input: CommandInput): CommandResult {\n try {\n const token = input.params?.['token'] as string | undefined;\n if (!token) return fail('taskFailed requires params.token');\n const error = (input.params?.['error'] as string | undefined) ?? 'unknown error';\n const decoded = decodeCallbackToken(token);\n if (!decoded) return fail('Invalid callback token');\n appendJournalEvent({ type: 'task-failed', taskName: decoded.taskName, error, timestamp: nowIso() });\n void drain();\n return ok();\n } catch (e) { return err(e); }\n }\n\n function taskProgress(input: CommandInput): CommandResult {\n try {\n const token = input.params?.['token'] as string | undefined;\n if (!token) return fail('taskProgress requires params.token');\n const b = (input.body ?? {}) as Record<string, unknown>;\n const update = (b['update'] ?? {}) as Record<string, unknown>;\n const decoded = decodeCallbackToken(token);\n if (!decoded) return fail('Invalid callback token');\n appendJournalEvent({ type: 'task-progress', taskName: decoded.taskName, update, timestamp: nowIso() });\n void drain();\n return ok();\n } catch (e) { return err(e); }\n }\n\n function sourceDataFetched(input: CommandInput): CommandResult {\n try {\n const token = input.params?.['token'] as string | undefined;\n const ref = input.params?.['ref'] as string | undefined;\n if (!token) return fail('sourceDataFetched requires params.token');\n if (!ref) return fail('sourceDataFetched requires params.ref');\n const payload = decodeSourceToken(token);\n if (!payload) return fail('Invalid source token');\n const { cbk, cid, b, d, cs, rqt } = payload;\n\n const fetchedSourcesStore = createFetchedSourcesStore(\n adapter.blobStorage('sources'),\n (ref) => adapter.resolveBlob(ref),\n );\n\n const deliveryToken = adapter.genId();\n fetchedSourcesStore.ingestSourceDataStaged(cid, d, parseRef(ref), deliveryToken);\n\n const cbkDecoded = decodeCallbackToken(cbk);\n if (!cbkDecoded) return fail('Invalid callback token embedded in source token');\n\n const fetchedAt = nowIso();\n appendJournalEvent({\n type: 'task-progress',\n taskName: cbkDecoded.taskName,\n update: { bindTo: b, outputFile: d, fetchedAt, deliveryToken, sourceChecksum: cs, rqt },\n timestamp: fetchedAt,\n });\n void drain();\n return ok();\n } catch (e) { return err(e); }\n }\n\n function sourceDataFetchFailure(input: CommandInput): CommandResult {\n try {\n const token = input.params?.['token'] as string | undefined;\n const reason = (input.params?.['reason'] as string | undefined) ?? 'unknown';\n if (!token) return fail('sourceDataFetchFailure requires params.token');\n const payload = decodeSourceToken(token);\n if (!payload) return fail('Invalid source token');\n const { cbk, b, d, cs } = payload;\n\n const cbkDecoded = decodeCallbackToken(cbk);\n if (!cbkDecoded) return fail('Invalid callback token embedded in source token');\n\n appendJournalEvent({\n type: 'task-progress',\n taskName: cbkDecoded.taskName,\n update: { bindTo: b, outputFile: d, failure: true, reason, sourceChecksum: cs },\n timestamp: nowIso(),\n });\n void drain();\n return ok();\n } catch (e) { return err(e); }\n }\n\n function getCardStoreRef(_input: CommandInput): CommandResult<{ storeRef: string }> {\n try {\n const storeRef = configStore().readCardStoreRef();\n if (!storeRef) return fail(`Board at ${baseRef.value} has no card store configured`) as CommandResult<{ storeRef: string }>;\n return ok({ storeRef });\n } catch (e) { return err(e) as CommandResult<{ storeRef: string }>; }\n }\n\n function getOutputsStoreRef(_input: CommandInput): CommandResult<{ storeRef: string }> {\n try {\n const storeRef = configStore().readOutputsStoreRef();\n if (!storeRef) return fail(`Board at ${baseRef.value} has no outputs store configured`) as CommandResult<{ storeRef: string }>;\n return ok({ storeRef });\n } catch (e) { return err(e) as CommandResult<{ storeRef: string }>; }\n }\n\n function getOutputsDataObject(input: CommandInput): CommandResult {\n try {\n const key = input.params?.['key'] as string | undefined;\n if (!key) return fail('getOutputsDataObject requires params.key');\n const value = outputStore().readDataObject(key);\n return ok(value);\n } catch (e) { return err(e); }\n }\n\n function getAllOutputsDataObjects(_input: CommandInput): CommandResult<Record<string, unknown>> {\n try {\n return ok(outputStore().readAllDataObjects()) as CommandResult<Record<string, unknown>>;\n } catch (e) { return err(e) as CommandResult<Record<string, unknown>>; }\n }\n\n function getOutputsComputedValues(input: CommandInput): CommandResult {\n try {\n const key = input.params?.['key'] as string | undefined;\n if (!key) return fail('getOutputsComputedValues requires params.key');\n const value = outputStore().readComputedValues(key);\n return ok(value);\n } catch (e) { return err(e); }\n }\n\n function getAllOutputsComputedValues(_input: CommandInput): CommandResult<Record<string, unknown>> {\n try {\n return ok(outputStore().readAllComputedValues()) as CommandResult<Record<string, unknown>>;\n } catch (e) { return err(e) as CommandResult<Record<string, unknown>>; }\n }\n\n return {\n init, status, getCardStoreRef, getOutputsStoreRef,\n getOutputsDataObject, getAllOutputsDataObjects,\n getOutputsComputedValues, getAllOutputsComputedValues,\n removeCard, retrigger, processAccumulatedEvents,\n upsertCard,\n taskFailed, taskProgress,\n sourceDataFetched, sourceDataFetchFailure,\n };\n}\n\n// ============================================================================\n// BoardNonCorePlatformAdapter — extends the base adapter with synchronous\n// executor dispatch and schema validation.\n//\n// The 5 non-core commands all require blocking sub-process invocation which\n// is not available in fire-and-forget async dispatch contexts (Azure Fn, etc.)\n// so they live in a separate interface and factory.\n// ============================================================================\n\nexport interface BoardNonCorePlatformAdapter extends BoardPlatformAdapter {\n /**\n * Synchronously invoke a task executor subcommand and return stdout.\n * Throws on non-zero exit or timeout.\n */\n invokeExecutorSync(\n ref: ExecutionRef,\n subcommand: string,\n args: string[],\n opts?: { timeout?: number },\n ): string;\n\n /** Schema-only card validator (no executor invocation). */\n validateSchema(card: Record<string, unknown>): { ok: boolean; errors: string[] };\n\n /** Create a temp file path for I/O staging — absolute, board-scoped. */\n makeTempFilePath(label: string, ext?: string): string;\n\n /** Absolute-path blob I/O for temp files and card file references. */\n absoluteBlob: BlobStorage;\n}\n\n// ============================================================================\n// BoardLiveCardsNonCorePublic — 5 commands requiring synchronous dispatch\n// ============================================================================\n\nexport interface BoardLiveCardsNonCorePublic {\n /** params: cardId? or all?; returns array even for single card */\n validateCard(input: CommandInput): CommandResult<Array<{ cardId: string; isValid: boolean; issues: string[] }>>;\n\n /** body: { \"card-content\": <card> } — card JSON arrives via stdin */\n validateTmpCard(input: CommandInput): CommandResult<{ cardId: string; isValid: boolean; issues: string[] }>;\n\n /** params: cardId, sourceIdx, outRef?; body — mockProjections object */\n probeSource(input: CommandInput): CommandResult;\n\n /** body: { sourceDef, mockProjections }; params: outRef? */\n probeTmpSource(input: CommandInput): CommandResult;\n\n /** no params needed */\n describeTaskExecutorCapabilities(input: CommandInput): CommandResult;\n\n /**\n * Write/update cards in the configured card store.\n * body: { ops: Array<{ op: 'update', id: string, 'card-content': LiveCard }> }\n */\n updatesInCardStore(input: CommandInput): CommandResult;\n\n /**\n * Read cards from the configured card store by id.\n * body: { ids: string[] }\n */\n readFromCardStore(input: CommandInput): CommandResult<{ cards: Array<{ id: string; 'card-content': LiveCard | null }> }>;\n}\n\n// ============================================================================\n// createBoardLiveCardsNonCorePublic — factory\n// ============================================================================\n\nexport function createBoardLiveCardsNonCorePublic(\n baseRef: KindValueRef,\n adapter: BoardNonCorePlatformAdapter,\n): BoardLiveCardsNonCorePublic {\n // Mirror the same internal helpers as the core factory.\n const configStore = () => createBoardConfigStore(adapter.kvStorage('config'));\n function makeCardAdapterNC(): CardStorageAdapter {\n const storeRef = configStore().readCardStoreRef();\n if (!storeRef) throw new Error(`Board at ${baseRef.value} has no card store configured. Run: init --base-ref <ref> --store-ref <::kind::value>`);\n const kv = adapter.kvStorageForRef(storeRef);\n return {\n readIndex(): CardIndex | null { return kv.read('_index') as CardIndex | null; },\n writeIndex(index: CardIndex): void { kv.write('_index', index); },\n readCard(id: string): LiveCard | null { return kv.read(id) as LiveCard | null; },\n writeCard(id: string, card: LiveCard): string { kv.write(id, card); return adapter.hashFn(card); },\n cardExists(id: string): boolean { return kv.read(id) !== null; },\n defaultCardKey(cardId: string): string { return cardId; },\n };\n }\n const cardStore = () => createCardStore(makeCardAdapterNC(), adapter.onWarn ?? (() => { /* no-op */ }));\n\n // ── Shared validation helper ───────────────────────────────────────────────\n\n function validateCardObject(\n cardId: string,\n card: Record<string, unknown>,\n ): CommandResult<{ cardId: string; isValid: boolean; issues: string[] }> {\n const schemaResult = adapter.validateSchema(card);\n const sourceErrors: string[] = [];\n\n const teRef = configStore().readTaskExecutorRef();\n if (teRef && Array.isArray(card['source_defs'])) {\n for (const src of card['source_defs'] as Array<Record<string, unknown>>) {\n const bindTo = typeof src['bindTo'] === 'string' ? src['bindTo'] : '(unknown)';\n const tmpFile = adapter.makeTempFilePath(`validate-src-${bindTo}`);\n try {\n adapter.absoluteBlob.write(tmpFile, JSON.stringify(src));\n let stdout: string;\n try {\n stdout = adapter.invokeExecutorSync(teRef, 'validate-source-def', ['--in', tmpFile], { timeout: 10_000 });\n } catch (execErr: unknown) {\n const se = execErr as { stdout?: unknown };\n stdout = typeof se?.stdout === 'string' ? se.stdout : '';\n if (!stdout.trim()) {\n sourceErrors.push(`source \"${bindTo}\": executor validate-source-def failed — ${execErr instanceof Error ? execErr.message : String(execErr)}`);\n continue;\n }\n }\n const parsed = JSON.parse(stdout.trim()) as { ok?: boolean; errors?: string[] };\n if (!parsed.ok && Array.isArray(parsed.errors)) {\n for (const e of parsed.errors) sourceErrors.push(`source \"${bindTo}\": ${e}`);\n }\n } catch (e) {\n sourceErrors.push(`source \"${bindTo}\": executor validate-source-def failed — ${e instanceof Error ? e.message : String(e)}`);\n } finally {\n try { adapter.absoluteBlob.remove(tmpFile); } catch { /* best-effort */ }\n }\n }\n }\n\n const allErrors = [...schemaResult.errors, ...sourceErrors];\n return ok({ cardId, isValid: allErrors.length === 0, issues: allErrors }) as CommandResult<{ cardId: string; isValid: boolean; issues: string[] }>;\n }\n\n // ── Shared probe helper ────────────────────────────────────────────────────\n\n function runSourceProbe(\n src: Record<string, unknown>,\n mockProjections: Record<string, unknown>,\n outRef?: string,\n ): CommandResult {\n const teRef = configStore().readTaskExecutorRef();\n if (!teRef) return fail('No task-executor registered for this board');\n\n const bindTo = typeof src['bindTo'] === 'string' ? src['bindTo'] : 'source';\n const inFile = adapter.makeTempFilePath(`probe-in-${bindTo}`);\n const outFile = adapter.makeTempFilePath(`probe-out-${bindTo}`);\n const errFile = adapter.makeTempFilePath(`probe-err-${bindTo}`, '.txt');\n\n const inPayload: Record<string, unknown> = {\n ...src,\n boardDir: baseRef.value,\n _projections: mockProjections,\n };\n\n const inRefStr = serializeRef({ kind: 'fs-path', value: inFile });\n const outRefStr = serializeRef({ kind: 'fs-path', value: outFile });\n const errRefStr = serializeRef({ kind: 'fs-path', value: errFile });\n\n adapter.absoluteBlob.write(inFile, JSON.stringify(inPayload, null, 2));\n\n let result: string | null = null;\n try {\n adapter.invokeExecutorSync(teRef, 'run-source-fetch',\n ['--in-ref', inRefStr, '--out-ref', outRefStr, '--err-ref', errRefStr],\n { timeout: (src['timeout'] as number | undefined) ?? 30_000 },\n );\n result = adapter.absoluteBlob.read(outFile);\n if (result === null) return fail('Executor produced no output file');\n } catch (e) {\n const errMsg = adapter.absoluteBlob.read(errFile)?.trim()\n ?? (e instanceof Error ? e.message : String(e));\n return fail(`Probe failed: ${errMsg}`);\n } finally {\n try { adapter.absoluteBlob.remove(inFile); } catch { /* best-effort */ }\n try { adapter.absoluteBlob.remove(errFile); } catch { /* best-effort */ }\n }\n\n if (outRef) {\n const parsed = parseRef(outRef);\n adapter.absoluteBlob.write(parsed.value, result);\n } else {\n try { adapter.absoluteBlob.remove(outFile); } catch { /* best-effort */ }\n }\n\n return ok({ bindTo, resultSizeBytes: result.length });\n }\n\n // ── Public methods ─────────────────────────────────────────────────────────\n\n function validateCard(input: CommandInput): CommandResult<Array<{ cardId: string; isValid: boolean; issues: string[] }>> {\n try {\n const cardId = input.params?.['cardId'] as string | undefined;\n const all = input.params?.['all'];\n if (!cardId && !all) return fail('validateCard requires --card-id <id> or --all') as CommandResult<Array<{ cardId: string; isValid: boolean; issues: string[] }>>;\n const ids = all ? cardStore().readAllCards().map(c => c.id) : [cardId as string];\n const results: Array<{ cardId: string; isValid: boolean; issues: string[] }> = [];\n for (const id of ids) {\n const card = cardStore().readCard(id);\n if (!card) { results.push({ cardId: id, isValid: false, issues: [`Card \"${id}\" not found`] }); continue; }\n const r = validateCardObject(id, card as Record<string, unknown>);\n if (r.status !== 'success') return r as unknown as CommandResult<Array<{ cardId: string; isValid: boolean; issues: string[] }>>;\n results.push(r.data!);\n }\n return ok(results) as CommandResult<Array<{ cardId: string; isValid: boolean; issues: string[] }>>;\n } catch (e) { return err(e) as CommandResult<Array<{ cardId: string; isValid: boolean; issues: string[] }>>; }\n }\n\n function validateTmpCard(input: CommandInput): CommandResult<{ cardId: string; isValid: boolean; issues: string[] }> {\n try {\n if (!input.body || typeof input.body !== 'object' || Array.isArray(input.body)) {\n return fail('validateTmpCard requires card JSON object in body') as CommandResult<{ cardId: string; isValid: boolean; issues: string[] }>;\n }\n const body = input.body as Record<string, unknown>;\n const card = (body['card-content'] ?? body) as Record<string, unknown>;\n const cardId = typeof card['id'] === 'string' ? card['id'] : '(unknown)';\n return validateCardObject(cardId, card);\n } catch (e) { return err(e) as CommandResult<{ cardId: string; isValid: boolean; issues: string[] }>; }\n }\n\n function probeSource(input: CommandInput): CommandResult {\n try {\n const cardId = input.params?.['cardId'] as string | undefined;\n const sourceIdx = input.params?.['sourceIdx'] as number | undefined;\n const outRef = input.params?.['outRef'] as string | undefined;\n if (!cardId) return fail('probeSource requires params.cardId');\n if (sourceIdx === undefined) return fail('probeSource requires params.sourceIdx');\n const b = (input.body ?? {}) as Record<string, unknown>;\n const mockProjections = (b['mock-projections'] ?? {}) as Record<string, unknown>;\n\n const card = cardStore().readCard(cardId) as Record<string, unknown> | null;\n if (!card) return fail(`Card \"${cardId}\" not found`);\n const sourceDefs = (card['source_defs'] ?? []) as Array<Record<string, unknown>>;\n if (sourceIdx < 0 || sourceIdx >= sourceDefs.length) {\n return fail(`sourceIdx ${sourceIdx} out of range (card has ${sourceDefs.length} source(s))`);\n }\n return runSourceProbe(sourceDefs[sourceIdx], mockProjections, outRef);\n } catch (e) { return err(e); }\n }\n\n function probeTmpSource(input: CommandInput): CommandResult {\n try {\n const outRef = input.params?.['outRef'] as string | undefined;\n const b = input.body as Record<string, unknown> | undefined;\n if (!b) return fail('probeTmpSource requires body with \"source-def\" and \"mock-projections\"');\n const sourceDef = b['source-def'] as Record<string, unknown> | undefined;\n const mockProjections = (b['mock-projections'] ?? {}) as Record<string, unknown>;\n if (!sourceDef) return fail('probeTmpSource body requires \"source-def\"');\n return runSourceProbe(sourceDef, mockProjections, outRef);\n } catch (e) { return err(e); }\n }\n\n function describeTaskExecutorCapabilities(_input: CommandInput): CommandResult {\n try {\n const teRef = configStore().readTaskExecutorRef();\n if (!teRef) return fail('No task-executor registered for this board');\n const stdout = adapter.invokeExecutorSync(teRef, 'describe-capabilities', [], { timeout: 10_000 });\n return ok(JSON.parse(stdout.trim()) as Record<string, unknown>);\n } catch (e) { return err(e); }\n }\n\n function updatesInCardStore(input: CommandInput): CommandResult {\n try {\n const b = input.body as Record<string, unknown> | undefined;\n if (!b || !Array.isArray(b['ops'])) return fail('updatesInCardStore requires body.ops array');\n const ops = b['ops'] as Array<Record<string, unknown>>;\n const store = cardStore();\n for (const op of ops) {\n const opType = op['op'] as string | undefined;\n const id = op['id'] as string | undefined;\n if (!id) return fail('op is missing \"id\"');\n if (opType === 'update') {\n const cardContent = op['card-content'] as LiveCard | undefined;\n if (!cardContent) return fail(`update op for \"${id}\" is missing \"card-content\"`);\n store.writeCard(id, cardContent);\n } else {\n return fail(`Unknown op type: \"${opType ?? '(none)'}\"`);\n }\n }\n return ok();\n } catch (e) { return err(e); }\n }\n\n function readFromCardStore(input: CommandInput): CommandResult<{ cards: Array<{ id: string; 'card-content': LiveCard | null }> }> {\n try {\n const b = input.body as Record<string, unknown> | undefined;\n if (!b || !Array.isArray(b['ids'])) {\n return fail('readFromCardStore requires body.ids array') as CommandResult<{ cards: Array<{ id: string; 'card-content': LiveCard | null }> }>;\n }\n const ids = b['ids'] as string[];\n const store = cardStore();\n const cards = ids.map(id => ({ id, 'card-content': store.readCard(id) }));\n return ok({ cards }) as CommandResult<{ cards: Array<{ id: string; 'card-content': LiveCard | null }> }>;\n } catch (e) { return err(e) as CommandResult<{ cards: Array<{ id: string; 'card-content': LiveCard | null }> }>; }\n }\n\n return {\n validateCard, validateTmpCard,\n probeSource, probeTmpSource,\n describeTaskExecutorCapabilities,\n updatesInCardStore,\n readFromCardStore,\n };\n}\n","import {\n createBoardLiveCardsPublic,\n type BoardPlatformAdapter,\n type CommandInput,\n type CommandResult,\n} from '../common/board-live-cards-public.js';\nimport { parseRef, serializeRef, type KindValueRef, type AtomicRelayLock } from '../common/storage-interface.js';\nimport type { ExecutionRef } from '../common/execution-interface.js';\nimport jsonataSync from '../../card-compute/jsonata-sync.cjs';\n\ndeclare global {\n // Injected by Python host bridge.\n // eslint-disable-next-line no-var\n var __hostCall: (payload: unknown) => unknown;\n // Used by createRequire shim when card-compute asks for jsonata-sync.cjs.\n // eslint-disable-next-line no-var\n var __jsonataSync: unknown;\n // QuickJS callable surface.\n // eslint-disable-next-line no-var\n var pycliBoardInvoke: (payload: BoardInvokePayload) => CommandResult | string;\n}\n\ntype BoardInvokePayload = {\n baseRef: string;\n notifyChannel?: string;\n command:\n | 'init'\n | 'status'\n | 'getCardStoreRef'\n | 'getOutputsStoreRef'\n | 'getOutputsDataObject'\n | 'getAllOutputsDataObjects'\n | 'getOutputsComputedValues'\n | 'getAllOutputsComputedValues'\n | 'removeCard'\n | 'retrigger'\n | 'processAccumulatedEvents'\n | 'upsertCard'\n | 'taskFailed'\n | 'taskProgress'\n | 'sourceDataFetched'\n | 'sourceDataFetchFailure';\n input?: CommandInput;\n};\n\nfunction hostCall<T>(payload: unknown): T {\n return globalThis.__hostCall(payload) as T;\n}\n\nfunction makeLock(scope: string): AtomicRelayLock {\n return {\n tryAcquire(): (() => void) | null {\n const token = hostCall<string | null>({ op: 'lock.tryAcquire', scope });\n if (!token) return null;\n return () => {\n hostCall<boolean>({ op: 'lock.release', scope, token });\n };\n },\n };\n}\n\nfunction createHostAdapter(baseRef: KindValueRef, notifyChannel?: string): BoardPlatformAdapter {\n const scope = baseRef.value;\n\n function makeKv(scopeRoot: string, namespace: string) {\n return {\n read(key: string): unknown | null {\n return hostCall<unknown | null>({ op: 'kv.read', scope: scopeRoot, namespace, key });\n },\n write(key: string, value: unknown): void {\n hostCall<boolean>({ op: 'kv.write', scope: scopeRoot, namespace, key, value });\n },\n delete(key: string): void {\n hostCall<boolean>({ op: 'kv.delete', scope: scopeRoot, namespace, key });\n },\n listKeys(prefix?: string): string[] {\n return hostCall<string[]>({ op: 'kv.list', scope: scopeRoot, namespace, prefix });\n },\n };\n }\n\n return {\n kvStorage(namespace: string) {\n return makeKv(scope, namespace);\n },\n\n kvStorageForRef(ref: string) {\n const parsed = parseRef(ref);\n return makeKv(parsed.value, '');\n },\n\n requestProcessAccumulated() {\n hostCall<boolean>({ op: 'board.requestProcessAccumulated', scope, notifyChannel });\n },\n\n publishBoardChangeNotifications(notifications) {\n if (!notifyChannel || notifications.length === 0) return;\n hostCall<boolean>({ op: 'board.publishNotifications', scope, notifyChannel, notifications });\n },\n\n blobStorage(namespace: string) {\n return {\n read(key: string): string | null {\n return hostCall<string | null>({ op: 'blob.read', scope, namespace, key });\n },\n write(key: string, content: string): void {\n hostCall<boolean>({ op: 'blob.write', scope, namespace, key, content });\n },\n exists(key: string): boolean {\n return hostCall<boolean>({ op: 'blob.exists', scope, namespace, key });\n },\n remove(key: string): void {\n hostCall<boolean>({ op: 'blob.remove', scope, namespace, key });\n },\n };\n },\n\n journalAdapter() {\n return {\n readAllEntries() {\n return hostCall<Array<{ id: string; event: unknown }>>({ op: 'journal.readAllEntries', scope }) as Array<{ id: string; event: unknown }>;\n },\n appendEntry(entry: { id: string; event: unknown }) {\n hostCall<boolean>({ op: 'journal.appendEntry', scope, entry });\n },\n generateId() {\n return hostCall<string>({ op: 'journal.generateId', scope });\n },\n };\n },\n\n lock: makeLock(scope),\n\n selfRef: hostCall<ExecutionRef>({ op: 'self.ref', scope }),\n\n async dispatchExecution(ref: ExecutionRef, args: Record<string, unknown>): Promise<{ dispatched: boolean; error?: string }> {\n return hostCall<{ dispatched: boolean; error?: string }>({\n op: 'execution.dispatch',\n scope,\n ref,\n args,\n });\n },\n\n resolveBlob(ref) {\n const content = hostCall<string | null>({\n op: 'blob.resolveRef',\n scope,\n ref,\n });\n if (content === null) {\n throw new Error(`resolveBlob: blob not found: ${serializeRef(ref)}`);\n }\n return content;\n },\n\n hashFn(value: unknown): string {\n return hostCall<string>({ op: 'hash.computeStableJson', value });\n },\n\n genId(): string {\n return hostCall<string>({ op: 'id.gen' });\n },\n\n onWarn(msg: string): void {\n hostCall<boolean>({ op: 'warn', msg });\n },\n };\n}\n\nasync function invoke(payload: BoardInvokePayload): Promise<CommandResult | string> {\n const baseRef = parseRef(payload.baseRef);\n const board = createBoardLiveCardsPublic(baseRef, createHostAdapter(baseRef, payload.notifyChannel));\n const input = payload.input ?? {};\n\n switch (payload.command) {\n case 'init':\n return board.init(input);\n case 'status':\n return board.status(input);\n case 'getCardStoreRef':\n return board.getCardStoreRef(input);\n case 'getOutputsStoreRef':\n return board.getOutputsStoreRef(input);\n case 'getOutputsDataObject':\n return board.getOutputsDataObject(input);\n case 'getAllOutputsDataObjects':\n return board.getAllOutputsDataObjects(input);\n case 'getOutputsComputedValues':\n return board.getOutputsComputedValues(input);\n case 'getAllOutputsComputedValues':\n return board.getAllOutputsComputedValues(input);\n case 'removeCard':\n return board.removeCard(input);\n case 'retrigger':\n return board.retrigger(input);\n case 'processAccumulatedEvents':\n return board.processAccumulatedEvents(input);\n case 'upsertCard':\n return board.upsertCard(input);\n case 'taskFailed':\n return board.taskFailed(input);\n case 'taskProgress':\n return board.taskProgress(input);\n case 'sourceDataFetched':\n return board.sourceDataFetched(input);\n case 'sourceDataFetchFailure':\n return board.sourceDataFetchFailure(input);\n default:\n return { status: 'fail', error: `Unsupported command: ${(payload as { command?: string }).command ?? 'unknown'}` };\n }\n}\n\nglobalThis.__jsonataSync = jsonataSync;\nglobalThis.pycliBoardInvoke = invoke;\n"]}
|