Skip to content

Commit

Permalink
Continued DT refactor #3
Browse files Browse the repository at this point in the history
  • Loading branch information
benkeen committed Dec 27, 2022
1 parent 84d8778 commit 8b6abb8
Show file tree
Hide file tree
Showing 54 changed files with 982 additions and 704 deletions.
20 changes: 10 additions & 10 deletions client/_pluginWebWorkers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,24 @@ export default {
"LatLng": "DT-LatLng.worker-6730a5721479c6212b7b11e4e90be4db.js",
"List": "DT-List.worker-a599fa49e7fa4d989bdc942e535df934.js",
"Names": "DT-Names.worker-1dc3394ae519a323f812f7deb0b98ded.js",
"NormalDistribution": "DT-NormalDistribution.worker-adbc977198013088e21d0c3ad5a62e7e.js",
"NumberRange": "DT-NumberRange.worker-77b6f27542d48c24c3fd49bcef1b53f3.js",
"NormalDistribution": "DT-NormalDistribution.worker-8db53aa8fc61addbeba5f957e7b27f5b.js",
"NumberRange": "DT-NumberRange.worker-f4dfbe5a9b49c0962d8515ff5f18f905.js",
"OrganizationNumber": "DT-OrganizationNumber.worker-68b329da9893e34099c7d8ad5cb9c940.js",
"PAN": "DT-PAN.worker-5286014525f6a2bfe23b12476a19fd24.js",
"PIN": "DT-PIN.worker-769a7dc80a7c0537a2444db40646ab55.js",
"PIN": "DT-PIN.worker-aecbeadadb5c6e2fdd394692ea27b203.js",
"PersonalNumber": "DT-PersonalNumber.worker-68b329da9893e34099c7d8ad5cb9c940.js",
"Phone": "DT-Phone.worker-4e2f68ab566eba840cb7b46b39df420e.js",
"Phone": "DT-Phone.worker-76adaa8ac5389e5ed2730413cd13c46f.js",
"PostalZip": "DT-PostalZip.worker-e47153acc0397e21bb14632a7130084c.js",
"Region": "DT-Region.worker-864db374560e8bff0ee17e932977f40c.js",
"Rut": "DT-Rut.worker-9a54cdf1bb46dcb96b0ccd73c2dd64c2.js",
"Region": "DT-Region.worker-40127c5b40f1480d1bb018abfa143af3.js",
"Rut": "DT-Rut.worker-8a822ff4a0707423090e3aed00a5fa92.js",
"SIRET": "DT-SIRET.worker-f44c41e7c2aac86fcc7ea44124d14cae.js",
"StreetAddress": "DT-StreetAddress.worker-bf4569c17506fe32ab01f00ea4746451.js",
"TextFixed": "DT-TextFixed.worker-789dc70407715cf66d968f161764bc9e.js",
"TextRandom": "DT-TextRandom.worker-c96dd42947c267e9cc6c8ba1b80e3e64.js",
"TextRandom": "DT-TextRandom.worker-e010eafe817c6091a79e219b20260265.js",
"Time": "DT-Time.worker-22db04f79f05b298422686f14d61b60e.js",
"Track1": "DT-Track1.worker-e15140b5a4e249a6f52d0033b0626b3b.js",
"Track2": "DT-Track2.worker-9ed5db1725a4fd856dfbdbfc4b68e5fd.js",
"URLs": "DT-URLs.worker-c38f1f4f46264c2a7dda3bc6114398dd.js",
"Track1": "DT-Track1.worker-f7ceee03e12cb49e135f551f5d0da276.js",
"Track2": "DT-Track2.worker-2ffd1408767f9d2fe59627e0fd96c226.js",
"URLs": "DT-URLs.worker-ddb5e894c41d849c403de4353afe048a.js",
"WeightedList": "DT-WeightedList.worker-c931364a411fbd378abe195cae177fb8.js"
},
"exportTypes": {
Expand Down
1 change: 0 additions & 1 deletion client/src/plugins/dataTypes/BitcoinAddress/bundle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { generate } from './BitcoinAddress.generate';

export { GenerationOptionsType } from './BitcoinAddress';


const bundle: DTBundle = {
initialState,
Options,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { DTGenerateResult, DTGenerationData } from '~types/dataTypes';

export const generate = ({ rowState }: DTGenerationData): DTGenerateResult => {
const { mean, sigma, precision } = rowState;

return {
display: gaussMs(mean, sigma).toFixed(precision)
};
};

// adjust our gaussian random to fit the mean and standard deviation. The division by 4 is an arbitrary value to help
// fit the distribution within our required range, and gives a best fit for stddev = 1.0
export const gaussMs = (mean: number, stddev: number): number => gauss() * (stddev / 4) + mean;

let useExists = false;
let useValue: number;

export const gauss = (): number => {
if (useExists) {
// use value from a previous call to this function
useExists = false;
return useValue;
} else {
// polar form of the Box-Muller transformation
let w = 2.0;
let x = 0;
let y = 0;
while (w >= 1 || w === 0.0) {
x = randomPN();
y = randomPN();
w = (x * x) + (y * y);
}
w = Math.sqrt((-2.0 * Math.log(w)) / w);

// set value for next call to this function
useValue = y * w;
useExists = true;

return x * w;
}
};

// returns random number with a flat distribution from -1 to 1 inclusive
export const randomPN = (): number => (2.0 * Math.random()) - 1.0;
Original file line number Diff line number Diff line change
@@ -1,48 +1,6 @@
import { DTGenerateResult, DTWorkerOnMessage } from '~types/dataTypes';
import { DTWorkerOnMessage } from '~types/dataTypes';
import { generate } from './NormalDistribution.generate';

export const onmessage = (e: DTWorkerOnMessage) => {
postMessage(generate(e.data.rowState));
postMessage(generate(e.data));
};

export const generate = (rowState: any): DTGenerateResult => {
const { mean, sigma, precision } = rowState;

return {
display: gaussMs(mean, sigma).toFixed(precision)
};
};

// adjust our gaussian random to fit the mean and standard deviation. The division by 4 is an arbitrary value to help
// fit the distribution within our required range, and gives a best fit for stddev = 1.0
export const gaussMs = (mean: number, stddev: number): number => gauss() * (stddev / 4) + mean;

let useExists = false;
let useValue: number;

export const gauss = (): number => {
if (useExists) {
// use value from a previous call to this function
useExists = false;
return useValue;
} else {
// polar form of the Box-Muller transformation
let w = 2.0;
let x = 0;
let y = 0;
while (w >= 1 || w === 0.0) {
x = randomPN();
y = randomPN();
w = (x * x) + (y * y);
}
w = Math.sqrt((-2.0 * Math.log(w)) / w);

// set value for next call to this function
useValue = y * w;
useExists = true;

return x * w;
}
};

// returns random number with a flat distribution from -1 to 1 inclusive
export const randomPN = (): number => (2.0 * Math.random()) - 1.0;
4 changes: 3 additions & 1 deletion client/src/plugins/dataTypes/NormalDistribution/bundle.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import { DTBundle } from '~types/dataTypes';
import { initialState, Options, getMetadata } from './NormalDistribution';
import { generate } from './NormalDistribution.generate';

export { NormalDistributionState as GenerationOptionsType } from './NormalDistribution';

const bundle: DTBundle = {
initialState,
Options,
getMetadata
getMetadata,
generate
};

export default bundle;
10 changes: 10 additions & 0 deletions client/src/plugins/dataTypes/NumberRange/NumberRange.generate.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { DTGenerateResult, DTGenerationData } from '~types/dataTypes';
import { WorkerUtils } from "~utils/workerUtils";

export const generate = ({ rowState }: DTGenerationData, utils: WorkerUtils): DTGenerateResult => {
const { min, max } = rowState;

return {
display: utils.randomUtils.getRandomNum(min, max)
};
};
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import utils from '../../../utils';
import { DTWorkerOnMessage } from '~types/dataTypes';
import { generate } from './NumberRange.generate';

let utilsLoaded = false;

Expand All @@ -9,9 +10,5 @@ export const onmessage = (e: DTWorkerOnMessage) => {
utilsLoaded = true;
}

const { min, max } = e.data.rowState;

postMessage({
display: utils.randomUtils.getRandomNum(min, max)
});
postMessage(generate(e.data, utils));
};
4 changes: 3 additions & 1 deletion client/src/plugins/dataTypes/NumberRange/bundle.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { DTBundle } from '~types/dataTypes';
import { initialState, rowStateReducer, Help, Options, getMetadata } from './NumberRange';
import { generate } from './NumberRange.generate';

export { NumberRangeState as GenerationOptionsType } from './NumberRange';

Expand All @@ -8,7 +9,8 @@ const bundle: DTBundle = {
Options,
Help,
rowStateReducer,
getMetadata
getMetadata,
generate
};

export default bundle;
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
import { DTGenerateResult, DTGenerationData } from '~types/dataTypes';
import { WorkerUtils } from '~utils/workerUtils';

// data: GenerationData
export const generate = (data: DTGenerationData, utils: WorkerUtils): DTGenerateResult => {
return { display: '' };
};


/*
private $generatedOrgNrs = array();
static $sep = "-";
* Generate a random personal number, and return the display string and additional meta data for use
* by any other Data Type.
public function generate($generator, $generationContextData) {
$generationOptions = $generationContextData["generationOptions"];
// Default, 10 siffers + '-'
// TODO: support several countries?
static::$sep = self::getOrganisationNumberSeparator($generationOptions["cc_separator"]);
$orgnr = $this->generateRandomSwedishOrganisationNumber(static::$sep);
// pretty sodding unlikely, but just in case!
while (in_array($orgnr, $this->generatedOrgNrs)) {
$orgnr = $this->generateRandomSwedishOrganisationNumber(static::$sep);
}
$this->generatedOrgNrs[] = $orgnr;
return array(
"display" => $orgnr
);
}
// TODO: add support for separator
// TODO: add support for organisation numbers
private static function generateRandomSwedishOrganisationNumber($sep) {
$new_str = "";
$rand = 0;
$cnt = 11; // 10 siffers + 1 increment for separator
for ($i=0; $i<$cnt; $i++) {
switch ($i) {
case 0:
$rand = mt_rand(0, 99);
$new_str .= sprintf("%02d", $rand);
break;
case 2:
$rand = mt_rand(20, 99);
$new_str .= sprintf("%02d", $rand);
break;
case 4:
$rand = mt_rand(0, 99);
$new_str .= sprintf("%02d", $rand);
break;
case 6:
$new_str .= $sep;
break;
case 7:
$rand = mt_rand(0, 999);
$new_str .= sprintf("%03d", $rand);
break;
case 10:
// Same calculation as for personal numbers
// TODO: move to Utils??
$ctrl = DataType_PersonalNumber::recalcCtrl($new_str . "0", $sep);
$new_str .= sprintf("%01d", $ctrl);
break;
default:
break;
}
}
return $new_str;
}
private static function getOrganisationNumberSeparator($separators) {
$separatorList = explode("|", $separators);
$chosenSep = $separatorList[rand(0, count($separatorList)-1)];
// if no separator was entered use '' as default
if ($separators == "") {
$chosenSep = "";
}
return $chosenSep;
}
*/
Original file line number Diff line number Diff line change
@@ -1,88 +1,14 @@
import { DTGenerateResult } from '~types/dataTypes';
import utils from '../../../utils';
import { DTWorkerOnMessage } from '~types/dataTypes';
import { generate } from './OrganizationNumber.generate';

// data: GenerationData
export const generate = (): DTGenerateResult => {
return { display: '' };
};


/*
private $generatedOrgNrs = array();
static $sep = "-";
* Generate a random personal number, and return the display string and additional meta data for use
* by any other Data Type.
public function generate($generator, $generationContextData) {
$generationOptions = $generationContextData["generationOptions"];
let utilsLoaded = false;

// Default, 10 siffers + '-'
// TODO: support several countries?
static::$sep = self::getOrganisationNumberSeparator($generationOptions["cc_separator"]);
$orgnr = $this->generateRandomSwedishOrganisationNumber(static::$sep);
// pretty sodding unlikely, but just in case!
while (in_array($orgnr, $this->generatedOrgNrs)) {
$orgnr = $this->generateRandomSwedishOrganisationNumber(static::$sep);
}
$this->generatedOrgNrs[] = $orgnr;
return array(
"display" => $orgnr
);
export const onmessage = (e: DTWorkerOnMessage) => {
if (!utilsLoaded) {
importScripts(e.data.workerUtilsUrl);
utilsLoaded = true;
}

// TODO: add support for separator
// TODO: add support for organisation numbers
private static function generateRandomSwedishOrganisationNumber($sep) {
$new_str = "";
$rand = 0;
$cnt = 11; // 10 siffers + 1 increment for separator
for ($i=0; $i<$cnt; $i++) {
switch ($i) {
case 0:
$rand = mt_rand(0, 99);
$new_str .= sprintf("%02d", $rand);
break;
case 2:
$rand = mt_rand(20, 99);
$new_str .= sprintf("%02d", $rand);
break;
case 4:
$rand = mt_rand(0, 99);
$new_str .= sprintf("%02d", $rand);
break;
case 6:
$new_str .= $sep;
break;
case 7:
$rand = mt_rand(0, 999);
$new_str .= sprintf("%03d", $rand);
break;
case 10:
// Same calculation as for personal numbers
// TODO: move to Utils??
$ctrl = DataType_PersonalNumber::recalcCtrl($new_str . "0", $sep);
$new_str .= sprintf("%01d", $ctrl);
break;
default:
break;
}
}
return $new_str;
}
private static function getOrganisationNumberSeparator($separators) {
$separatorList = explode("|", $separators);
$chosenSep = $separatorList[rand(0, count($separatorList)-1)];
// if no separator was entered use '' as default
if ($separators == "") {
$chosenSep = "";
}
return $chosenSep;
}
*/
postMessage(generate(e.data, utils));
};

0 comments on commit 8b6abb8

Please sign in to comment.