Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
/**
* ISO 4217 currencies
*/
export const activeCurrencies: { code: string; name: string }[] = [
{ code: "AED", name: "UAE Dirham" },
{ code: "AUD", name: "Australian Dollar" },
{ code: "BRL", name: "Brazilian Real" },
{ code: "CAD", name: "Canadian Dollar" },
{ code: "CHF", name: "Swiss Franc" },
{ code: "CNY", name: "Yuan Renminbi" },
{ code: "EUR", name: "Euro" },
{ code: "GBP", name: "Pound Sterling" },
{ code: "IDR", name: "Rupiah" },
{ code: "JPY", name: "Yen" },
{ code: "KRW", name: "Won" },
{ code: "KWD", name: "Kuwaiti Dinar" },
{ code: "MXN", name: "Mexican Peso" },
{ code: "OMR", name: "Rial Omani" },
{ code: "PEN", name: "Sol" },
{ code: "QAR", name: "Qatari Rial" },
{ code: "RUB", name: "Russian Ruble" },
{ code: "SGD", name: "Singapore Dollar" },
{ code: "UAH", name: "Hryvnia" },
{ code: "USD", name: "US Dollar" },
{ code: "ZAR", name: "Rand" },
{ code: "AFN", name: "Afghani" },
{ code: "ALL", name: "Lek" },
{ code: "AMD", name: "Armenian Dram" },
{ code: "ANG", name: "Netherlands Antillean Guilder" },
{ code: "AOA", name: "Kwanza" },
{ code: "ARS", name: "Argentine Peso" },
{ code: "AWG", name: "Aruban Florin" },
{ code: "AZN", name: "Azerbaijan Manat" },
{ code: "BAM", name: "Convertible Mark" },
{ code: "BBD", name: "Barbados Dollar" },
{ code: "BDT", name: "Taka" },
{ code: "BGN", name: "Bulgarian Lev" },
{ code: "BHD", name: "Bahraini Dinar" },
{ code: "BIF", name: "Burundi Franc" },
{ code: "BMD", name: "Bermudian Dollar" },
{ code: "BND", name: "Brunei Dollar" },
{ code: "BOB", name: "Boliviano" },
{ code: "BSD", name: "Bahamian Dollar" },
{ code: "BTN", name: "Ngultrum" },
{ code: "BWP", name: "Pula" },
{ code: "BYN", name: "Belarusian Ruble" },
{ code: "BZD", name: "Belize Dollar" },
{ code: "CDF", name: "Congolese Franc" },
{ code: "CLP", name: "Chilean Peso" },
{ code: "COP", name: "Colombian Peso" },
{ code: "CRC", name: "Costa Rican Colon" },
{ code: "CUP", name: "Cuban Peso" },
{ code: "CVE", name: "Cabo Verde Escudo" },
{ code: "CZK", name: "Czech Koruna" },
{ code: "DJF", name: "Djibouti Franc" },
{ code: "DKK", name: "Danish Krone" },
{ code: "DOP", name: "Dominican Peso" },
{ code: "DZD", name: "Algerian Dinar" },
{ code: "EGP", name: "Egyptian Pound" },
{ code: "ERN", name: "Nakfa" },
{ code: "ETB", name: "Ethiopian Birr" },
{ code: "FJD", name: "Fiji Dollar" },
{ code: "FKP", name: "Falkland Islands Pound" },
{ code: "GEL", name: "Lari" },
{ code: "GHS", name: "Ghana Cedi" },
{ code: "GIP", name: "Gibraltar Pound" },
{ code: "GMD", name: "Dalasi" },
{ code: "GNF", name: "Guinean Franc" },
{ code: "GTQ", name: "Quetzal" },
{ code: "GYD", name: "Guyana Dollar" },
{ code: "HKD", name: "Hong Kong Dollar" },
{ code: "HNL", name: "Lempira" },
{ code: "HTG", name: "Gourde" },
{ code: "HUF", name: "Forint" },
{ code: "ILS", name: "New Israeli Sheqel" },
{ code: "INR", name: "Indian Rupee" },
{ code: "IQD", name: "Iraqi Dinar" },
{ code: "IRR", name: "Iranian Rial" },
{ code: "ISK", name: "Iceland Krona" },
{ code: "JMD", name: "Jamaican Dollar" },
{ code: "JOD", name: "Jordanian Dinar" },
{ code: "KES", name: "Kenyan Shilling" },
{ code: "KGS", name: "Som" },
{ code: "KHR", name: "Riel" },
{ code: "KMF", name: "Comorian Franc" },
{ code: "KPW", name: "North Korean Won" },
{ code: "KYD", name: "Cayman Islands Dollar" },
{ code: "KZT", name: "Tenge" },
{ code: "LAK", name: "Lao Kip" },
{ code: "LBP", name: "Lebanese Pound" },
{ code: "LKR", name: "Sri Lanka Rupee" },
{ code: "LRD", name: "Liberian Dollar" },
{ code: "LSL", name: "Loti" },
{ code: "LYD", name: "Libyan Dinar" },
{ code: "MAD", name: "Moroccan Dirham" },
{ code: "MDL", name: "Moldovan Leu" },
{ code: "MGA", name: "Malagasy Ariary" },
{ code: "MKD", name: "Denar" },
{ code: "MMK", name: "Kyat" },
{ code: "MNT", name: "Tugrik" },
{ code: "MOP", name: "Pataca" },
{ code: "MRU", name: "Ouguiya" },
{ code: "MUR", name: "Mauritius Rupee" },
{ code: "MVR", name: "Rufiyaa" },
{ code: "MWK", name: "Malawi Kwacha" },
{ code: "MYR", name: "Malaysian Ringgit" },
{ code: "MZN", name: "Mozambique Metical" },
{ code: "NAD", name: "Namibia Dollar" },
{ code: "NGN", name: "Naira" },
{ code: "NIO", name: "Cordoba Oro" },
{ code: "NOK", name: "Norwegian Krone" },
{ code: "NPR", name: "Nepalese Rupee" },
{ code: "NZD", name: "New Zealand Dollar" },
{ code: "PAB", name: "Balboa" },
{ code: "PGK", name: "Kina" },
{ code: "PHP", name: "Philippine Peso" },
{ code: "PKR", name: "Pakistan Rupee" },
{ code: "PLN", name: "Zloty" },
{ code: "PYG", name: "Guarani" },
{ code: "RON", name: "Romanian Leu" },
{ code: "RSD", name: "Serbian Dinar" },
{ code: "RWF", name: "Rwanda Franc" },
{ code: "SAR", name: "Saudi Riyal" },
{ code: "SBD", name: "Solomon Islands Dollar" },
{ code: "SCR", name: "Seychelles Rupee" },
{ code: "SDG", name: "Sudanese Pound" },
{ code: "SEK", name: "Swedish Krona" },
{ code: "SHP", name: "Saint Helena Pound" },
{ code: "SLE", name: "Leone" },
{ code: "SOS", name: "Somali Shilling" },
{ code: "SRD", name: "Surinam Dollar" },
{ code: "SSP", name: "South Sudanese Pound" },
{ code: "STN", name: "Dobra" },
{ code: "SVC", name: "El Salvador Colon" },
{ code: "SYP", name: "Syrian Pound" },
{ code: "SZL", name: "Lilangeni" },
{ code: "THB", name: "Baht" },
{ code: "TJS", name: "Somoni" },
{ code: "TMT", name: "Turkmenistan New Manat" },
{ code: "TND", name: "Tunisian Dinar" },
{ code: "TOP", name: "Pa'anga" },
{ code: "TRY", name: "Turkish Lira" },
{ code: "TTD", name: "Trinidad and Tobago Dollar" },
{ code: "TWD", name: "New Taiwan Dollar" },
{ code: "TZS", name: "Tanzanian Shilling" },
{ code: "UGX", name: "Uganda Shilling" },
{ code: "UYU", name: "Peso Uruguayo" },
{ code: "UZS", name: "Uzbekistan Sum" },
{ code: "VES", name: "Bolivar Soberano" },
{ code: "VND", name: "Dong" },
{ code: "VUV", name: "Vatu" },
{ code: "WST", name: "Tala" },
{ code: "XAF", name: "CFA Franc BEAC" },
{ code: "XCD", name: "East Caribbean Dollar" },
{ code: "XCG", name: "Caribbean Guilder" },
{ code: "XOF", name: "CFA Franc BCEAO" },
{ code: "XPF", name: "CFP Franc" },
{ code: "YER", name: "Yemeni Rial" },
{ code: "ZMW", name: "Zambian Kwacha" },
{ code: "ZWG", name: "Zimbabwe Gold" },
];
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import { blockProtocolDataTypes } from "@local/hash-isomorphic-utils/ontology-type-ids";

import { activeCurrencies } from "../currencies";
import { createSystemDataTypeIfNotExists } from "../util";

import type { MigrationFunction } from "../types";

// Currencies with a well-known symbol; the rest display with their ISO code.
const currencySymbols: Record<string, string> = {
USD: "$",
GBP: "£",
EUR: "€",
JPY: "¥",
CNY: "¥",
INR: "₹",
};

const migrate: MigrationFunction = async ({
context,
authentication,
migrationState,
}) => {
const currencyDataType = await createSystemDataTypeIfNotExists(
context,
authentication,
{
dataTypeDefinition: {
allOf: [{ $ref: blockProtocolDataTypes.number.dataTypeId }],
abstract: true,
title: "Currency",
description:
"A system of money in common use within a specific environment over time, especially for people in a nation state.",
type: "number",
},
conversions: {},
webShortname: "h",
migrationState,
},
);

for (const { code, name } of activeCurrencies) {
const symbol = currencySymbols[code];
await createSystemDataTypeIfNotExists(context, authentication, {
dataTypeDefinition: {
allOf: [{ $ref: currencyDataType.schema.$id }],
title: code,
description: `An amount denominated in ${name} (ISO 4217 ${code}).`,
type: "number",
...(symbol ? { label: { left: symbol } } : {}),
},
conversions: {},
webShortname: "h",
migrationState,
});
}
Comment on lines +41 to +55

return migrationState;
};

export default migrate;
Loading
Loading