05-07-a
This commit is contained in:
parent
4e8885aac7
commit
52bbf288a9
2
.gitignore
vendored
2
.gitignore
vendored
@ -336,3 +336,5 @@ ASALocalRun/
|
||||
.extensions-vscode-oss
|
||||
.extensions-vscode-insiders
|
||||
.vscode/.UserSecrets/secrets.json
|
||||
hn.png
|
||||
index.exe
|
||||
|
3
bun.lock
3
bun.lock
@ -5,6 +5,7 @@
|
||||
"name": "bun-001",
|
||||
"dependencies": {
|
||||
"puppeteer": "^24.8.1",
|
||||
"typescript": "^5.8.3",
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -185,6 +186,8 @@
|
||||
|
||||
"typed-query-selector": ["typed-query-selector@2.12.0", "", {}, "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg=="],
|
||||
|
||||
"typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="],
|
||||
|
||||
"undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
|
||||
|
||||
"wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="],
|
||||
|
186
descriptor.js
Normal file
186
descriptor.js
Normal file
@ -0,0 +1,186 @@
|
||||
"use strict";
|
||||
|
||||
const twoAlphaPattern = /^[a-zA-z]{2,3}/;
|
||||
const processOnlyB = /^[a-zA-z][0-9]{2,4}$/;
|
||||
// const reactorNumberPattern = /^[0-9]{2}--/;
|
||||
// const id = /[-]?([QP][0-9]{4,}|[0-9]{5,})[-]?/;
|
||||
const normal = /^[0-9]{2}[.][0-9]{1}[.]?[0-9]{0,1}/;
|
||||
const fileSystemSafe = /[\\,\/,\:,\*,\?,\"",\<,\>,\|]/;
|
||||
|
||||
const values = [
|
||||
{ text: '', rds: '', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: '' },
|
||||
{ text: '12-123456-1234', rds: '123456', psn: '1234', reactor: '12', layer: '', zone: '', employee: '', lot: '' },
|
||||
{ text: '12-1234567-1234', rds: '1234567', psn: '1234', reactor: '12', layer: '', zone: '', employee: '', lot: '' },
|
||||
{ text: '12-12345678-1234', rds: '12345678', psn: '1234', reactor: '12', layer: '', zone: '', employee: '', lot: '' },
|
||||
{ text: '123456', rds: '123456', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: '' },
|
||||
{ text: '1T123456', rds: '123456', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: '' },
|
||||
{ text: 'MP', rds: '', psn: '', reactor: '', layer: '', zone: '', employee: 'MP', lot: '' },
|
||||
{ text: '12-123456-1234.2-1', rds: '123456', psn: '1234', reactor: '12', layer: '2', zone: '1', employee: '', lot: '' },
|
||||
{ text: '12-1234567-1234.2-1', rds: '1234567', psn: '1234', reactor: '12', layer: '2', zone: '1', employee: '', lot: '' },
|
||||
{ text: '12-12345678-1234.2-1', rds: '12345678', psn: '1234', reactor: '12', layer: '2', zone: '1', employee: '', lot: '' },
|
||||
{ text: '12-123456-1234.02-1', rds: '123456', psn: '1234', reactor: '12', layer: '2', zone: '1', employee: '', lot: '' },
|
||||
{ text: '12-1234567-1234.02-1', rds: '1234567', psn: '1234', reactor: '12', layer: '2', zone: '1', employee: '', lot: '' },
|
||||
{ text: '12-12345678-1234.02-1', rds: '12345678', psn: '1234', reactor: '12', layer: '2', zone: '1', employee: '', lot: '' },
|
||||
{ text: '20', rds: '', psn: '', reactor: '20', layer: '', zone: '', employee: '', lot: '' },
|
||||
{ text: '20.2', rds: '', psn: '', reactor: '20', layer: '2', zone: '', employee: '', lot: '' },
|
||||
{ text: '20.2.1', rds: '', psn: '', reactor: '20', layer: '2', zone: '1', employee: '', lot: '' },
|
||||
{ text: '20.1.1', rds: '', psn: '', reactor: '20', layer: '1', zone: '1', employee: '', lot: '' },
|
||||
{ text: 'P2-LOW-RR', rds: '', psn: 'RR', reactor: 'P2', layer: '', zone: '', employee: '', lot: '' },
|
||||
{ text: 'i171308.1.51', rds: 'i171308.1.51', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: '' },
|
||||
{ text: 'o171308.1.51', rds: 'o171308.1.51', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: '' },
|
||||
{ text: 'O171308.1.51', rds: 'O171308.1.51', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: '' },
|
||||
{ text: '171308.1.51', rds: '171308.1.51', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: '' },
|
||||
{ text: '75-QP1414-SPLIT4', rds: '', psn: 'SPLIT4', reactor: '75', layer: '', zone: '', employee: '', lot: '' },
|
||||
{ text: 'B48', rds: '', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: 'B48' },
|
||||
{ text: 'B48', rds: '', psn: '', reactor: '', layer: '', zone: '', employee: '', lot: 'B48' },
|
||||
];
|
||||
|
||||
function tryParseInt(str, defaultValue) {
|
||||
const parsedValue = parseInt(str);
|
||||
return isNaN(parsedValue) ? defaultValue : parsedValue;
|
||||
}
|
||||
|
||||
function getReactorAndRDS(defaultReactor, defaultRDS, text, formattedText, segments) {
|
||||
let result = {};
|
||||
let rds;
|
||||
let reactor;
|
||||
let rdsValue;
|
||||
if (text == null || text.length === 0 || segments.length === 0 || formattedText == null || formattedText.length === 0)
|
||||
reactor = defaultReactor;
|
||||
else
|
||||
reactor = segments[0];
|
||||
if (segments.length <= 1 || !tryParseInt(segments[1], false) || rdsValue < 99)
|
||||
rds = defaultRDS;
|
||||
else
|
||||
rds = segments[1];
|
||||
if (reactor.length > 3) {
|
||||
rds = reactor;
|
||||
reactor = defaultReactor;
|
||||
}
|
||||
result = { reactor: reactor, rds: rds };
|
||||
return result;
|
||||
}
|
||||
|
||||
function getLayerAndPSN(defaultLayer, defaultPSN, segments) {
|
||||
let result = {};
|
||||
let psn;
|
||||
let layer;
|
||||
if (segments.length <= 2) {
|
||||
psn = defaultPSN;
|
||||
layer = defaultLayer;
|
||||
}
|
||||
else {
|
||||
let segmentsB = segments[2].split('.');
|
||||
psn = segmentsB[0];
|
||||
if (segmentsB.length <= 1)
|
||||
layer = defaultLayer;
|
||||
else {
|
||||
layer = segmentsB[1];
|
||||
if (layer.length > 1 && layer[0] === '0')
|
||||
layer = layer.substring(1);
|
||||
}
|
||||
}
|
||||
result = { layer: layer, psn: psn };
|
||||
return result;
|
||||
}
|
||||
|
||||
function getZone(segments) {
|
||||
let result = '';
|
||||
if (segments.length <= 3)
|
||||
result = '';
|
||||
else {
|
||||
result = segments[3];
|
||||
if (result.length > 1 && result[0] === '0')
|
||||
result = result.substring(1);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function getValue(text) {
|
||||
let result = {};
|
||||
let lot = '';
|
||||
let psn = '';
|
||||
let rds = '';
|
||||
let zone = '';
|
||||
let layer = '';
|
||||
let reactor = '';
|
||||
let employee = '';
|
||||
let defaultPSN = '';
|
||||
let defaultRDS = '';
|
||||
let defaultZone = '';
|
||||
let defaultLayer = '';
|
||||
let defaultReactor = '';
|
||||
let defaultEmployee = '';
|
||||
if (text.match(processOnlyB)) {
|
||||
lot = text.toUpperCase();
|
||||
psn = defaultPSN;
|
||||
rds = defaultRDS;
|
||||
zone = defaultZone;
|
||||
layer = defaultLayer;
|
||||
reactor = defaultReactor;
|
||||
employee = defaultEmployee;
|
||||
}
|
||||
else if (text == null || text.length === 0 || (text.length == 2 && text.match(twoAlphaPattern))) {
|
||||
lot = text;
|
||||
employee = lot;
|
||||
psn = defaultPSN;
|
||||
rds = defaultRDS;
|
||||
zone = defaultZone;
|
||||
layer = defaultLayer;
|
||||
reactor = defaultReactor;
|
||||
}
|
||||
else if (text.match(normal)) {
|
||||
let segments = text.split('.');
|
||||
lot = text;
|
||||
psn = defaultPSN;
|
||||
rds = defaultRDS;
|
||||
layer = segments[1];
|
||||
reactor = segments[0];
|
||||
employee = defaultEmployee;
|
||||
if (segments.length <= 2)
|
||||
zone = defaultZone;
|
||||
else
|
||||
zone = segments[2];
|
||||
}
|
||||
else {
|
||||
// Remove illegal characters \/:*?"<>| found in the Lot.
|
||||
lot = text.replace(fileSystemSafe, "_").split('\r')[0].split('\n')[0];
|
||||
if (lot.length > 2 && lot[0] == '1' && (lot[1] == 'T' || lot[1] == 't'))
|
||||
lot = lot.substring(2);
|
||||
let segments = lot.split('-');
|
||||
// let hasRDS = lot.match(id);
|
||||
let reactorAndRDS = getReactorAndRDS(defaultReactor, defaultRDS, text, lot, segments);
|
||||
reactor = reactorAndRDS.reactor;
|
||||
rds = reactorAndRDS.rds;
|
||||
let layerAndPSN = getLayerAndPSN(defaultLayer, defaultPSN, segments);
|
||||
layer = layerAndPSN.layer;
|
||||
psn = layerAndPSN.psn;
|
||||
zone = getZone(segments);
|
||||
if (segments.length <= 4)
|
||||
employee = defaultEmployee;
|
||||
else
|
||||
employee = segments[4];
|
||||
}
|
||||
result = { rds: rds, psn: psn, reactor: reactor, layer: layer, zone: zone, employee: employee, lot: lot };
|
||||
return result;
|
||||
};
|
||||
|
||||
values.forEach(element => {
|
||||
let value = getValue(element.text);
|
||||
if (value.rds !== element.rds)
|
||||
console.error("RDS doesn't match!");
|
||||
else if (value.psn !== element.psn)
|
||||
console.error("PSN doesn't match!");
|
||||
else if (value.reactor !== element.reactor)
|
||||
console.error("Reactor doesn't match!");
|
||||
else if (value.layer !== element.layer)
|
||||
console.error("Layer doesn't match!");
|
||||
else if (value.zone !== element.zone)
|
||||
console.error("Zone doesn't match!");
|
||||
else if (value.employee !== element.employee)
|
||||
console.error("Employee doesn't match!");
|
||||
else if (value.lot !== element.lot)
|
||||
console.error("Lot doesn't match!");
|
||||
else
|
||||
console.info('Match');
|
||||
});
|
106
epoch.js
Normal file
106
epoch.js
Normal file
@ -0,0 +1,106 @@
|
||||
"use strict";
|
||||
|
||||
// DateTime normal = DateTime.Now.ToUniversalTime();
|
||||
// logger.LogInformation("Now - ToUniversalTime: {ticks}", normal.Ticks);
|
||||
// DateTime utc1970DateTime = new(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
||||
// logger.LogInformation("utc1970DateTime: {ticks}", utc1970DateTime.Ticks);
|
||||
// logger.LogInformation("Subtract: {ticks}", DateTime.Now.Subtract(utc1970DateTime).Ticks);
|
||||
// var epoch = new Date('1970-01-01T00:00:01');
|
||||
// console.log("epoch: " + epoch.valueOf());
|
||||
// var date = new Date();
|
||||
// var timezoneOffset = date.getTimezoneOffset();
|
||||
// console.log("timezoneOffset: " + timezoneOffset);
|
||||
// var secondsAfter = (date.getTime().valueOf() + timezoneOffset) * 10000;
|
||||
// var ticks = secondsAfter + 621355968000000000;
|
||||
// console.log("ticks: " + ticks);
|
||||
// var dateText = ticks + " - " + date.toString();
|
||||
// console.log("dateText: " + dateText);
|
||||
// DateTime utcMeDateTime = new(1980, 1, 17, 0, 0, 0, DateTimeKind.Utc);
|
||||
// long meTotalSeconds = (long)Math.Floor(fileInfo.LastWriteTime.ToUniversalTime().Subtract(utcMeDateTime).TotalSeconds);
|
||||
|
||||
// epoch: 25201000
|
||||
// ticks: 638665132483790000
|
||||
// dateText: 638665132483790000 - Wed Nov 06 2024 10:55:58 GMT-0700 (Mountain Standard Time)
|
||||
// Now - To: 638665132334594771
|
||||
// 638665135325760000
|
||||
// 638665136814890000
|
||||
// utc1970DateTime: 621355968000000000
|
||||
|
||||
function getDateText() {
|
||||
let result;
|
||||
const now = new Date();
|
||||
const time = now.getTime();
|
||||
const year = now.getFullYear();
|
||||
const start = new Date(year, 0, 0);
|
||||
const oneDay = 1000 * 60 * 60 * 24;
|
||||
const timezoneOffset = now.getTimezoneOffset();
|
||||
const diff = (now - start) + ((start.getTimezoneOffset() - timezoneOffset) * 60 * 1000);
|
||||
const day = Math.floor(diff / oneDay);
|
||||
console.log('Day of year: ' + day);
|
||||
var season = year + "-";
|
||||
if (day < 78)
|
||||
season = season + "0.Winter";
|
||||
else if (day < 124)
|
||||
season = season + "1.Spring";
|
||||
else if (day < 171)
|
||||
season = season + "2.Spring";
|
||||
else if (day < 217)
|
||||
season = season + "3.Summer";
|
||||
else if (day < 264)
|
||||
season = season + "4.Summer";
|
||||
else if (day < 309)
|
||||
season = season + "5.Fall";
|
||||
else if (day < 354)
|
||||
season = season + "6.Fall";
|
||||
else
|
||||
season = season + "7.Winter";
|
||||
const seconds = time.valueOf() + timezoneOffset;
|
||||
const epoch = seconds * 10000;
|
||||
const ticks = epoch + 621355968000000000;
|
||||
result = seconds + " - " + ticks + " - " + now.toString();
|
||||
return result;
|
||||
}
|
||||
|
||||
const dateText = getDateText();
|
||||
console.log("dateText: " + dateText);
|
||||
|
||||
function getPath() {
|
||||
let result;
|
||||
const original = "d:\\5-Other-Small\\Kanban\\Year-Season\\2025\\2025-0.Winter\\1737913505637";
|
||||
const segments = original.split('\\');
|
||||
result = segments.slice(0, -3).join('\\') + '\\2021\\2021-0.Summer\\123';
|
||||
return result;
|
||||
}
|
||||
|
||||
const path = getPath();
|
||||
console.log("path: " + path);
|
||||
|
||||
// https://tickstodatetime.wassupy.com/?ticks=638784250251441727
|
||||
|
||||
function getInfinityQS(value, sequence) {
|
||||
let result;
|
||||
if (sequence.length < 18)
|
||||
result = [value];
|
||||
else {
|
||||
const now = new Date();
|
||||
const epochHour = 36000000000;
|
||||
const epochTicks = 621355968000000000;
|
||||
const timezoneHourOffset = now.getTimezoneOffset() / 60;
|
||||
const timezoneOffset = timezoneHourOffset * epochHour;
|
||||
const milliseconds = (sequence - epochTicks + timezoneOffset) / 10000;
|
||||
const flooredMilliseconds = Math.floor(milliseconds / (60 * 1000)) * (60 * 1000);
|
||||
const ceiledMilliseconds = Math.ceil(milliseconds / (60 * 1000)) * (60 * 1000);
|
||||
result = [(flooredMilliseconds / 1000), (ceiledMilliseconds / 1000)];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
const date = '3/26/2025';
|
||||
const infinityQS = 1742853453;
|
||||
const sequence = '638784250251441727';
|
||||
const values = getInfinityQS(date, sequence);
|
||||
console.info("InfinityQS: " + values);
|
||||
if (values[0] < infinityQS && values[1] > infinityQS)
|
||||
console.info("InfinityQS: Pass");
|
||||
else
|
||||
console.warn("InfinityQS: Fail");
|
119
index.js
119
index.js
@ -1,106 +1,17 @@
|
||||
"use strict";
|
||||
import puppeteer from 'puppeteer';
|
||||
|
||||
// DateTime normal = DateTime.Now.ToUniversalTime();
|
||||
// logger.LogInformation("Now - ToUniversalTime: {ticks}", normal.Ticks);
|
||||
// DateTime utc1970DateTime = new(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
||||
// logger.LogInformation("utc1970DateTime: {ticks}", utc1970DateTime.Ticks);
|
||||
// logger.LogInformation("Subtract: {ticks}", DateTime.Now.Subtract(utc1970DateTime).Ticks);
|
||||
// var epoch = new Date('1970-01-01T00:00:01');
|
||||
// console.log("epoch: " + epoch.valueOf());
|
||||
// var date = new Date();
|
||||
// var timezoneOffset = date.getTimezoneOffset();
|
||||
// console.log("timezoneOffset: " + timezoneOffset);
|
||||
// var secondsAfter = (date.getTime().valueOf() + timezoneOffset) * 10000;
|
||||
// var ticks = secondsAfter + 621355968000000000;
|
||||
// console.log("ticks: " + ticks);
|
||||
// var dateText = ticks + " - " + date.toString();
|
||||
// console.log("dateText: " + dateText);
|
||||
// DateTime utcMeDateTime = new(1980, 1, 17, 0, 0, 0, DateTimeKind.Utc);
|
||||
// long meTotalSeconds = (long)Math.Floor(fileInfo.LastWriteTime.ToUniversalTime().Subtract(utcMeDateTime).TotalSeconds);
|
||||
|
||||
// epoch: 25201000
|
||||
// ticks: 638665132483790000
|
||||
// dateText: 638665132483790000 - Wed Nov 06 2024 10:55:58 GMT-0700 (Mountain Standard Time)
|
||||
// Now - To: 638665132334594771
|
||||
// 638665135325760000
|
||||
// 638665136814890000
|
||||
// utc1970DateTime: 621355968000000000
|
||||
|
||||
function getDateText() {
|
||||
let result;
|
||||
const now = new Date();
|
||||
const time = now.getTime();
|
||||
const year = now.getFullYear();
|
||||
const start = new Date(year, 0, 0);
|
||||
const oneDay = 1000 * 60 * 60 * 24;
|
||||
const timezoneOffset = now.getTimezoneOffset();
|
||||
const diff = (now - start) + ((start.getTimezoneOffset() - timezoneOffset) * 60 * 1000);
|
||||
const day = Math.floor(diff / oneDay);
|
||||
console.log('Day of year: ' + day);
|
||||
var season = year + "-";
|
||||
if (day < 78)
|
||||
season = season + "0.Winter";
|
||||
else if (day < 124)
|
||||
season = season + "1.Spring";
|
||||
else if (day < 171)
|
||||
season = season + "2.Spring";
|
||||
else if (day < 217)
|
||||
season = season + "3.Summer";
|
||||
else if (day < 264)
|
||||
season = season + "4.Summer";
|
||||
else if (day < 309)
|
||||
season = season + "5.Fall";
|
||||
else if (day < 354)
|
||||
season = season + "6.Fall";
|
||||
else
|
||||
season = season + "7.Winter";
|
||||
const seconds = time.valueOf() + timezoneOffset;
|
||||
const epoch = seconds * 10000;
|
||||
const ticks = epoch + 621355968000000000;
|
||||
result = seconds + " - " + ticks + " - " + now.toString();
|
||||
return result;
|
||||
const browser = await puppeteer.launch();
|
||||
try {
|
||||
const page = await browser.newPage();
|
||||
await page.goto('https://news.ycombinator.com', {
|
||||
waitUntil: 'networkidle2',
|
||||
});
|
||||
await page.screenshot({
|
||||
path: 'hn.png',
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
|
||||
const dateText = getDateText();
|
||||
console.log("dateText: " + dateText);
|
||||
|
||||
function getPath() {
|
||||
let result;
|
||||
const original = "d:\\5-Other-Small\\Kanban\\Year-Season\\2025\\2025-0.Winter\\1737913505637";
|
||||
const segments = original.split('\\');
|
||||
result = segments.slice(0, -3).join('\\') + '\\2021\\2021-0.Summer\\123';
|
||||
return result;
|
||||
}
|
||||
|
||||
const path = getPath();
|
||||
console.log("path: " + path);
|
||||
|
||||
// https://tickstodatetime.wassupy.com/?ticks=638784250251441727
|
||||
|
||||
function getInfinityQS(value, sequence) {
|
||||
let result;
|
||||
if (sequence.length < 18)
|
||||
result = [value];
|
||||
else {
|
||||
const now = new Date();
|
||||
const epochHour = 36000000000;
|
||||
const epochTicks = 621355968000000000;
|
||||
const timezoneHourOffset = now.getTimezoneOffset() / 60;
|
||||
const timezoneOffset = timezoneHourOffset * epochHour;
|
||||
const milliseconds = (sequence - epochTicks + timezoneOffset) / 10000;
|
||||
const flooredMilliseconds = Math.floor(milliseconds / (60 * 1000)) * (60 * 1000);
|
||||
const ceiledMilliseconds = Math.ceil(milliseconds / (60 * 1000)) * (60 * 1000);
|
||||
result = [(flooredMilliseconds / 1000), (ceiledMilliseconds / 1000)];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
const date = '3/26/2025';
|
||||
const infinityQS = 1742853453;
|
||||
const sequence = '638784250251441727';
|
||||
const values = getInfinityQS(date, sequence);
|
||||
console.info("InfinityQS: " + values);
|
||||
if (values[0] < infinityQS && values[1] > infinityQS)
|
||||
console.info("InfinityQS: Pass");
|
||||
else
|
||||
console.warn("InfinityQS: Fail");
|
||||
finally {
|
||||
await browser.close();
|
||||
}
|
@ -8,6 +8,7 @@
|
||||
"license": "ISC",
|
||||
"type": "commonjs",
|
||||
"dependencies": {
|
||||
"puppeteer": "^24.8.1"
|
||||
"puppeteer": "^24.8.1",
|
||||
"typescript": "^5.8.3"
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user