@mostra/cli 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +18 -2
- package/dist/bin.d.ts +1 -0
- package/dist/bin.js +79 -0
- package/dist/bin.js.map +1 -0
- package/dist/bootstrap-DfEe_yPr.js +113 -0
- package/dist/bootstrap-DfEe_yPr.js.map +1 -0
- package/dist/exit-CBIf8nAU.js +79 -0
- package/dist/exit-CBIf8nAU.js.map +1 -0
- package/dist/flush-BCuWs0Zh.js +718 -0
- package/dist/flush-BCuWs0Zh.js.map +1 -0
- package/dist/index.d.ts +230 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/reference/cli.md +977 -0
- package/dist/reference/diagnostics.json +1264 -0
- package/dist/reference/errors/MOSTRA_A11Y_MINOR.md +23 -0
- package/dist/reference/errors/MOSTRA_A11Y_SERIOUS.md +23 -0
- package/dist/reference/errors/MOSTRA_ACTION_CANCELLED.md +23 -0
- package/dist/reference/errors/MOSTRA_ACTION_EVENT_INVALID.md +23 -0
- package/dist/reference/errors/MOSTRA_ACTION_EXPORT_INVALID.md +23 -0
- package/dist/reference/errors/MOSTRA_ACTION_INTERRUPTED.md +23 -0
- package/dist/reference/errors/MOSTRA_ACTION_RUN_NOT_FOUND.md +23 -0
- package/dist/reference/errors/MOSTRA_ACTION_THREW.md +23 -0
- package/dist/reference/errors/MOSTRA_ACTION_TOO_LARGE.md +23 -0
- package/dist/reference/errors/MOSTRA_ACTION_UNKNOWN_FUNCTION.md +23 -0
- package/dist/reference/errors/MOSTRA_ACTION_UNSERIALIZABLE.md +23 -0
- package/dist/reference/errors/MOSTRA_ARTIFACT_DIR_NOT_EMPTY.md +23 -0
- package/dist/reference/errors/MOSTRA_ARTIFACT_ENTRY_AMBIGUOUS.md +23 -0
- package/dist/reference/errors/MOSTRA_ARTIFACT_NOT_FOUND.md +23 -0
- package/dist/reference/errors/MOSTRA_ARTIFACT_NO_ENTRY.md +23 -0
- package/dist/reference/errors/MOSTRA_ARTIFACT_NO_PAGE.md +23 -0
- package/dist/reference/errors/MOSTRA_ARTIFACT_SOURCE_MISSING.md +23 -0
- package/dist/reference/errors/MOSTRA_ARTIFACT_SOURCE_UNREADABLE.md +23 -0
- package/dist/reference/errors/MOSTRA_ARTIFACT_TEMPLATE_UNKNOWN.md +23 -0
- package/dist/reference/errors/MOSTRA_ARTIFACT_VERSION_COLLECTED.md +23 -0
- package/dist/reference/errors/MOSTRA_ARTIFACT_VERSION_NOT_FOUND.md +23 -0
- package/dist/reference/errors/MOSTRA_BUILD_CRASHED.md +23 -0
- package/dist/reference/errors/MOSTRA_BUILD_FAILED.md +23 -0
- package/dist/reference/errors/MOSTRA_BUILD_TIMEOUT.md +23 -0
- package/dist/reference/errors/MOSTRA_BUILD_UNRESOLVED.md +23 -0
- package/dist/reference/errors/MOSTRA_CLI_CONFIG_UNWRITABLE.md +23 -0
- package/dist/reference/errors/MOSTRA_CLI_UNKNOWN_COMMAND.md +23 -0
- package/dist/reference/errors/MOSTRA_CLI_USAGE.md +23 -0
- package/dist/reference/errors/MOSTRA_CONSOLE_ERROR.md +23 -0
- package/dist/reference/errors/MOSTRA_CONSOLE_WARNING.md +23 -0
- package/dist/reference/errors/MOSTRA_DEP_INSTALL_FAILED.md +23 -0
- package/dist/reference/errors/MOSTRA_DEP_MISSING.md +23 -0
- package/dist/reference/errors/MOSTRA_DEP_NOT_FOUND.md +23 -0
- package/dist/reference/errors/MOSTRA_DEP_OFFLINE.md +23 -0
- package/dist/reference/errors/MOSTRA_DEP_SPEC_INVALID.md +23 -0
- package/dist/reference/errors/MOSTRA_DEP_TIMEOUT.md +23 -0
- package/dist/reference/errors/MOSTRA_DEP_WARM_CONFLICT.md +23 -0
- package/dist/reference/errors/MOSTRA_ENV_BIND_FAILED.md +23 -0
- package/dist/reference/errors/MOSTRA_ENV_BROWSER_MISSING.md +23 -0
- package/dist/reference/errors/MOSTRA_ENV_BUNDLE_DOWNLOAD_FAILED.md +23 -0
- package/dist/reference/errors/MOSTRA_ENV_BUNDLE_INVALID.md +23 -0
- package/dist/reference/errors/MOSTRA_ENV_BUNDLE_UNAVAILABLE.md +23 -0
- package/dist/reference/errors/MOSTRA_ENV_NODE_UNSUPPORTED.md +23 -0
- package/dist/reference/errors/MOSTRA_ENV_PORT_TAKEN.md +23 -0
- package/dist/reference/errors/MOSTRA_ENV_RUNTIME_MISSING.md +23 -0
- package/dist/reference/errors/MOSTRA_ENV_SERVICE_FAILED.md +23 -0
- package/dist/reference/errors/MOSTRA_ENV_SHELL_MISSING.md +23 -0
- package/dist/reference/errors/MOSTRA_ENV_WARM_MISSING.md +23 -0
- package/dist/reference/errors/MOSTRA_FIELD_CONFLICT.md +23 -0
- package/dist/reference/errors/MOSTRA_FIELD_DUPLICATE_ID.md +23 -0
- package/dist/reference/errors/MOSTRA_FIELD_ID_INVALID.md +23 -0
- package/dist/reference/errors/MOSTRA_FIELD_ID_UNSTABLE.md +23 -0
- package/dist/reference/errors/MOSTRA_FIELD_MUTATION_ID_REUSED.md +23 -0
- package/dist/reference/errors/MOSTRA_FIELD_SHARED.md +23 -0
- package/dist/reference/errors/MOSTRA_FIELD_TOO_LARGE.md +23 -0
- package/dist/reference/errors/MOSTRA_FIELD_UNBOUND.md +23 -0
- package/dist/reference/errors/MOSTRA_HOME_DISK_FULL.md +23 -0
- package/dist/reference/errors/MOSTRA_HOME_GC_INCOMPLETE.md +23 -0
- package/dist/reference/errors/MOSTRA_HOME_GONE.md +23 -0
- package/dist/reference/errors/MOSTRA_HOME_INTEGRITY.md +23 -0
- package/dist/reference/errors/MOSTRA_HOME_LEDGER_UNREADABLE.md +23 -0
- package/dist/reference/errors/MOSTRA_HOME_LOCKED.md +23 -0
- package/dist/reference/errors/MOSTRA_HOME_MISMATCH.md +23 -0
- package/dist/reference/errors/MOSTRA_HOME_NOT_ALWAYS_ON.md +23 -0
- package/dist/reference/errors/MOSTRA_HOME_NOT_OWNED.md +23 -0
- package/dist/reference/errors/MOSTRA_HOME_SOCKET_TOO_LONG.md +23 -0
- package/dist/reference/errors/MOSTRA_HOME_TOO_NEW.md +23 -0
- package/dist/reference/errors/MOSTRA_HOST_CONNECTION_CLOSED.md +23 -0
- package/dist/reference/errors/MOSTRA_HOST_CURSOR_COMPACTED.md +23 -0
- package/dist/reference/errors/MOSTRA_HOST_IDENTITY_UNAVAILABLE.md +23 -0
- package/dist/reference/errors/MOSTRA_HOST_INITIALIZE_ORDER.md +23 -0
- package/dist/reference/errors/MOSTRA_HOST_INTERNAL_ERROR.md +23 -0
- package/dist/reference/errors/MOSTRA_HOST_INVALID_PARAMS.md +23 -0
- package/dist/reference/errors/MOSTRA_HOST_MALFORMED.md +23 -0
- package/dist/reference/errors/MOSTRA_HOST_MESSAGE_TOO_LARGE.md +23 -0
- package/dist/reference/errors/MOSTRA_HOST_METHOD_UNKNOWN.md +23 -0
- package/dist/reference/errors/MOSTRA_HOST_NOTIFICATION_UNSUPPORTED.md +23 -0
- package/dist/reference/errors/MOSTRA_HOST_PORT_UNSUPPORTED.md +23 -0
- package/dist/reference/errors/MOSTRA_HOST_REQUEST_ID_REUSED.md +23 -0
- package/dist/reference/errors/MOSTRA_HOST_REVISION_UNSUPPORTED.md +23 -0
- package/dist/reference/errors/MOSTRA_HOST_SHUTDOWN_REFUSED.md +23 -0
- package/dist/reference/errors/MOSTRA_HOST_SUBSCRIPTION_UNKNOWN.md +23 -0
- package/dist/reference/errors/MOSTRA_HOST_TIMEOUT.md +23 -0
- package/dist/reference/errors/MOSTRA_HYGIENE_CONTENT_TYPE.md +23 -0
- package/dist/reference/errors/MOSTRA_HYGIENE_CSRF_MISSING.md +23 -0
- package/dist/reference/errors/MOSTRA_HYGIENE_HEADERS_TOO_LARGE.md +23 -0
- package/dist/reference/errors/MOSTRA_HYGIENE_HOST_REFUSED.md +23 -0
- package/dist/reference/errors/MOSTRA_HYGIENE_NOT_SERVED.md +23 -0
- package/dist/reference/errors/MOSTRA_HYGIENE_ORIGIN_REFUSED.md +23 -0
- package/dist/reference/errors/MOSTRA_HYGIENE_RATE_LIMITED.md +23 -0
- package/dist/reference/errors/MOSTRA_HYGIENE_REQUEST_MALFORMED.md +23 -0
- package/dist/reference/errors/MOSTRA_HYGIENE_SCOPE_DENIED.md +23 -0
- package/dist/reference/errors/MOSTRA_HYGIENE_SESSION_CONFLICT.md +23 -0
- package/dist/reference/errors/MOSTRA_HYGIENE_SESSION_MISSING.md +23 -0
- package/dist/reference/errors/MOSTRA_HYGIENE_TOKEN_INVALID.md +23 -0
- package/dist/reference/errors/MOSTRA_HYGIENE_TOKEN_REVOKED.md +23 -0
- package/dist/reference/errors/MOSTRA_LIVE_SOURCE_FAILED.md +23 -0
- package/dist/reference/errors/MOSTRA_LIVE_TOO_LARGE.md +23 -0
- package/dist/reference/errors/MOSTRA_MANIFEST_INVALID.md +23 -0
- package/dist/reference/errors/MOSTRA_MANIFEST_NOT_LITERAL.md +23 -0
- package/dist/reference/errors/MOSTRA_MANIFEST_UNKNOWN_KEY.md +23 -0
- package/dist/reference/errors/MOSTRA_NETWORK_EXTERNAL_FAILED.md +23 -0
- package/dist/reference/errors/MOSTRA_NETWORK_REQUEST_FAILED.md +23 -0
- package/dist/reference/errors/MOSTRA_PLATFORM_UNSUPPORTED.md +23 -0
- package/dist/reference/errors/MOSTRA_PUBLISH_ID_CONFLICT.md +23 -0
- package/dist/reference/errors/MOSTRA_PUBLISH_SOURCE_CHANGED.md +23 -0
- package/dist/reference/errors/MOSTRA_PUBLISH_VERIFY_FAILED.md +23 -0
- package/dist/reference/errors/MOSTRA_REGRESSION_ACTION_REMOVED.md +23 -0
- package/dist/reference/errors/MOSTRA_REGRESSION_ARIA.md +23 -0
- package/dist/reference/errors/MOSTRA_REGRESSION_FIELD_REMOVED.md +23 -0
- package/dist/reference/errors/MOSTRA_REGRESSION_LIVE_REMOVED.md +23 -0
- package/dist/reference/errors/MOSTRA_REGRESSION_PAGE_REMOVED.md +23 -0
- package/dist/reference/errors/MOSTRA_REGRESSION_PIXELS.md +23 -0
- package/dist/reference/errors/MOSTRA_RUNTIME_BLANK.md +23 -0
- package/dist/reference/errors/MOSTRA_RUNTIME_NOT_READY.md +23 -0
- package/dist/reference/errors/MOSTRA_RUNTIME_PAGE_ERROR.md +23 -0
- package/dist/reference/errors/MOSTRA_RUNTIME_WORKER_CRASHED.md +23 -0
- package/dist/reference/errors/MOSTRA_RUNTIME_WORKER_PARKED.md +23 -0
- package/dist/reference/errors/MOSTRA_SECRET_MISSING.md +23 -0
- package/dist/reference/errors/MOSTRA_SMOKE_BUDGET.md +23 -0
- package/dist/reference/errors/MOSTRA_SMOKE_NO_EFFECT.md +23 -0
- package/dist/reference/errors/MOSTRA_SUBMIT_ALREADY.md +23 -0
- package/dist/reference/errors/MOSTRA_SUBMIT_BLOCKED.md +23 -0
- package/dist/reference/errors/MOSTRA_SUBMIT_CHANNEL_DENIED.md +23 -0
- package/dist/reference/errors/MOSTRA_SUBMIT_NOT_FOUND.md +23 -0
- package/dist/reference/errors/MOSTRA_SUBMIT_POLICY_NONE.md +23 -0
- package/dist/reference/errors/MOSTRA_SUBMIT_REVISION_MOVED.md +23 -0
- package/dist/reference/errors/MOSTRA_SUBMIT_SIGNAL_INVALID.md +23 -0
- package/dist/reference/errors/MOSTRA_SUBMIT_VIEW_INVALID.md +23 -0
- package/dist/reference/errors/MOSTRA_TARGET_UNAVAILABLE.md +23 -0
- package/dist/reference/errors/MOSTRA_TYPE_ERROR.md +23 -0
- package/dist/reference/errors/MOSTRA_TYPE_UNTYPED_PACKAGE.md +23 -0
- package/dist/reference/errors/MOSTRA_VERIFY_ACTION_SKIPPED.md +23 -0
- package/dist/reference/errors/MOSTRA_VERIFY_BASELINE_MISSING.md +23 -0
- package/dist/reference/errors/MOSTRA_VERIFY_CRASHED.md +23 -0
- package/dist/reference/errors/MOSTRA_VERIFY_LIVE_FAILED.md +23 -0
- package/dist/reference/errors/MOSTRA_VERIFY_NO_BASELINE.md +23 -0
- package/dist/reference/errors/MOSTRA_VERIFY_SECRET_MISSING.md +23 -0
- package/dist/reference/errors/MOSTRA_VERIFY_SKIP_CONSEQUENCE.md +23 -0
- package/dist/reference/errors/MOSTRA_VERIFY_TIMEOUT.md +23 -0
- package/dist/reference/telemetry.md +82 -0
- package/dist/run-BJaRnz-Q.js +3824 -0
- package/dist/run-BJaRnz-Q.js.map +1 -0
- package/dist/run-CMyjOm0Q.js +2 -0
- package/dist/telemetry/flush-main.d.ts +1 -0
- package/dist/telemetry/flush-main.js +14 -0
- package/dist/telemetry/flush-main.js.map +1 -0
- package/package.json +62 -3
- package/src/bin.ts +70 -0
- package/src/bootstrap.ts +156 -0
- package/src/browser.ts +186 -0
- package/src/client.ts +313 -0
- package/src/command.ts +147 -0
- package/src/commands/admin.ts +791 -0
- package/src/commands/authoring.ts +244 -0
- package/src/commands/dev.ts +106 -0
- package/src/commands/index.ts +71 -0
- package/src/commands/interaction.ts +288 -0
- package/src/commands/shared.ts +71 -0
- package/src/commands/viewing.ts +153 -0
- package/src/docs.ts +111 -0
- package/src/exit.ts +89 -0
- package/src/help.ts +170 -0
- package/src/home.ts +111 -0
- package/src/index.ts +23 -0
- package/src/node-gate.ts +15 -0
- package/src/parse.ts +246 -0
- package/src/run.ts +387 -0
- package/src/telemetry/decision.ts +101 -0
- package/src/telemetry/events.ts +147 -0
- package/src/telemetry/flush-main.ts +13 -0
- package/src/telemetry/flush.ts +143 -0
- package/src/telemetry/harness.ts +39 -0
- package/src/telemetry/index.ts +318 -0
- package/src/telemetry/store.ts +379 -0
- package/src/telemetry/timezone.ts +72 -0
- package/src/telemetry/words.ts +87 -0
- package/src/telemetry/zone-sets.ts +182 -0
- package/src/telemetry/zones.generated.ts +720 -0
- package/src/version.ts +43 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds the ask-first time zones from tzdata (D140 item 10): every `zone.tab` name of the
|
|
3
|
+
* countries where Mostra asks before sending telemetry, every `backward` alias of those names, the
|
|
4
|
+
* legacy and UTC names, and the set of names tzdata knows at all. `scripts/ask-first-zones.ts`
|
|
5
|
+
* writes the result into `src/telemetry/zones.generated.ts`; a test checks the committed file
|
|
6
|
+
* against this function over the vendored tzdata files in `data/tzdata/`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** The ISO 3166 codes of the countries and territories where Mostra asks first. */
|
|
10
|
+
export const ASK_FIRST_COUNTRIES: readonly string[] = [
|
|
11
|
+
// The EU 27.
|
|
12
|
+
"AT",
|
|
13
|
+
"BE",
|
|
14
|
+
"BG",
|
|
15
|
+
"HR",
|
|
16
|
+
"CY",
|
|
17
|
+
"CZ",
|
|
18
|
+
"DK",
|
|
19
|
+
"EE",
|
|
20
|
+
"FI",
|
|
21
|
+
"FR",
|
|
22
|
+
"DE",
|
|
23
|
+
"GR",
|
|
24
|
+
"HU",
|
|
25
|
+
"IE",
|
|
26
|
+
"IT",
|
|
27
|
+
"LV",
|
|
28
|
+
"LT",
|
|
29
|
+
"LU",
|
|
30
|
+
"MT",
|
|
31
|
+
"NL",
|
|
32
|
+
"PL",
|
|
33
|
+
"PT",
|
|
34
|
+
"RO",
|
|
35
|
+
"SK",
|
|
36
|
+
"SI",
|
|
37
|
+
"ES",
|
|
38
|
+
"SE",
|
|
39
|
+
// The outermost regions with their own codes, and Åland.
|
|
40
|
+
"GP",
|
|
41
|
+
"MQ",
|
|
42
|
+
"GF",
|
|
43
|
+
"RE",
|
|
44
|
+
"YT",
|
|
45
|
+
"MF",
|
|
46
|
+
"AX",
|
|
47
|
+
// The EEA.
|
|
48
|
+
"IS",
|
|
49
|
+
"LI",
|
|
50
|
+
"NO",
|
|
51
|
+
// The UK, the Crown dependencies and Gibraltar.
|
|
52
|
+
"GB",
|
|
53
|
+
"GG",
|
|
54
|
+
"JE",
|
|
55
|
+
"IM",
|
|
56
|
+
"GI",
|
|
57
|
+
// Switzerland, the Faroe Islands, Svalbard and Jan Mayen.
|
|
58
|
+
"CH",
|
|
59
|
+
"FO",
|
|
60
|
+
"SJ",
|
|
61
|
+
// Inside the EU, some of them tzdata links to EU zones.
|
|
62
|
+
"AD",
|
|
63
|
+
"MC",
|
|
64
|
+
"SM",
|
|
65
|
+
"VA",
|
|
66
|
+
];
|
|
67
|
+
|
|
68
|
+
/** Names that are UTC, unknown or legacy European zones, asked first wherever they are. */
|
|
69
|
+
const ASK_FIRST_NAMES: readonly string[] = [
|
|
70
|
+
"CET",
|
|
71
|
+
"EET",
|
|
72
|
+
"WET",
|
|
73
|
+
"MET",
|
|
74
|
+
"UTC",
|
|
75
|
+
"GMT",
|
|
76
|
+
"Universal",
|
|
77
|
+
"Zulu",
|
|
78
|
+
"Greenwich",
|
|
79
|
+
"Factory",
|
|
80
|
+
];
|
|
81
|
+
|
|
82
|
+
/** The ask-first zones and every zone name tzdata knows. */
|
|
83
|
+
export interface ZoneSets {
|
|
84
|
+
readonly version: string;
|
|
85
|
+
readonly askFirst: readonly string[];
|
|
86
|
+
readonly known: readonly string[];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* The `Link TARGET NAME` lines of a tzdata file, with the zone a `#= ZONE` comment names: the one
|
|
91
|
+
* the alias meant before tzdata merged it (`Iceland` links to `Africa/Abidjan`, `#=
|
|
92
|
+
* Atlantic/Reykjavik`).
|
|
93
|
+
*/
|
|
94
|
+
function links(text: string): { target: string; name: string; meant?: string }[] {
|
|
95
|
+
const found: { target: string; name: string; meant?: string }[] = [];
|
|
96
|
+
for (const line of text.split("\n")) {
|
|
97
|
+
const fields = line.replace(/#.*/, "").trim().split(/\s+/);
|
|
98
|
+
if (fields[0] !== "Link" || !fields[1] || !fields[2]) continue;
|
|
99
|
+
const meant = /#=\s*(\S+)/.exec(line)?.[1];
|
|
100
|
+
found.push({ target: fields[1], name: fields[2], ...(meant !== undefined ? { meant } : {}) });
|
|
101
|
+
}
|
|
102
|
+
return found;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** The `Zone NAME …` names of a tzdata file. */
|
|
106
|
+
function zones(text: string): string[] {
|
|
107
|
+
const found: string[] = [];
|
|
108
|
+
for (const line of text.split("\n")) {
|
|
109
|
+
const fields = line.replace(/#.*/, "").trim().split(/\s+/);
|
|
110
|
+
if (fields[0] === "Zone" && fields[1]) found.push(fields[1]);
|
|
111
|
+
}
|
|
112
|
+
return found;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Builds the sets from the tzdata files' texts. */
|
|
116
|
+
export function buildZoneSets(files: {
|
|
117
|
+
readonly version: string;
|
|
118
|
+
readonly zoneTab: string;
|
|
119
|
+
readonly backward: string;
|
|
120
|
+
readonly etcetera: string;
|
|
121
|
+
readonly factory: string;
|
|
122
|
+
}): ZoneSets {
|
|
123
|
+
const countries = new Set(ASK_FIRST_COUNTRIES);
|
|
124
|
+
const known = new Set<string>();
|
|
125
|
+
const askFirst = new Set<string>(ASK_FIRST_NAMES);
|
|
126
|
+
for (const line of files.zoneTab.split("\n")) {
|
|
127
|
+
if (line.startsWith("#") || line.trim() === "") continue;
|
|
128
|
+
const [code, , name] = line.split("\t");
|
|
129
|
+
if (!code || !name) continue;
|
|
130
|
+
known.add(name);
|
|
131
|
+
if (countries.has(code)) askFirst.add(name);
|
|
132
|
+
}
|
|
133
|
+
const etcetera = [...zones(files.etcetera), ...links(files.etcetera).map((link) => link.name)];
|
|
134
|
+
for (const name of etcetera) {
|
|
135
|
+
known.add(name);
|
|
136
|
+
// UTC and its offsets: Etc/* is asked first, whatever its offset (D140 item 10).
|
|
137
|
+
if (name.startsWith("Etc/") || name === "GMT") askFirst.add(name);
|
|
138
|
+
}
|
|
139
|
+
for (const name of zones(files.factory)) known.add(name);
|
|
140
|
+
// Aliases of an ask-first name are ask-first; matched as given, never by their target.
|
|
141
|
+
const backward = links(files.backward);
|
|
142
|
+
let grew = true;
|
|
143
|
+
while (grew) {
|
|
144
|
+
grew = false;
|
|
145
|
+
for (const { target, name, meant } of backward) {
|
|
146
|
+
known.add(name);
|
|
147
|
+
known.add(target);
|
|
148
|
+
const asks = askFirst.has(target) || (meant !== undefined && askFirst.has(meant));
|
|
149
|
+
if (asks && !askFirst.has(name)) {
|
|
150
|
+
askFirst.add(name);
|
|
151
|
+
grew = true;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
for (const name of ASK_FIRST_NAMES) known.add(name);
|
|
156
|
+
return {
|
|
157
|
+
version: files.version.trim(),
|
|
158
|
+
askFirst: [...askFirst].sort(),
|
|
159
|
+
known: [...known].sort(),
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/** The generated module's text. */
|
|
164
|
+
export function zonesModule(sets: ZoneSets): string {
|
|
165
|
+
const list = (names: readonly string[]): string =>
|
|
166
|
+
names.map((name) => ` ${JSON.stringify(name)},`).join("\n");
|
|
167
|
+
return `// Generated by scripts/ask-first-zones.ts from tzdata ${sets.version} (data/tzdata/). Don't edit.
|
|
168
|
+
|
|
169
|
+
/** The tzdata release the zones come from (VERIFIED_FACTS, WP-10). */
|
|
170
|
+
export const TZDATA_VERSION = ${JSON.stringify(sets.version)};
|
|
171
|
+
|
|
172
|
+
/** The time zones where Mostra asks before sending telemetry (D140 item 10), matched as given. */
|
|
173
|
+
export const ASK_FIRST_ZONES: readonly string[] = [
|
|
174
|
+
${list(sets.askFirst)}
|
|
175
|
+
];
|
|
176
|
+
|
|
177
|
+
/** Every zone name tzdata ${sets.version} knows; anything else is an unknown zone. */
|
|
178
|
+
export const KNOWN_ZONES: readonly string[] = [
|
|
179
|
+
${list(sets.known)}
|
|
180
|
+
];
|
|
181
|
+
`;
|
|
182
|
+
}
|