From 9c3560cff1cd1a267a5914bf3885b87857b0161e Mon Sep 17 00:00:00 2001 From: tadelesh Date: Fri, 31 Oct 2025 12:03:00 +0800 Subject: [PATCH 1/2] add build-in time module and export `createModule` function --- packages/go/src/builtins/index.ts | 2 + packages/go/src/builtins/time/time.ts | 199 ++++++++++++++++++++++++++ packages/go/src/index.ts | 1 + 3 files changed, 202 insertions(+) create mode 100644 packages/go/src/builtins/time/time.ts diff --git a/packages/go/src/builtins/index.ts b/packages/go/src/builtins/index.ts index 4235c718..4152c23b 100644 --- a/packages/go/src/builtins/index.ts +++ b/packages/go/src/builtins/index.ts @@ -1,9 +1,11 @@ import { fmt } from "./fmt/fmt.js"; import { io } from "./io/io.js"; import { net } from "./net/net.js"; +import { time } from "./time/time.js"; export const std = { io, fmt, net, + time, }; diff --git a/packages/go/src/builtins/time/time.ts b/packages/go/src/builtins/time/time.ts new file mode 100644 index 00000000..e8d99553 --- /dev/null +++ b/packages/go/src/builtins/time/time.ts @@ -0,0 +1,199 @@ +import { createModule, StrictDescriptor } from "../../create-module.js"; + +export const time = createModule( + "time", + { + kind: "package", + members: { + // Functions + After: { kind: "function" }, + AfterFunc: { kind: "function" }, + Date: { kind: "function" }, + FixedZone: { kind: "function" }, + LoadLocation: { kind: "function" }, + LoadLocationFromTZData: { kind: "function" }, + NewTicker: { kind: "function" }, + NewTimer: { kind: "function" }, + Now: { kind: "function" }, + Parse: { kind: "function" }, + ParseDuration: { kind: "function" }, + ParseInLocation: { kind: "function" }, + Since: { kind: "function" }, + Sleep: { kind: "function" }, + Tick: { kind: "function" }, + Unix: { kind: "function" }, + UnixMicro: { kind: "function" }, + UnixMilli: { kind: "function" }, + Until: { kind: "function" }, + + // Constants - Time format layouts + Layout: { kind: "var" }, + ANSIC: { kind: "var" }, + UnixDate: { kind: "var" }, + RubyDate: { kind: "var" }, + RFC822: { kind: "var" }, + RFC822Z: { kind: "var" }, + RFC850: { kind: "var" }, + RFC1123: { kind: "var" }, + RFC1123Z: { kind: "var" }, + RFC3339: { kind: "var" }, + RFC3339Nano: { kind: "var" }, + Kitchen: { kind: "var" }, + Stamp: { kind: "var" }, + StampMilli: { kind: "var" }, + StampMicro: { kind: "var" }, + StampNano: { kind: "var" }, + DateTime: { kind: "var" }, + DateOnly: { kind: "var" }, + TimeOnly: { kind: "var" }, + + // Constants - Duration values + Nanosecond: { kind: "var" }, + Microsecond: { kind: "var" }, + Millisecond: { kind: "var" }, + Second: { kind: "var" }, + Minute: { kind: "var" }, + Hour: { kind: "var" }, + + // Constants - Month values + January: { kind: "var" }, + February: { kind: "var" }, + March: { kind: "var" }, + April: { kind: "var" }, + May: { kind: "var" }, + June: { kind: "var" }, + July: { kind: "var" }, + August: { kind: "var" }, + September: { kind: "var" }, + October: { kind: "var" }, + November: { kind: "var" }, + December: { kind: "var" }, + + // Constants - Weekday values + Sunday: { kind: "var" }, + Monday: { kind: "var" }, + Tuesday: { kind: "var" }, + Wednesday: { kind: "var" }, + Thursday: { kind: "var" }, + Friday: { kind: "var" }, + Saturday: { kind: "var" }, + + // Variables + UTC: { kind: "var" }, + Local: { kind: "var" }, + Duration: { + kind: "type", + members: { + Abs: { kind: "field" }, + Hours: { kind: "field" }, + Microseconds: { kind: "field" }, + Milliseconds: { kind: "field" }, + Minutes: { kind: "field" }, + Nanoseconds: { kind: "field" }, + Round: { kind: "field" }, + Seconds: { kind: "field" }, + String: { kind: "field" }, + Truncate: { kind: "field" }, + }, + }, + Location: { + kind: "type", + members: { + String: { kind: "field" }, + }, + }, + Month: { + kind: "type", + members: { + String: { kind: "field" }, + }, + }, + ParseError: { + kind: "type", + members: { + Layout: { kind: "field" }, + Value: { kind: "field" }, + LayoutElem: { kind: "field" }, + ValueElem: { kind: "field" }, + Message: { kind: "field" }, + Error: { kind: "field" }, + }, + }, + Ticker: { + kind: "type", + members: { + C: { kind: "field" }, + Reset: { kind: "field" }, + Stop: { kind: "field" }, + }, + }, + Time: { + kind: "type", + members: { + Add: { kind: "field" }, + AddDate: { kind: "field" }, + After: { kind: "field" }, + AppendBinary: { kind: "field" }, + AppendFormat: { kind: "field" }, + AppendText: { kind: "field" }, + Before: { kind: "field" }, + Clock: { kind: "field" }, + Compare: { kind: "field" }, + Date: { kind: "field" }, + Day: { kind: "field" }, + Equal: { kind: "field" }, + Format: { kind: "field" }, + GoString: { kind: "field" }, + GobDecode: { kind: "field" }, + GobEncode: { kind: "field" }, + Hour: { kind: "field" }, + ISOWeek: { kind: "field" }, + In: { kind: "field" }, + IsDST: { kind: "field" }, + IsZero: { kind: "field" }, + Local: { kind: "field" }, + Location: { kind: "field" }, + MarshalBinary: { kind: "field" }, + MarshalJSON: { kind: "field" }, + MarshalText: { kind: "field" }, + Minute: { kind: "field" }, + Month: { kind: "field" }, + Nanosecond: { kind: "field" }, + Round: { kind: "field" }, + Second: { kind: "field" }, + String: { kind: "field" }, + Sub: { kind: "field" }, + Truncate: { kind: "field" }, + UTC: { kind: "field" }, + Unix: { kind: "field" }, + UnixMicro: { kind: "field" }, + UnixMilli: { kind: "field" }, + UnixNano: { kind: "field" }, + UnmarshalBinary: { kind: "field" }, + UnmarshalJSON: { kind: "field" }, + UnmarshalText: { kind: "field" }, + Weekday: { kind: "field" }, + Year: { kind: "field" }, + YearDay: { kind: "field" }, + Zone: { kind: "field" }, + ZoneBounds: { kind: "field" }, + }, + }, + Timer: { + kind: "type", + members: { + C: { kind: "field" }, + Reset: { kind: "field" }, + Stop: { kind: "field" }, + }, + }, + Weekday: { + kind: "type", + members: { + String: { kind: "field" }, + }, + }, + }, + } satisfies StrictDescriptor, + true, +); diff --git a/packages/go/src/index.ts b/packages/go/src/index.ts index c119d5e3..4c14f146 100644 --- a/packages/go/src/index.ts +++ b/packages/go/src/index.ts @@ -1,5 +1,6 @@ export * from "./builtins/index.js"; export * from "./components/index.js"; +export * from "./create-module.js"; export * from "./name-policy.js"; export * from "./scopes/index.js"; export * from "./symbols/index.js"; From b62e1daff73253111677ad6c6239a1891b6374ae Mon Sep 17 00:00:00 2001 From: tadelesh Date: Tue, 4 Nov 2025 10:40:26 +0800 Subject: [PATCH 2/2] changeset --- .chronus/changes/go-add-time-module-2025-10-4-10-40-8.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .chronus/changes/go-add-time-module-2025-10-4-10-40-8.md diff --git a/.chronus/changes/go-add-time-module-2025-10-4-10-40-8.md b/.chronus/changes/go-add-time-module-2025-10-4-10-40-8.md new file mode 100644 index 00000000..890aaaae --- /dev/null +++ b/.chronus/changes/go-add-time-module-2025-10-4-10-40-8.md @@ -0,0 +1,7 @@ +--- +changeKind: feature +packages: + - "@alloy-js/go" +--- + +Add build-in time module and export `createModule` function. \ No newline at end of file