UNPKG

@onflow/flow-js-testing

Version:

This package will expose a set of utility methods, to allow Cadence code testing with libraries like Jest

59 lines (54 loc) 1.95 kB
/* * Flow JS Testing * * Copyright 2020-2021 Dapper Labs, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import {getContractAddress} from "./contract" import {defaultsByName} from "./file" import {replaceImportAddresses, extractImports} from "@onflow/flow-cadut" // TODO remove once flow-cadut is updated to support short-hand imports const importTokenPart = `(?:"[\\w\\d]+?")|(?:[\\w\\d]+)` const importRegex = new RegExp( `(^\\s*import\\s+)((?:${importTokenPart}[^\\n]*?,?[^\\n]?)+)[^\\n]*?(from)?[^\\n]*?$`, "gium" ) export const fixShorthandImports = code => { return code.replaceAll(importRegex, found => { if (found.indexOf(" from") !== -1) return found const whatMatch = found.matchAll(/"([^"\s]+)"\s*,?\s*?/giu) return [...whatMatch] .map(what => `import ${what[1]} from "./${what[1]}.cdc"`) .join("\n") }) } /** * Resolves import addresses defined in code template * @param {string} code - Cadence template code. * @returns {{string:string}} - name/address map */ export const resolveImports = async code => { const addressMap = {} const importList = extractImports(fixShorthandImports(code)) for (const key in importList) { if (defaultsByName[key]) { addressMap[key] = defaultsByName[key] } else { const address = await getContractAddress(key) addressMap[key] = address } } return addressMap } export {replaceImportAddresses, extractImports}