From 7850c92f9100cb75b6a844045869cee9ca02c1e6 Mon Sep 17 00:00:00 2001 From: Kevin Ross Date: Wed, 22 Jan 2025 15:28:55 -0600 Subject: [PATCH 1/6] use lerna for additional npm release, add verification via tsc, bring in timestamp fn that was incompatible with nodenext --- .github/workflows/release.yml | 2 +- package.json | 2 +- packages/logger-node/package.json | 3 +- packages/logger-node/src/NodeLogWriter.ts | 3 +- .../src/__tests__/timestamp.test.ts | 13 ++++++ packages/logger-node/src/timestamp.ts | 40 +++++++++++++++++++ yarn.lock | 14 ++----- 7 files changed, 61 insertions(+), 16 deletions(-) create mode 100644 packages/logger-node/src/__tests__/timestamp.test.ts create mode 100644 packages/logger-node/src/timestamp.ts diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 29180f2..67d76f0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,5 +34,5 @@ jobs: # cannot run this on branches because it doesn't keep the canary version from auto shipit, can only secondarily publish to npm for main branch - name: Publish secondarily to npm - run: npm publish --access=public --ignore-scripts --@alienfast:registry='https://registry.npmjs.org' + run: lerna exec --stream --parallel -- npm publish --access=public --ignore-scripts --@alienfast:registry='https://registry.npmjs.org' if: github.ref == 'refs/heads/main' diff --git a/package.json b/package.json index 1130c64..3d4db83 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "clean:yarn": "node ./scripts/clean-yarn.js", "reset": "node ./scripts/reset.js", "lint:fix": "eslint . --cache --fix", - "test": "lerna exec --stream --parallel -- yarn test", + "test": "yarn build:ide && lerna exec --stream --parallel -- yarn test", "release": "yarn auto shipit", "build:finalize": "lerna exec --stream --parallel -- buildFinalize" }, diff --git a/packages/logger-node/package.json b/packages/logger-node/package.json index 46543d9..9f8e3eb 100644 --- a/packages/logger-node/package.json +++ b/packages/logger-node/package.json @@ -19,8 +19,7 @@ "postpack": "clean-package restore -c ../../.clean-package.json" }, "dependencies": { - "chalk": "^5.4.1", - "time-stamp": "^2.2.0" + "chalk": "^5.4.1" }, "devDependencies": { "@alienfast/logger": "^11.0.31", diff --git a/packages/logger-node/src/NodeLogWriter.ts b/packages/logger-node/src/NodeLogWriter.ts index 649eb87..25bfb76 100644 --- a/packages/logger-node/src/NodeLogWriter.ts +++ b/packages/logger-node/src/NodeLogWriter.ts @@ -4,7 +4,8 @@ /* eslint-disable no-console */ import { Level, LogWriter } from '@alienfast/logger' import chalk, { ChalkInstance } from 'chalk' -import timestamp from 'time-stamp' + +import { timestamp } from './timestamp.js' // chalk.enabled = true diff --git a/packages/logger-node/src/__tests__/timestamp.test.ts b/packages/logger-node/src/__tests__/timestamp.test.ts new file mode 100644 index 0000000..ed1d912 --- /dev/null +++ b/packages/logger-node/src/__tests__/timestamp.test.ts @@ -0,0 +1,13 @@ +import { describe, expect, it } from 'vitest' + +import { timestamp } from '../timestamp.js' + +describe('timestamp', () => { + const date = new Date('2025-01-02T03:04:05.006Z') + it('should format date', () => { + expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', false, date)).toBe('2025-01-01 21:04:05.006') + expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', true, date)).toBe('2025-01-02 03:04:05.006') + expect(timestamp('HH:mm:ss', false, date)).toBe('21:04:05') + expect(timestamp('HH:mm:ss', true, date)).toBe('03:04:05') + }) +}) diff --git a/packages/logger-node/src/timestamp.ts b/packages/logger-node/src/timestamp.ts new file mode 100644 index 0000000..a93370c --- /dev/null +++ b/packages/logger-node/src/timestamp.ts @@ -0,0 +1,40 @@ +/*! + * time-stamp + * + * Copyright (c) 2015-2018, Jon Schlinkert. + * Released under the MIT License. + */ +const dateRegex = /(?=(YYYY|YY|MM|DD|HH|mm|ss|ms))\1([:/]*)/g +const timespan = { + YYYY: ['getFullYear', 4], + YY: ['getFullYear', 2], + MM: ['getMonth', 2, 1], // getMonth is zero-based, thus the extra increment field + DD: ['getDate', 2], + HH: ['getHours', 2], + mm: ['getMinutes', 2], + ss: ['getSeconds', 2], + ms: ['getMilliseconds', 3], +} as const + +type timespanKeys = keyof typeof timespan + +export const timestamp = function (format: string, utc?: boolean, date?: Date) { + // if (typeof format !== 'string') { + // date = format + // format = 'YYYY-MM-DD' + // } + if (!date) date = new Date() + return format.replace(dateRegex, function (match: string, key: timespanKeys, rest) { + const args = timespan[key] + let name = args[0] + const chars = args[1] + if (utc === true) name = 'getUTC' + name.slice(3) + // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access + const val = '00' + String((date as any)[name]() + (args[2] || 0)) + return val.slice(-chars) + (rest || '') + }) +} + +// timestamp.utc = function (str, date) { +// return timestamp(str, date, true) +// } diff --git a/yarn.lock b/yarn.lock index 2ccac9c..d57d8cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,7 +115,7 @@ __metadata: version: 0.0.0-use.local resolution: "@alienfast/logger-browser@workspace:packages/logger-browser" dependencies: - "@alienfast/logger": "npm:^11.0.30" + "@alienfast/logger": "npm:^11.0.31" clean-package: "npm:^2.2.0" vite: "npm:^6.0.11" vitest: "npm:^3.0.3" @@ -128,10 +128,9 @@ __metadata: version: 0.0.0-use.local resolution: "@alienfast/logger-node@workspace:packages/logger-node" dependencies: - "@alienfast/logger": "npm:^11.0.30" + "@alienfast/logger": "npm:^11.0.31" chalk: "npm:^5.4.1" clean-package: "npm:^2.2.0" - time-stamp: "npm:^2.2.0" vite: "npm:^6.0.11" vitest: "npm:^3.0.3" peerDependencies: @@ -139,7 +138,7 @@ __metadata: languageName: unknown linkType: soft -"@alienfast/logger@npm:^11.0.30, @alienfast/logger@workspace:*, @alienfast/logger@workspace:packages/logger": +"@alienfast/logger@npm:^11.0.31, @alienfast/logger@workspace:*, @alienfast/logger@workspace:packages/logger": version: 0.0.0-use.local resolution: "@alienfast/logger@workspace:packages/logger" dependencies: @@ -9789,13 +9788,6 @@ __metadata: languageName: node linkType: hard -"time-stamp@npm:^2.2.0": - version: 2.2.0 - resolution: "time-stamp@npm:2.2.0" - checksum: 10/b602ea7c86793989fb22cf5aec35307e78af3e3c4f9ef7efdf0dabe296def23684985a55fb56a37143d80256f07f17768916d80995cd197aa3a811470d2e6f54 - languageName: node - linkType: hard - "tinybench@npm:^2.9.0": version: 2.9.0 resolution: "tinybench@npm:2.9.0" From 37cccefc8f2d1613a00de1ca7ec33aebe542665b Mon Sep 17 00:00:00 2001 From: Kevin Ross Date: Wed, 22 Jan 2025 15:34:45 -0600 Subject: [PATCH 2/6] switch test toEqual --- packages/logger-node/src/__tests__/timestamp.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/logger-node/src/__tests__/timestamp.test.ts b/packages/logger-node/src/__tests__/timestamp.test.ts index ed1d912..69b43cf 100644 --- a/packages/logger-node/src/__tests__/timestamp.test.ts +++ b/packages/logger-node/src/__tests__/timestamp.test.ts @@ -5,9 +5,9 @@ import { timestamp } from '../timestamp.js' describe('timestamp', () => { const date = new Date('2025-01-02T03:04:05.006Z') it('should format date', () => { - expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', false, date)).toBe('2025-01-01 21:04:05.006') - expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', true, date)).toBe('2025-01-02 03:04:05.006') - expect(timestamp('HH:mm:ss', false, date)).toBe('21:04:05') - expect(timestamp('HH:mm:ss', true, date)).toBe('03:04:05') + expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', false, date)).toEqual('2025-01-01 21:04:05.006') + expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', true, date)).toEqual('2025-01-02 03:04:05.006') + expect(timestamp('HH:mm:ss', false, date)).toEqual('21:04:05') + expect(timestamp('HH:mm:ss', true, date)).toEqual('03:04:05') }) }) From aa1ea698ff350db7f9f16f1be519cfce512914b1 Mon Sep 17 00:00:00 2001 From: Kevin Ross Date: Wed, 22 Jan 2025 15:48:30 -0600 Subject: [PATCH 3/6] construct test date in a way that is perhaps more portable/reliable --- packages/logger-node/src/__tests__/timestamp.test.ts | 3 ++- packages/logger-node/src/timestamp.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/logger-node/src/__tests__/timestamp.test.ts b/packages/logger-node/src/__tests__/timestamp.test.ts index 69b43cf..767d07a 100644 --- a/packages/logger-node/src/__tests__/timestamp.test.ts +++ b/packages/logger-node/src/__tests__/timestamp.test.ts @@ -3,7 +3,8 @@ import { describe, expect, it } from 'vitest' import { timestamp } from '../timestamp.js' describe('timestamp', () => { - const date = new Date('2025-01-02T03:04:05.006Z') + // const date = new Date('2025-01-02T03:04:05.006Z') + const date = new Date(Date.UTC(2025, 0, 2, 3, 4, 5, 6)) it('should format date', () => { expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', false, date)).toEqual('2025-01-01 21:04:05.006') expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', true, date)).toEqual('2025-01-02 03:04:05.006') diff --git a/packages/logger-node/src/timestamp.ts b/packages/logger-node/src/timestamp.ts index a93370c..6731f84 100644 --- a/packages/logger-node/src/timestamp.ts +++ b/packages/logger-node/src/timestamp.ts @@ -18,7 +18,7 @@ const timespan = { type timespanKeys = keyof typeof timespan -export const timestamp = function (format: string, utc?: boolean, date?: Date) { +export const timestamp = function (format: string, utc: boolean = false, date?: Date) { // if (typeof format !== 'string') { // date = format // format = 'YYYY-MM-DD' From c25ad17548d7caaa90e9f982e2fd0a978524308e Mon Sep 17 00:00:00 2001 From: Kevin Ross Date: Wed, 22 Jan 2025 15:51:06 -0600 Subject: [PATCH 4/6] container ci giving different date results, not sure why, minimize test to timestamps --- packages/logger-node/src/__tests__/timestamp.test.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/logger-node/src/__tests__/timestamp.test.ts b/packages/logger-node/src/__tests__/timestamp.test.ts index 767d07a..2cceae4 100644 --- a/packages/logger-node/src/__tests__/timestamp.test.ts +++ b/packages/logger-node/src/__tests__/timestamp.test.ts @@ -6,8 +6,9 @@ describe('timestamp', () => { // const date = new Date('2025-01-02T03:04:05.006Z') const date = new Date(Date.UTC(2025, 0, 2, 3, 4, 5, 6)) it('should format date', () => { - expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', false, date)).toEqual('2025-01-01 21:04:05.006') - expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', true, date)).toEqual('2025-01-02 03:04:05.006') + // not sure why CI is giving me trouble - perhaps date settings on container? skip for now + // expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', false, date)).toEqual('2025-01-01 21:04:05.006') + // expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', true, date)).toEqual('2025-01-02 03:04:05.006') expect(timestamp('HH:mm:ss', false, date)).toEqual('21:04:05') expect(timestamp('HH:mm:ss', true, date)).toEqual('03:04:05') }) From 0b9b42d375832dd14410efbc03bed2d7e162b2f2 Mon Sep 17 00:00:00 2001 From: Kevin Ross Date: Wed, 22 Jan 2025 15:52:26 -0600 Subject: [PATCH 5/6] minimal timestamp test for hours --- packages/logger-node/src/__tests__/timestamp.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/logger-node/src/__tests__/timestamp.test.ts b/packages/logger-node/src/__tests__/timestamp.test.ts index 2cceae4..f6e493b 100644 --- a/packages/logger-node/src/__tests__/timestamp.test.ts +++ b/packages/logger-node/src/__tests__/timestamp.test.ts @@ -10,6 +10,6 @@ describe('timestamp', () => { // expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', false, date)).toEqual('2025-01-01 21:04:05.006') // expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', true, date)).toEqual('2025-01-02 03:04:05.006') expect(timestamp('HH:mm:ss', false, date)).toEqual('21:04:05') - expect(timestamp('HH:mm:ss', true, date)).toEqual('03:04:05') + // expect(timestamp('HH:mm:ss', true, date)).toEqual('03:04:05') }) }) From 663d9f5e57e6ba1ec11491364d2c2653d4c25738 Mon Sep 17 00:00:00 2001 From: Kevin Ross Date: Wed, 22 Jan 2025 15:55:10 -0600 Subject: [PATCH 6/6] timstamp only test utc values due to CI difference in time zone settings --- packages/logger-node/src/__tests__/timestamp.test.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/logger-node/src/__tests__/timestamp.test.ts b/packages/logger-node/src/__tests__/timestamp.test.ts index f6e493b..b576a13 100644 --- a/packages/logger-node/src/__tests__/timestamp.test.ts +++ b/packages/logger-node/src/__tests__/timestamp.test.ts @@ -6,10 +6,11 @@ describe('timestamp', () => { // const date = new Date('2025-01-02T03:04:05.006Z') const date = new Date(Date.UTC(2025, 0, 2, 3, 4, 5, 6)) it('should format date', () => { - // not sure why CI is giving me trouble - perhaps date settings on container? skip for now + // CI gives me grief on these values when using non-utc, so just test utc + // expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', false, date)).toEqual('2025-01-01 21:04:05.006') - // expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', true, date)).toEqual('2025-01-02 03:04:05.006') - expect(timestamp('HH:mm:ss', false, date)).toEqual('21:04:05') - // expect(timestamp('HH:mm:ss', true, date)).toEqual('03:04:05') + expect(timestamp('YYYY-MM-DD HH:mm:ss.ms', true, date)).toEqual('2025-01-02 03:04:05.006') + // expect(timestamp('HH:mm:ss', false, date)).toEqual('21:04:05') + expect(timestamp('HH:mm:ss', true, date)).toEqual('03:04:05') }) })