Skip to content

Commit

Permalink
feat: add support for country codes in jurisdiction
Browse files Browse the repository at this point in the history
  • Loading branch information
monitz87 committed Sep 23, 2020
1 parent 8d19fdb commit 29577bc
Show file tree
Hide file tree
Showing 8 changed files with 1,362 additions and 85 deletions.
90 changes: 77 additions & 13 deletions scripts/fetchDefinitions.js
Expand Up @@ -4,12 +4,82 @@ const path = require('path');
const fs = require('fs');
const rimraf = require('rimraf');
const util = require('util');
const { upperFirst, toLower } = require('lodash');

const definitionsDir = path.resolve('src', 'polkadot', 'polymesh');
const generatedDir = path.resolve('src', 'generated');

const dirName = path.resolve('src', 'polkadot', 'polymesh');
const urlPath = 'https://pme.polymath.network/code';

rimraf.sync(dirName);
fs.mkdirSync(dirName);
rimraf.sync(definitionsDir);
fs.mkdirSync(definitionsDir);

rimraf.sync(generatedDir);
fs.mkdirSync(generatedDir);

function writeDefinitions(schemaObj) {
fs.writeFileSync(
path.resolve(definitionsDir, 'definitions.ts'),
`/* eslint-disable @typescript-eslint/camelcase */\nexport default ${util.inspect(schemaObj, {
compact: false,
depth: null,
})}`
);
}

/**
* Autogenerate types and conversion utils which are too large to write manually
*/
function writeGenerated({ types }) {
const instanbulIgnore = '/* istanbul ignore file */';
let typesFile = `${instanbulIgnore}
`;
let utilsFile = `${instanbulIgnore}
import { CountryCode as MeshCountryCode } from 'polymesh-types/types';
import { Context } from '~/base';
import { CountryCode } from '~/types';
`;

let countryCodeEnum = 'export enum CountryCode {';
let countryCodeFunctions = `/**
* @hidden
*/
export function countryCodeToMeshCountryCode(countryCode: CountryCode, context: Context): MeshCountryCode {
return context.polymeshApi.createType('CountryCode', countryCode);
}
/**
* @hidden
*/
export function meshCountryCodeToCountryCode(meshCountryCode: MeshCountryCode): CountryCode {`;

const countryCodes = types.CountryCode._enum;
countryCodes.forEach((code, index) => {
const isLast = index === countryCodes.length - 1;
const pascalCaseCode = upperFirst(toLower(code));

countryCodeEnum = `${countryCodeEnum}\n ${pascalCaseCode} = '${code}',${
isLast ? '\n}\n' : ''
}`;

const returnStatement = `return CountryCode.${pascalCaseCode}`;
if (isLast) {
countryCodeFunctions = `${countryCodeFunctions}\n ${returnStatement};\n}`;
} else {
countryCodeFunctions = `${countryCodeFunctions}\n if (meshCountryCode.is${pascalCaseCode}) {\n ${returnStatement};\n }\n`;
}
});

typesFile = `${typesFile}${countryCodeEnum}\n`;
utilsFile = `${utilsFile}${countryCodeFunctions}\n`;

fs.writeFileSync(path.resolve(generatedDir, 'types.ts'), typesFile);
fs.writeFileSync(path.resolve(generatedDir, 'utils.ts'), utilsFile);
}

https.get(`${urlPath}/polymesh_schema.json`, res => {
const chunks = [];
Expand All @@ -19,15 +89,9 @@ https.get(`${urlPath}/polymesh_schema.json`, res => {

res.on('end', () => {
const schema = Buffer.concat(chunks);
fs.writeFileSync(
path.resolve(dirName, 'definitions.ts'),
`/* eslint-disable @typescript-eslint/camelcase */\nexport default ${util.inspect(
JSON.parse(schema),
{
compact: false,
depth: null,
}
)}`
);
const schemaObj = JSON.parse(schema);

writeDefinitions(schemaObj);
writeGenerated(schemaObj);
});
});
2 changes: 1 addition & 1 deletion scripts/generateTxTags.js
Expand Up @@ -2,7 +2,7 @@
const Metadata = require('@polkadot/metadata/Metadata').default;
const { w3cwebsocket } = require('websocket');
const { TypeRegistry } = require('@polkadot/types/create');
const { stringCamelCase, stringLowerFirst, stringUpperFirst } = require('@polkadot/util');
const { stringCamelCase, stringUpperFirst } = require('@polkadot/util');
const fs = require('fs');
const path = require('path');

Expand Down
251 changes: 251 additions & 0 deletions src/generated/types.ts
@@ -0,0 +1,251 @@
/* istanbul ignore file */

export enum CountryCode {
Af = 'AF',
Ax = 'AX',
Al = 'AL',
Dz = 'DZ',
As = 'AS',
Ad = 'AD',
Ao = 'AO',
Ai = 'AI',
Aq = 'AQ',
Ag = 'AG',
Ar = 'AR',
Am = 'AM',
Aw = 'AW',
Au = 'AU',
At = 'AT',
Az = 'AZ',
Bs = 'BS',
Bh = 'BH',
Bd = 'BD',
Bb = 'BB',
By = 'BY',
Be = 'BE',
Bz = 'BZ',
Bj = 'BJ',
Bm = 'BM',
Bt = 'BT',
Bo = 'BO',
Ba = 'BA',
Bw = 'BW',
Bv = 'BV',
Br = 'BR',
Vg = 'VG',
Io = 'IO',
Bn = 'BN',
Bg = 'BG',
Bf = 'BF',
Bi = 'BI',
Kh = 'KH',
Cm = 'CM',
Ca = 'CA',
Cv = 'CV',
Ky = 'KY',
Cf = 'CF',
Td = 'TD',
Cl = 'CL',
Cn = 'CN',
Hk = 'HK',
Mo = 'MO',
Cx = 'CX',
Cc = 'CC',
Co = 'CO',
Km = 'KM',
Cg = 'CG',
Cd = 'CD',
Ck = 'CK',
Cr = 'CR',
Ci = 'CI',
Hr = 'HR',
Cu = 'CU',
Cy = 'CY',
Cz = 'CZ',
Dk = 'DK',
Dj = 'DJ',
Dm = 'DM',
Do = 'DO',
Ec = 'EC',
Eg = 'EG',
Sv = 'SV',
Gq = 'GQ',
Er = 'ER',
Ee = 'EE',
Et = 'ET',
Fk = 'FK',
Fo = 'FO',
Fj = 'FJ',
Fi = 'FI',
Fr = 'FR',
Gf = 'GF',
Pf = 'PF',
Tf = 'TF',
Ga = 'GA',
Gm = 'GM',
Ge = 'GE',
De = 'DE',
Gh = 'GH',
Gi = 'GI',
Gr = 'GR',
Gl = 'GL',
Gd = 'GD',
Gp = 'GP',
Gu = 'GU',
Gt = 'GT',
Gg = 'GG',
Gn = 'GN',
Gw = 'GW',
Gy = 'GY',
Ht = 'HT',
Hm = 'HM',
Va = 'VA',
Hn = 'HN',
Hu = 'HU',
Is = 'IS',
In = 'IN',
Id = 'ID',
Ir = 'IR',
Iq = 'IQ',
Ie = 'IE',
Im = 'IM',
Il = 'IL',
It = 'IT',
Jm = 'JM',
Jp = 'JP',
Je = 'JE',
Jo = 'JO',
Kz = 'KZ',
Ke = 'KE',
Ki = 'KI',
Kp = 'KP',
Kr = 'KR',
Kw = 'KW',
Kg = 'KG',
La = 'LA',
Lv = 'LV',
Lb = 'LB',
Ls = 'LS',
Lr = 'LR',
Ly = 'LY',
Li = 'LI',
Lt = 'LT',
Lu = 'LU',
Mk = 'MK',
Mg = 'MG',
Mw = 'MW',
My = 'MY',
Mv = 'MV',
Ml = 'ML',
Mt = 'MT',
Mh = 'MH',
Mq = 'MQ',
Mr = 'MR',
Mu = 'MU',
Yt = 'YT',
Mx = 'MX',
Fm = 'FM',
Md = 'MD',
Mc = 'MC',
Mn = 'MN',
Me = 'ME',
Ms = 'MS',
Ma = 'MA',
Mz = 'MZ',
Mm = 'MM',
Na = 'NA',
Nr = 'NR',
Np = 'NP',
Nl = 'NL',
An = 'AN',
Nc = 'NC',
Nz = 'NZ',
Ni = 'NI',
Ne = 'NE',
Ng = 'NG',
Nu = 'NU',
Nf = 'NF',
Mp = 'MP',
No = 'NO',
Om = 'OM',
Pk = 'PK',
Pw = 'PW',
Ps = 'PS',
Pa = 'PA',
Pg = 'PG',
Py = 'PY',
Pe = 'PE',
Ph = 'PH',
Pn = 'PN',
Pl = 'PL',
Pt = 'PT',
Pr = 'PR',
Qa = 'QA',
Re = 'RE',
Ro = 'RO',
Ru = 'RU',
Rw = 'RW',
Bl = 'BL',
Sh = 'SH',
Kn = 'KN',
Lc = 'LC',
Mf = 'MF',
Pm = 'PM',
Vc = 'VC',
Ws = 'WS',
Sm = 'SM',
St = 'ST',
Sa = 'SA',
Sn = 'SN',
Rs = 'RS',
Sc = 'SC',
Sl = 'SL',
Sg = 'SG',
Sk = 'SK',
Si = 'SI',
Sb = 'SB',
So = 'SO',
Za = 'ZA',
Gs = 'GS',
Ss = 'SS',
Es = 'ES',
Lk = 'LK',
Sd = 'SD',
Sr = 'SR',
Sj = 'SJ',
Sz = 'SZ',
Se = 'SE',
Ch = 'CH',
Sy = 'SY',
Tw = 'TW',
Tj = 'TJ',
Tz = 'TZ',
Th = 'TH',
Tl = 'TL',
Tg = 'TG',
Tk = 'TK',
To = 'TO',
Tt = 'TT',
Tn = 'TN',
Tr = 'TR',
Tm = 'TM',
Tc = 'TC',
Tv = 'TV',
Ug = 'UG',
Ua = 'UA',
Ae = 'AE',
Gb = 'GB',
Us = 'US',
Um = 'UM',
Uy = 'UY',
Uz = 'UZ',
Vu = 'VU',
Ve = 'VE',
Vn = 'VN',
Vi = 'VI',
Wf = 'WF',
Eh = 'EH',
Ye = 'YE',
Zm = 'ZM',
Zw = 'ZW',
}

0 comments on commit 29577bc

Please sign in to comment.