@expo/cli 55.0.8 → 55.0.10

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/build/bin/cli CHANGED
@@ -31,6 +31,7 @@ function _getenv() {
31
31
  };
32
32
  return data;
33
33
  }
34
+ const _events = require("../src/events");
34
35
  function _interop_require_default(obj) {
35
36
  return obj && obj.__esModule ? obj : {
36
37
  default: obj
@@ -78,6 +79,9 @@ function _interop_require_wildcard(obj, nodeInterop) {
78
79
  return newObj;
79
80
  }
80
81
  var _process_version;
82
+ // Setup event logger output
83
+ // NOTE: Done before any console output
84
+ (0, _events.installEventLogger)();
81
85
  // Check Node.js version and issue a loud warning if it's too outdated
82
86
  // This is sent to stderr (console.error) so it doesn't interfere with programmatic commands
83
87
  const NODE_MIN = [
@@ -135,7 +139,7 @@ const args = (0, _arg().default)({
135
139
  });
136
140
  if (args['--version']) {
137
141
  // Version is added in the build script.
138
- console.log("55.0.8");
142
+ console.log("55.0.10");
139
143
  process.exit(0);
140
144
  }
141
145
  if (args['--non-interactive']) {
package/build/bin/cli.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport arg from 'arg';\nimport chalk from 'chalk';\nimport Debug from 'debug';\nimport { boolish } from 'getenv';\n\n// Check Node.js version and issue a loud warning if it's too outdated\n// This is sent to stderr (console.error) so it doesn't interfere with programmatic commands\nconst NODE_MIN = [20, 19, 4];\nconst nodeVersion = process.version?.slice(1).split('.', 3).map(Number);\nif (nodeVersion[0] < NODE_MIN[0] || (nodeVersion[0] === NODE_MIN[0] && nodeVersion[1] < NODE_MIN[1])) {\n console.error(\n chalk.red`{bold Node.js (${process.version}) is outdated and unsupported.}`\n + chalk.red` Please update to a newer Node.js LTS version (required: >=${NODE_MIN.join('.')})\\n`\n + chalk.red`Go to: https://nodejs.org/en/download\\n`\n );\n}\n\n// Setup before requiring `debug`.\nif (boolish('EXPO_DEBUG', false)) {\n Debug.enable('expo:*');\n} else if (Debug.enabled('expo:')) {\n process.env.EXPO_DEBUG = '1';\n}\n\nconst defaultCmd = 'start';\n\nexport type Command = (argv?: string[]) => void;\n\nconst commands: { [command: string]: () => Promise<Command> } = {\n // Add a new command here\n // NOTE(EvanBacon): Ensure every bundler-related command sets `NODE_ENV` as expected for the command.\n run: () => import('../src/run/index.js').then((i) => i.expoRun),\n 'run:ios': () => import('../src/run/ios/index.js').then((i) => i.expoRunIos),\n 'run:android': () => import('../src/run/android/index.js').then((i) => i.expoRunAndroid),\n start: () => import('../src/start/index.js').then((i) => i.expoStart),\n prebuild: () => import('../src/prebuild/index.js').then((i) => i.expoPrebuild),\n config: () => import('../src/config/index.js').then((i) => i.expoConfig),\n export: () => import('../src/export/index.js').then((i) => i.expoExport),\n 'export:web': () => import('../src/export/web/index.js').then((i) => i.expoExportWeb),\n 'export:embed': () => import('../src/export/embed/index.js').then((i) => i.expoExportEmbed),\n\n serve: () => import('../src/serve/index.js').then((i) => i.expoServe),\n\n // Auxiliary commands\n install: () => import('../src/install/index.js').then((i) => i.expoInstall),\n add: () => import('../src/install/index.js').then((i) => i.expoInstall),\n customize: () => import('../src/customize/index.js').then((i) => i.expoCustomize),\n lint: () => import('../src/lint/index.js').then((i) => i.expoLint),\n\n // Auth\n login: () => import('../src/login/index.js').then((i) => i.expoLogin),\n logout: () => import('../src/logout/index.js').then((i) => i.expoLogout),\n register: () => import('../src/register/index.js').then((i) => i.expoRegister),\n whoami: () => import('../src/whoami/index.js').then((i) => i.expoWhoami),\n};\n\nconst args = arg(\n {\n // Types\n '--version': Boolean,\n '--help': Boolean,\n // NOTE(EvanBacon): This is here to silence warnings from processes that\n // expect the global expo-cli.\n '--non-interactive': Boolean,\n\n // Aliases\n '-v': '--version',\n '-h': '--help',\n },\n {\n permissive: true,\n }\n);\n\nif (args['--version']) {\n // Version is added in the build script.\n console.log(process.env.__EXPO_VERSION);\n process.exit(0);\n}\n\nif (args['--non-interactive']) {\n console.warn(chalk.yellow` {bold --non-interactive} is not supported, use {bold $CI=1} instead`);\n}\n\n// Check if we are running `npx expo <subcommand>` or `npx expo`\nconst isSubcommand = Boolean(commands[args._[0]]);\n\n// Handle `--help` flag\nif (!isSubcommand && args['--help']) {\n const {\n login,\n logout,\n whoami,\n register,\n start,\n install,\n add,\n export: _export,\n config,\n customize,\n prebuild,\n 'run:ios': runIos,\n 'run:android': runAndroid,\n // NOTE(EvanBacon): Don't document this command as it's a temporary\n // workaround until we can use `expo export` for all production bundling.\n // https://github.com/expo/expo/pull/21396/files#r1121025873\n 'export:embed': exportEmbed_unused,\n // The export:web command is deprecated. Hide it from the help prompt.\n 'export:web': exportWeb_unused,\n // Other ignored commands, these are intentially not listed in the `--help` output\n run: _run,\n // NOTE(cedric): Still pending the migration to ESLint's flat config\n lint: _lint,\n serve,\n // All other commands\n ...others\n } = commands;\n\n console.log(chalk`\n {bold Usage}\n {dim $} npx expo <command>\n\n {bold Commands}\n ${Object.keys({ start, export: _export, ...others }).join(', ')}\n ${Object.keys({ 'run:ios': runIos, 'run:android': runAndroid, prebuild }).join(', ')}\n ${Object.keys({ install, customize, config, serve }).join(', ')}\n {dim ${Object.keys({ login, logout, whoami, register }).join(', ')}}\n\n {bold Options}\n --version, -v Version number\n --help, -h Usage info\n\n For more info run a command with the {bold --help} flag\n {dim $} npx expo start --help\n`);\n\n process.exit(0);\n}\n\n// NOTE(EvanBacon): Squat some directory names to help with migration,\n// users can still use folders named \"send\" or \"eject\" by using the fully qualified `npx expo start ./send`.\nif (!isSubcommand) {\n const migrationMap: Record<string, string> = {\n init: 'npx create-expo-app',\n eject: 'npx expo prebuild',\n web: 'npx expo start --web',\n 'start:web': 'npx expo start --web',\n 'build:ios': 'eas build -p ios',\n 'build:android': 'eas build -p android',\n 'client:install:ios': 'npx expo start --ios',\n 'client:install:android': 'npx expo start --android',\n doctor: 'npx expo-doctor',\n upgrade: 'https://docs.expo.dev/workflow/upgrading-expo-sdk-walkthrough/',\n 'customize:web': 'npx expo customize',\n\n publish: 'eas update',\n 'publish:set': 'eas update',\n 'publish:rollback': 'eas update',\n 'publish:history': 'eas update',\n 'publish:details': 'eas update',\n\n 'build:web': 'npx expo export:web',\n\n 'credentials:manager': `eas credentials`,\n 'fetch:ios:certs': `eas credentials`,\n 'fetch:android:keystore': `eas credentials`,\n 'fetch:android:hashes': `eas credentials`,\n 'fetch:android:upload-cert': `eas credentials`,\n 'push:android:upload': `eas credentials`,\n 'push:android:show': `eas credentials`,\n 'push:android:clear': `eas credentials`,\n url: `eas build:list`,\n 'url:ipa': `eas build:list`,\n 'url:apk': `eas build:list`,\n webhooks: `eas webhook`,\n 'webhooks:add': `eas webhook:create`,\n 'webhooks:remove': `eas webhook:delete`,\n 'webhooks:update': `eas webhook:update`,\n\n 'build:status': `eas build:list`,\n 'upload:android': `eas submit -p android`,\n 'upload:ios': `eas submit -p ios`,\n };\n\n // TODO: Log telemetry about invalid command used.\n const subcommand = args._[0];\n if (subcommand in migrationMap) {\n const replacement = migrationMap[subcommand];\n console.log();\n const instruction = subcommand === 'upgrade' ? 'follow this guide' : 'use';\n console.log(\n chalk.yellow` {gray $} {bold expo ${subcommand}} is not supported in the local CLI, please ${instruction} {bold ${replacement}} instead`\n );\n console.log();\n process.exit(1);\n }\n const deprecated = ['send', 'client:ios'];\n if (deprecated.includes(subcommand)) {\n console.log();\n console.log(chalk.yellow` {gray $} {bold expo ${subcommand}} is deprecated`);\n console.log();\n process.exit(1);\n }\n}\n\nconst command = isSubcommand ? args._[0] : defaultCmd;\nconst commandArgs = isSubcommand ? args._.slice(1) : args._;\n\n// Push the help flag to the subcommand args.\nif (args['--help']) {\n commandArgs.push('--help');\n}\n\n// Install exit hooks\nprocess.on('SIGINT', () => process.exit(0));\nprocess.on('SIGTERM', () => process.exit(0));\n\ncommands[command]().then((exec) => {\n exec(commandArgs);\n\n // NOTE(EvanBacon): Track some basic telemetry events indicating the command\n // that was run. This can be disabled with the $EXPO_NO_TELEMETRY environment variable.\n // We do this to determine how well deprecations are going before removing a command.\n if (!boolish('EXPO_NO_TELEMETRY', false)) {\n const { recordCommand } =\n require('../src/utils/telemetry') as typeof import('../src/utils/telemetry');\n recordCommand(command);\n }\n});\n"],"names":["process","NODE_MIN","nodeVersion","version","slice","split","map","Number","console","error","chalk","red","join","boolish","Debug","enable","enabled","env","EXPO_DEBUG","defaultCmd","commands","run","then","i","expoRun","expoRunIos","expoRunAndroid","start","expoStart","prebuild","expoPrebuild","config","expoConfig","export","expoExport","expoExportWeb","expoExportEmbed","serve","expoServe","install","expoInstall","add","customize","expoCustomize","lint","expoLint","login","expoLogin","logout","expoLogout","register","expoRegister","whoami","expoWhoami","args","arg","Boolean","permissive","log","__EXPO_VERSION","exit","warn","yellow","isSubcommand","_","_export","runIos","runAndroid","exportEmbed_unused","exportWeb_unused","_run","_lint","others","Object","keys","migrationMap","init","eject","web","doctor","upgrade","publish","url","webhooks","subcommand","replacement","instruction","deprecated","includes","command","commandArgs","push","on","exec","recordCommand","require"],"mappings":"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"}
1
+ {"version":3,"sources":["../../bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport arg from 'arg';\nimport chalk from 'chalk';\nimport Debug from 'debug';\nimport { boolish } from 'getenv';\n\nimport { installEventLogger } from '../src/events';\n\n// Setup event logger output\n// NOTE: Done before any console output\ninstallEventLogger();\n\n// Check Node.js version and issue a loud warning if it's too outdated\n// This is sent to stderr (console.error) so it doesn't interfere with programmatic commands\nconst NODE_MIN = [20, 19, 4];\nconst nodeVersion = process.version?.slice(1).split('.', 3).map(Number);\nif (nodeVersion[0] < NODE_MIN[0] || (nodeVersion[0] === NODE_MIN[0] && nodeVersion[1] < NODE_MIN[1])) {\n console.error(\n chalk.red`{bold Node.js (${process.version}) is outdated and unsupported.}`\n + chalk.red` Please update to a newer Node.js LTS version (required: >=${NODE_MIN.join('.')})\\n`\n + chalk.red`Go to: https://nodejs.org/en/download\\n`\n );\n}\n\n// Setup before requiring `debug`.\nif (boolish('EXPO_DEBUG', false)) {\n Debug.enable('expo:*');\n} else if (Debug.enabled('expo:')) {\n process.env.EXPO_DEBUG = '1';\n}\n\nconst defaultCmd = 'start';\n\nexport type Command = (argv?: string[]) => void;\n\nconst commands: { [command: string]: () => Promise<Command> } = {\n // Add a new command here\n // NOTE(EvanBacon): Ensure every bundler-related command sets `NODE_ENV` as expected for the command.\n run: () => import('../src/run/index.js').then((i) => i.expoRun),\n 'run:ios': () => import('../src/run/ios/index.js').then((i) => i.expoRunIos),\n 'run:android': () => import('../src/run/android/index.js').then((i) => i.expoRunAndroid),\n start: () => import('../src/start/index.js').then((i) => i.expoStart),\n prebuild: () => import('../src/prebuild/index.js').then((i) => i.expoPrebuild),\n config: () => import('../src/config/index.js').then((i) => i.expoConfig),\n export: () => import('../src/export/index.js').then((i) => i.expoExport),\n 'export:web': () => import('../src/export/web/index.js').then((i) => i.expoExportWeb),\n 'export:embed': () => import('../src/export/embed/index.js').then((i) => i.expoExportEmbed),\n\n serve: () => import('../src/serve/index.js').then((i) => i.expoServe),\n\n // Auxiliary commands\n install: () => import('../src/install/index.js').then((i) => i.expoInstall),\n add: () => import('../src/install/index.js').then((i) => i.expoInstall),\n customize: () => import('../src/customize/index.js').then((i) => i.expoCustomize),\n lint: () => import('../src/lint/index.js').then((i) => i.expoLint),\n\n // Auth\n login: () => import('../src/login/index.js').then((i) => i.expoLogin),\n logout: () => import('../src/logout/index.js').then((i) => i.expoLogout),\n register: () => import('../src/register/index.js').then((i) => i.expoRegister),\n whoami: () => import('../src/whoami/index.js').then((i) => i.expoWhoami),\n};\n\nconst args = arg(\n {\n // Types\n '--version': Boolean,\n '--help': Boolean,\n // NOTE(EvanBacon): This is here to silence warnings from processes that\n // expect the global expo-cli.\n '--non-interactive': Boolean,\n\n // Aliases\n '-v': '--version',\n '-h': '--help',\n },\n {\n permissive: true,\n }\n);\n\nif (args['--version']) {\n // Version is added in the build script.\n console.log(process.env.__EXPO_VERSION);\n process.exit(0);\n}\n\nif (args['--non-interactive']) {\n console.warn(chalk.yellow` {bold --non-interactive} is not supported, use {bold $CI=1} instead`);\n}\n\n// Check if we are running `npx expo <subcommand>` or `npx expo`\nconst isSubcommand = Boolean(commands[args._[0]]);\n\n// Handle `--help` flag\nif (!isSubcommand && args['--help']) {\n const {\n login,\n logout,\n whoami,\n register,\n start,\n install,\n add,\n export: _export,\n config,\n customize,\n prebuild,\n 'run:ios': runIos,\n 'run:android': runAndroid,\n // NOTE(EvanBacon): Don't document this command as it's a temporary\n // workaround until we can use `expo export` for all production bundling.\n // https://github.com/expo/expo/pull/21396/files#r1121025873\n 'export:embed': exportEmbed_unused,\n // The export:web command is deprecated. Hide it from the help prompt.\n 'export:web': exportWeb_unused,\n // Other ignored commands, these are intentially not listed in the `--help` output\n run: _run,\n // NOTE(cedric): Still pending the migration to ESLint's flat config\n lint: _lint,\n serve,\n // All other commands\n ...others\n } = commands;\n\n console.log(chalk`\n {bold Usage}\n {dim $} npx expo <command>\n\n {bold Commands}\n ${Object.keys({ start, export: _export, ...others }).join(', ')}\n ${Object.keys({ 'run:ios': runIos, 'run:android': runAndroid, prebuild }).join(', ')}\n ${Object.keys({ install, customize, config, serve }).join(', ')}\n {dim ${Object.keys({ login, logout, whoami, register }).join(', ')}}\n\n {bold Options}\n --version, -v Version number\n --help, -h Usage info\n\n For more info run a command with the {bold --help} flag\n {dim $} npx expo start --help\n`);\n\n process.exit(0);\n}\n\n// NOTE(EvanBacon): Squat some directory names to help with migration,\n// users can still use folders named \"send\" or \"eject\" by using the fully qualified `npx expo start ./send`.\nif (!isSubcommand) {\n const migrationMap: Record<string, string> = {\n init: 'npx create-expo-app',\n eject: 'npx expo prebuild',\n web: 'npx expo start --web',\n 'start:web': 'npx expo start --web',\n 'build:ios': 'eas build -p ios',\n 'build:android': 'eas build -p android',\n 'client:install:ios': 'npx expo start --ios',\n 'client:install:android': 'npx expo start --android',\n doctor: 'npx expo-doctor',\n upgrade: 'https://docs.expo.dev/workflow/upgrading-expo-sdk-walkthrough/',\n 'customize:web': 'npx expo customize',\n\n publish: 'eas update',\n 'publish:set': 'eas update',\n 'publish:rollback': 'eas update',\n 'publish:history': 'eas update',\n 'publish:details': 'eas update',\n\n 'build:web': 'npx expo export:web',\n\n 'credentials:manager': `eas credentials`,\n 'fetch:ios:certs': `eas credentials`,\n 'fetch:android:keystore': `eas credentials`,\n 'fetch:android:hashes': `eas credentials`,\n 'fetch:android:upload-cert': `eas credentials`,\n 'push:android:upload': `eas credentials`,\n 'push:android:show': `eas credentials`,\n 'push:android:clear': `eas credentials`,\n url: `eas build:list`,\n 'url:ipa': `eas build:list`,\n 'url:apk': `eas build:list`,\n webhooks: `eas webhook`,\n 'webhooks:add': `eas webhook:create`,\n 'webhooks:remove': `eas webhook:delete`,\n 'webhooks:update': `eas webhook:update`,\n\n 'build:status': `eas build:list`,\n 'upload:android': `eas submit -p android`,\n 'upload:ios': `eas submit -p ios`,\n };\n\n // TODO: Log telemetry about invalid command used.\n const subcommand = args._[0];\n if (subcommand in migrationMap) {\n const replacement = migrationMap[subcommand];\n console.log();\n const instruction = subcommand === 'upgrade' ? 'follow this guide' : 'use';\n console.log(\n chalk.yellow` {gray $} {bold expo ${subcommand}} is not supported in the local CLI, please ${instruction} {bold ${replacement}} instead`\n );\n console.log();\n process.exit(1);\n }\n const deprecated = ['send', 'client:ios'];\n if (deprecated.includes(subcommand)) {\n console.log();\n console.log(chalk.yellow` {gray $} {bold expo ${subcommand}} is deprecated`);\n console.log();\n process.exit(1);\n }\n}\n\nconst command = isSubcommand ? args._[0] : defaultCmd;\nconst commandArgs = isSubcommand ? args._.slice(1) : args._;\n\n// Push the help flag to the subcommand args.\nif (args['--help']) {\n commandArgs.push('--help');\n}\n\n// Install exit hooks\nprocess.on('SIGINT', () => process.exit(0));\nprocess.on('SIGTERM', () => process.exit(0));\n\ncommands[command]().then((exec) => {\n exec(commandArgs);\n\n // NOTE(EvanBacon): Track some basic telemetry events indicating the command\n // that was run. This can be disabled with the $EXPO_NO_TELEMETRY environment variable.\n // We do this to determine how well deprecations are going before removing a command.\n if (!boolish('EXPO_NO_TELEMETRY', false)) {\n const { recordCommand } =\n require('../src/utils/telemetry') as typeof import('../src/utils/telemetry');\n recordCommand(command);\n }\n});\n"],"names":["process","installEventLogger","NODE_MIN","nodeVersion","version","slice","split","map","Number","console","error","chalk","red","join","boolish","Debug","enable","enabled","env","EXPO_DEBUG","defaultCmd","commands","run","then","i","expoRun","expoRunIos","expoRunAndroid","start","expoStart","prebuild","expoPrebuild","config","expoConfig","export","expoExport","expoExportWeb","expoExportEmbed","serve","expoServe","install","expoInstall","add","customize","expoCustomize","lint","expoLint","login","expoLogin","logout","expoLogout","register","expoRegister","whoami","expoWhoami","args","arg","Boolean","permissive","log","__EXPO_VERSION","exit","warn","yellow","isSubcommand","_","_export","runIos","runAndroid","exportEmbed_unused","exportWeb_unused","_run","_lint","others","Object","keys","migrationMap","init","eject","web","doctor","upgrade","publish","url","webhooks","subcommand","replacement","instruction","deprecated","includes","command","commandArgs","push","on","exec","recordCommand","require"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /* eslint-disable @typescript-eslint/no-empty-object-type */ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+
6
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/events/builder.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-object-type */\n\ntype obj<T> = T extends { [key: string | number]: any } ? { [K in keyof T]: T[K] } : never;\n\nexport type EmptyPayload = {\n [key: string]: never;\n _e: never;\n _t: never;\n};\n\ntype AbstractPayload = Record<string, any> & {\n _e?: never;\n _t?: never;\n};\n\nexport type Event<\n Name extends string = string,\n Payload extends AbstractPayload = EmptyPayload,\n> = obj<{ key: Name } & Payload>;\n\nexport type EventShape<Name extends string, Payload = any> = Name & {\n __payload: Payload;\n};\n\ntype getEventPayloadOfShape<Shape> =\n Shape extends EventShape<infer Name, infer Payload>\n ? Payload extends AbstractPayload\n ? { [K in Name]: Payload }\n : never\n : never;\n\ntype getEventsOfShapesRec<Shapes, Out = {}> = Shapes extends readonly [infer Shape, ...infer Rest]\n ? getEventsOfShapesRec<Rest, Out & getEventPayloadOfShape<Shape>>\n : obj<Out>;\n\ntype reduceEventLoggerEvents<EventLogger> =\n EventLogger extends EventLoggerType<infer Category, infer Events>\n ? Category extends string\n ? {\n [K in keyof Events]: K extends string\n ? obj<{ key: `${Category}:${K}` } & Events[K]>\n : never;\n }[keyof Events]\n : never\n : never;\n\ntype reduceEventLoggersRec<EventLoggers, Out = never> = EventLoggers extends readonly [\n infer EventLogger,\n ...infer Rest,\n]\n ? reduceEventLoggersRec<Rest, Out | reduceEventLoggerEvents<EventLogger>>\n : obj<Out>;\n\ninterface EventLoggerType<Category, Events> {\n category: Category;\n __eventTypes?: () => Events;\n}\n\nexport interface EventLogger<Category, Events> extends EventLoggerType<Category, Events> {\n <EventName extends keyof Events>(event: EventName, data: Events[EventName]): void;\n}\n\nexport interface EventBuilder {\n event<const Name extends string, const Payload extends AbstractPayload>(): EventShape<\n Name,\n Payload\n >;\n}\n\nexport interface EventLoggerBuilder {\n <const Category extends string, const Shapes extends readonly EventShape<string>[]>(\n category: Category,\n _fn: (builder: EventBuilder) => Shapes\n ): EventLogger<Category, getEventsOfShapesRec<Shapes>>;\n}\n\nexport type collectEventLoggers<EventLoggers extends [...EventLoggerType<any, any>[]]> =\n reduceEventLoggersRec<EventLoggers>;\n"],"names":[],"mappings":"AAAA,0DAA0D"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ events: function() {
13
+ return events;
14
+ },
15
+ installEventLogger: function() {
16
+ return installEventLogger;
17
+ },
18
+ isEventLoggerActive: function() {
19
+ return isEventLoggerActive;
20
+ },
21
+ rootEvent: function() {
22
+ return rootEvent;
23
+ },
24
+ shouldReduceLogs: function() {
25
+ return shouldReduceLogs;
26
+ }
27
+ });
28
+ function _nodeconsole() {
29
+ const data = require("node:console");
30
+ _nodeconsole = function() {
31
+ return data;
32
+ };
33
+ return data;
34
+ }
35
+ function _nodepath() {
36
+ const data = /*#__PURE__*/ _interop_require_default(require("node:path"));
37
+ _nodepath = function() {
38
+ return data;
39
+ };
40
+ return data;
41
+ }
42
+ function _nodetty() {
43
+ const data = require("node:tty");
44
+ _nodetty = function() {
45
+ return data;
46
+ };
47
+ return data;
48
+ }
49
+ const _stream = require("./stream");
50
+ const _env = require("../utils/env");
51
+ function _interop_require_default(obj) {
52
+ return obj && obj.__esModule ? obj : {
53
+ default: obj
54
+ };
55
+ }
56
+ let logStream;
57
+ function parseLogTarget(env) {
58
+ let logDestination;
59
+ if (env) {
60
+ const fd = parseInt(env, 10);
61
+ if (fd > 0 && Number.isSafeInteger(fd)) {
62
+ logDestination = fd;
63
+ } else {
64
+ try {
65
+ const parsedPath = _nodepath().default.parse(env);
66
+ logDestination = _nodepath().default.format(parsedPath);
67
+ } catch {
68
+ logDestination = undefined;
69
+ }
70
+ }
71
+ }
72
+ return logDestination;
73
+ }
74
+ function getInitMetadata() {
75
+ return {
76
+ format: 'v0-jsonl',
77
+ // Version is added in the build script.
78
+ version: "55.0.10" ?? 'UNVERSIONED'
79
+ };
80
+ }
81
+ function installEventLogger(env = process.env.LOG_EVENTS) {
82
+ const eventLogDestination = parseLogTarget(env);
83
+ if (eventLogDestination) {
84
+ if (eventLogDestination === 1) {
85
+ const output = new (_nodetty()).WriteStream(2);
86
+ Object.defineProperty(process, 'stdout', {
87
+ get: ()=>output
88
+ });
89
+ globalThis.console = new (_nodeconsole()).Console(output, output);
90
+ } else if (eventLogDestination === 2) {
91
+ const output = new (_nodetty()).WriteStream(1);
92
+ Object.defineProperty(process, 'stderr', {
93
+ get: ()=>output
94
+ });
95
+ globalThis.console = new (_nodeconsole()).Console(output, output);
96
+ }
97
+ logStream = new _stream.LogStream(eventLogDestination);
98
+ rootEvent('init', getInitMetadata());
99
+ }
100
+ }
101
+ const isEventLoggerActive = ()=>!!(logStream == null ? void 0 : logStream.writable);
102
+ const shouldReduceLogs = ()=>!!logStream && _env.env.EXPO_UNSTABLE_HEADLESS;
103
+ const events = (category, _fn)=>{
104
+ function log(event, data) {
105
+ if (logStream) {
106
+ const _e = `${category}:${String(event)}`;
107
+ const _t = Date.now();
108
+ const payload = JSON.stringify({
109
+ _e,
110
+ _t,
111
+ ...data
112
+ });
113
+ logStream._write(payload + '\n');
114
+ }
115
+ }
116
+ log.category = category;
117
+ return log;
118
+ };
119
+ const rootEvent = events('root', (t)=>[
120
+ t.event()
121
+ ]);
122
+
123
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/events/index.ts"],"sourcesContent":["import { Console } from 'node:console';\nimport path from 'node:path';\nimport { WriteStream } from 'node:tty';\n\nimport type { EventBuilder, EventLoggerBuilder, EventShape } from './builder';\nimport { LogStream } from './stream';\nimport { env } from '../utils/env';\n\ninterface InitMetadata {\n format: 'v0-jsonl' | (string & {});\n version: string;\n}\n\nlet logStream: LogStream | undefined;\n\nfunction parseLogTarget(env: string | undefined) {\n let logDestination: string | number | undefined;\n if (env) {\n const fd = parseInt(env, 10);\n if (fd > 0 && Number.isSafeInteger(fd)) {\n logDestination = fd;\n } else {\n try {\n const parsedPath = path.parse(env);\n logDestination = path.format(parsedPath);\n } catch {\n logDestination = undefined;\n }\n }\n }\n return logDestination;\n}\n\nfunction getInitMetadata(): InitMetadata {\n return {\n format: 'v0-jsonl',\n // Version is added in the build script.\n version: process.env.__EXPO_VERSION ?? 'UNVERSIONED',\n };\n}\n\n/** Activates the event logger based on the input env var\n * @param env - The target to write the logs to; defaults to `$LOG_EVENTS`\n */\nexport function installEventLogger(env = process.env.LOG_EVENTS) {\n const eventLogDestination = parseLogTarget(env);\n if (eventLogDestination) {\n if (eventLogDestination === 1) {\n const output = new WriteStream(2);\n Object.defineProperty(process, 'stdout', { get: () => output });\n globalThis.console = new Console(output, output);\n } else if (eventLogDestination === 2) {\n const output = new WriteStream(1);\n Object.defineProperty(process, 'stderr', { get: () => output });\n globalThis.console = new Console(output, output);\n }\n logStream = new LogStream(eventLogDestination);\n rootEvent('init', getInitMetadata());\n }\n}\n\n/** Returns whether the event logger is active */\nexport const isEventLoggerActive = () => !!logStream?.writable;\n\n/** Whether logs shown in the terminal should be reduced.\n * @remarks\n * We indicate that we're in an automated tool (e.g. E2E tests) with `EXPO_UNSTABLE_HEADLESS`.\n * If the event logger is activate and we're running in a headless tool, we should reduce\n * interactive or noisy logs, in favour of the event logger.\n */\nexport const shouldReduceLogs = () => !!logStream && env.EXPO_UNSTABLE_HEADLESS;\n\n/** Used to create an event logger for structured JSONL logs activated with the `LOG_EVENTS` environment variable.\n *\n * @remarks\n * Structured logs are streamed to a JSONL output file or file descriptor, and are meant for automated tooling\n * or normal usage to document what happened during a user session. When creating a module that outputs errors,\n * events, or captures what the user was doing, create a new event logger category for them and add structured\n * log events.\n * For example, `../start/server/metro/MetroTerminalReporter` captures most of Metro's logged events.\n * Structured JSONL logs don't have a large performance impact, unlike `DEBUG` logs, and are easily parseable\n * and filterable, including by wrapper processes.\n *\n * After adding a new event category, don't forget to add it to `./types.ts` to collect all event shape types\n * in one place.\n *\n * @example\n * ```ts\n * export const event = events('test', (t) => [\n * t.event<'my_event', {\n * myValue: string | null;\n * }>(),\n * ]);\n *\n * event('my_event', { myValue: 'test' });\n * ```\n *\n * This will log a `{ _e: 'test:my_event', _t: 0, myValue: 'test' }` entry in the event log.\n */\nexport const events: EventLoggerBuilder = ((\n category: string,\n _fn: (builder: EventBuilder) => readonly EventShape<string>[]\n) => {\n function log(event: string, data: any) {\n if (logStream) {\n const _e = `${category}:${String(event)}`;\n const _t = Date.now();\n const payload = JSON.stringify({ _e, _t, ...data });\n logStream._write(payload + '\\n');\n }\n }\n log.category = category;\n return log;\n}) as EventLoggerBuilder;\n\n// These are built-in events: We choose an ambiguous name on purpose,\n// since we don't assume this implementation will necessarily only be in `@expo/cli`\nexport const rootEvent = events('root', (t) => [t.event<'init', InitMetadata>()]);\n\nexport type { EventLogger } from './builder';\n"],"names":["events","installEventLogger","isEventLoggerActive","rootEvent","shouldReduceLogs","logStream","parseLogTarget","env","logDestination","fd","parseInt","Number","isSafeInteger","parsedPath","path","parse","format","undefined","getInitMetadata","version","process","__EXPO_VERSION","LOG_EVENTS","eventLogDestination","output","WriteStream","Object","defineProperty","get","globalThis","console","Console","LogStream","writable","EXPO_UNSTABLE_HEADLESS","category","_fn","log","event","data","_e","String","_t","Date","now","payload","JSON","stringify","_write","t"],"mappings":";;;;;;;;;;;IAmGaA,MAAM;eAANA;;IAvDGC,kBAAkB;eAAlBA;;IAkBHC,mBAAmB;eAAnBA;;IAuDAC,SAAS;eAATA;;IA/CAC,gBAAgB;eAAhBA;;;;yBAtEW;;;;;;;gEACP;;;;;;;yBACW;;;;;;wBAGF;qBACN;;;;;;AAOpB,IAAIC;AAEJ,SAASC,eAAeC,GAAuB;IAC7C,IAAIC;IACJ,IAAID,KAAK;QACP,MAAME,KAAKC,SAASH,KAAK;QACzB,IAAIE,KAAK,KAAKE,OAAOC,aAAa,CAACH,KAAK;YACtCD,iBAAiBC;QACnB,OAAO;YACL,IAAI;gBACF,MAAMI,aAAaC,mBAAI,CAACC,KAAK,CAACR;gBAC9BC,iBAAiBM,mBAAI,CAACE,MAAM,CAACH;YAC/B,EAAE,OAAM;gBACNL,iBAAiBS;YACnB;QACF;IACF;IACA,OAAOT;AACT;AAEA,SAASU;IACP,OAAO;QACLF,QAAQ;QACR,wCAAwC;QACxCG,SAASC,QAAQb,GAAG,CAACc,cAAc,IAAI;IACzC;AACF;AAKO,SAASpB,mBAAmBM,MAAMa,QAAQb,GAAG,CAACe,UAAU;IAC7D,MAAMC,sBAAsBjB,eAAeC;IAC3C,IAAIgB,qBAAqB;QACvB,IAAIA,wBAAwB,GAAG;YAC7B,MAAMC,SAAS,IAAIC,CAAAA,UAAU,aAAC,CAAC;YAC/BC,OAAOC,cAAc,CAACP,SAAS,UAAU;gBAAEQ,KAAK,IAAMJ;YAAO;YAC7DK,WAAWC,OAAO,GAAG,IAAIC,CAAAA,cAAM,SAAC,CAACP,QAAQA;QAC3C,OAAO,IAAID,wBAAwB,GAAG;YACpC,MAAMC,SAAS,IAAIC,CAAAA,UAAU,aAAC,CAAC;YAC/BC,OAAOC,cAAc,CAACP,SAAS,UAAU;gBAAEQ,KAAK,IAAMJ;YAAO;YAC7DK,WAAWC,OAAO,GAAG,IAAIC,CAAAA,cAAM,SAAC,CAACP,QAAQA;QAC3C;QACAnB,YAAY,IAAI2B,iBAAS,CAACT;QAC1BpB,UAAU,QAAQe;IACpB;AACF;AAGO,MAAMhB,sBAAsB,IAAM,CAAC,EAACG,6BAAAA,UAAW4B,QAAQ;AAQvD,MAAM7B,mBAAmB,IAAM,CAAC,CAACC,aAAaE,QAAG,CAAC2B,sBAAsB;AA6BxE,MAAMlC,SAA8B,CACzCmC,UACAC;IAEA,SAASC,IAAIC,KAAa,EAAEC,IAAS;QACnC,IAAIlC,WAAW;YACb,MAAMmC,KAAK,GAAGL,SAAS,CAAC,EAAEM,OAAOH,QAAQ;YACzC,MAAMI,KAAKC,KAAKC,GAAG;YACnB,MAAMC,UAAUC,KAAKC,SAAS,CAAC;gBAAEP;gBAAIE;gBAAI,GAAGH,IAAI;YAAC;YACjDlC,UAAU2C,MAAM,CAACH,UAAU;QAC7B;IACF;IACAR,IAAIF,QAAQ,GAAGA;IACf,OAAOE;AACT;AAIO,MAAMlC,YAAYH,OAAO,QAAQ,CAACiD,IAAM;QAACA,EAAEX,KAAK;KAAyB"}
@@ -0,0 +1,303 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "LogStream", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return LogStream;
9
+ }
10
+ });
11
+ function _nodebuffer() {
12
+ const data = require("node:buffer");
13
+ _nodebuffer = function() {
14
+ return data;
15
+ };
16
+ return data;
17
+ }
18
+ function _nodeevents() {
19
+ const data = require("node:events");
20
+ _nodeevents = function() {
21
+ return data;
22
+ };
23
+ return data;
24
+ }
25
+ function _nodefs() {
26
+ const data = /*#__PURE__*/ _interop_require_default(require("node:fs"));
27
+ _nodefs = function() {
28
+ return data;
29
+ };
30
+ return data;
31
+ }
32
+ function _nodepath() {
33
+ const data = /*#__PURE__*/ _interop_require_default(require("node:path"));
34
+ _nodepath = function() {
35
+ return data;
36
+ };
37
+ return data;
38
+ }
39
+ function _interop_require_default(obj) {
40
+ return obj && obj.__esModule ? obj : {
41
+ default: obj
42
+ };
43
+ }
44
+ const BUSY_WRITE_TIMEOUT = 100;
45
+ const HIGH_WATER_MARK = 16387; /*16KB*/
46
+ class LogStream extends _nodeevents().EventEmitter {
47
+ #fd;
48
+ #file;
49
+ #writing;
50
+ #ending;
51
+ #flushPending;
52
+ #destroyed;
53
+ #opening;
54
+ #output;
55
+ #len;
56
+ #lines;
57
+ #partialLine;
58
+ constructor(dest){
59
+ super(), this.#fd = -1, this.#file = null, this.#writing = false, this.#ending = false, this.#flushPending = false, this.#destroyed = false, this.#opening = false, this.#output = '', this.#len = 0, this.#lines = [], this.#partialLine = 0;
60
+ if (typeof dest === 'number') {
61
+ _nodefs().default.fsyncSync(dest);
62
+ this.#fd = dest;
63
+ process.nextTick(()=>this.emit('ready'));
64
+ } else if (typeof dest === 'string') {
65
+ this.#openFile(dest);
66
+ }
67
+ }
68
+ get file() {
69
+ return this.#file;
70
+ }
71
+ get fd() {
72
+ return this.#fd;
73
+ }
74
+ get writing() {
75
+ return this.#writing;
76
+ }
77
+ get writable() {
78
+ return !this.#destroyed && !this.#ending;
79
+ }
80
+ #release(error, written) {
81
+ if (error) {
82
+ if (error.code === 'EAGAIN' || error.code === 'EBUSY') {
83
+ setTimeout(()=>this.#writeLine(), BUSY_WRITE_TIMEOUT);
84
+ } else {
85
+ this.#writing = false;
86
+ this.emit('error', error);
87
+ }
88
+ } else {
89
+ this.emit('write', written);
90
+ const outputLength = _nodebuffer().Buffer.byteLength(this.#output);
91
+ if (outputLength > written) {
92
+ const output = _nodebuffer().Buffer.from(this.#output).subarray(written).toString();
93
+ this.#len -= this.#output.length - output.length;
94
+ this.#output = output;
95
+ } else {
96
+ this.#len -= this.#output.length;
97
+ this.#output = '';
98
+ }
99
+ if (this.#output || this.#lines.length > this.#partialLine) {
100
+ this.#writeLine();
101
+ } else if (this.#ending) {
102
+ this.#writing = false;
103
+ this.#close();
104
+ } else {
105
+ this.#writing = false;
106
+ this.emit('drain');
107
+ }
108
+ }
109
+ }
110
+ #openFile(file) {
111
+ this.#opening = true;
112
+ this.#writing = true;
113
+ const onOpened = (error, fd)=>{
114
+ if (error) {
115
+ this.#writing = false;
116
+ this.#opening = false;
117
+ this.emit('error', error);
118
+ } else {
119
+ this.#fd = fd;
120
+ this.#file = file;
121
+ this.#opening = false;
122
+ this.#writing = false;
123
+ this.emit('ready');
124
+ if (this.#destroyed) {
125
+ // do nothing when we're already closing the file
126
+ } else if (!this.writing && this.#lines.length > this.#partialLine || this.#flushPending) {
127
+ this.#writeLine();
128
+ }
129
+ }
130
+ };
131
+ _nodefs().default.mkdir(_nodepath().default.dirname(file), {
132
+ recursive: true
133
+ }, (err)=>{
134
+ if (err) return onOpened(err);
135
+ _nodefs().default.open(file, 'a', 438, onOpened);
136
+ });
137
+ }
138
+ #close() {
139
+ if (this.#fd === -1) {
140
+ this.once('ready', ()=>this.#close());
141
+ return;
142
+ }
143
+ this.#destroyed = true;
144
+ this.#partialLine = 0;
145
+ this.#lines.length = 0;
146
+ const onClose = (error)=>{
147
+ if (error) {
148
+ this.emit('error', error);
149
+ this.emit('close', error);
150
+ } else {
151
+ if (this.#ending && !this.#writing) this.emit('finish');
152
+ this.emit('close');
153
+ }
154
+ };
155
+ fsFsync(this.#fd, (error)=>{
156
+ if (!error && !isStdFd(this.#fd)) {
157
+ _nodefs().default.close(this.#fd, onClose);
158
+ } else {
159
+ onClose(); // Error intentionally ignored, assume closed
160
+ }
161
+ });
162
+ }
163
+ #writeLine() {
164
+ this.#writing = true;
165
+ this.#output ||= this.#lines.length > this.#partialLine ? this.#lines.shift() || '' : '';
166
+ _nodefs().default.write(this.#fd, this.#output, (err, written)=>this.#release(err, written));
167
+ }
168
+ _end() {
169
+ if (!this.#destroyed && !this.#ending) {
170
+ this.#ending = true;
171
+ if (this.#opening) {
172
+ this.once('ready', ()=>this._end());
173
+ } else if (!this.#writing && this.#fd >= 0) {
174
+ if (this.#lines.length > this.#partialLine) {
175
+ this.#writeLine();
176
+ } else {
177
+ this.#close();
178
+ }
179
+ }
180
+ }
181
+ return this;
182
+ }
183
+ end(arg1, arg2, arg3) {
184
+ const maybeCb = arg3 || arg2 || arg1;
185
+ const input = typeof arg1 !== 'function' ? arg1 : undefined;
186
+ const encoding = typeof arg2 === 'string' ? arg2 : 'utf8';
187
+ const cb = typeof maybeCb === 'function' ? maybeCb : undefined;
188
+ if (typeof input === 'string') {
189
+ this.write(input, encoding);
190
+ } else if (input != null) {
191
+ this.write(input);
192
+ }
193
+ if (cb) this.once('close', cb);
194
+ return this._end();
195
+ }
196
+ destroy() {
197
+ if (!this.#destroyed) this.#close();
198
+ }
199
+ flush(cb) {
200
+ if (this.#destroyed) {
201
+ cb == null ? void 0 : cb();
202
+ } else {
203
+ const onDrain = ()=>{
204
+ if (!this.#destroyed) {
205
+ fsFsync(this.#fd, (error)=>{
206
+ this.#flushPending = false;
207
+ if ((error == null ? void 0 : error.code) === 'EBADF') {
208
+ cb == null ? void 0 : cb(); // If fd is closed, ignore the error
209
+ } else {
210
+ cb == null ? void 0 : cb(error);
211
+ }
212
+ });
213
+ } else {
214
+ this.#flushPending = false;
215
+ cb == null ? void 0 : cb();
216
+ }
217
+ this.off('error', onError);
218
+ };
219
+ const onError = (err)=>{
220
+ this.#flushPending = false;
221
+ this.off('drain', onDrain);
222
+ cb == null ? void 0 : cb(err);
223
+ };
224
+ this.#flushPending = true;
225
+ this.once('drain', onDrain);
226
+ this.once('error', onError);
227
+ if (!this.#writing) {
228
+ if (this.#lines.length > this.#partialLine || this.#output) {
229
+ // There are complete lines or remaining output to write
230
+ this.#writeLine();
231
+ } else {
232
+ // Nothing complete to write, emit drain immediately
233
+ process.nextTick(()=>this.emit('drain'));
234
+ }
235
+ }
236
+ }
237
+ }
238
+ _write(data) {
239
+ if (this.#destroyed) {
240
+ return false;
241
+ }
242
+ this.#len += data.length;
243
+ let startIdx = 0;
244
+ let endIdx = -1;
245
+ while((endIdx = data.indexOf('\n', startIdx)) > -1){
246
+ const line = data.slice(startIdx, endIdx + 1);
247
+ if (this.#partialLine > 0) {
248
+ this.#lines[this.#lines.length - 1] += line;
249
+ } else {
250
+ this.#lines.push(line);
251
+ }
252
+ this.#partialLine = 0;
253
+ startIdx = ++endIdx;
254
+ }
255
+ if (startIdx < data.length) {
256
+ const line = data.slice(startIdx);
257
+ if (this.#partialLine > 0) {
258
+ this.#lines[this.#lines.length - 1] += line;
259
+ } else {
260
+ this.#lines.push(data.slice(startIdx));
261
+ }
262
+ this.#partialLine = 1;
263
+ }
264
+ if (!this.#writing && this.#lines.length > this.#partialLine) {
265
+ this.#writeLine();
266
+ }
267
+ return this.#len < HIGH_WATER_MARK;
268
+ }
269
+ write(input, arg2, arg3) {
270
+ const maybeCb = arg3 || arg2;
271
+ const encoding = typeof arg2 === 'string' ? arg2 : 'utf8';
272
+ const data = typeof input === 'string' ? input : _nodebuffer().Buffer.from(input).toString(encoding);
273
+ const cb = typeof maybeCb === 'function' ? maybeCb : undefined;
274
+ try {
275
+ return this._write(data);
276
+ } finally{
277
+ cb == null ? void 0 : cb();
278
+ }
279
+ }
280
+ [Symbol.dispose]() {
281
+ this.destroy();
282
+ }
283
+ }
284
+ const isStdFd = (fd)=>{
285
+ switch(fd){
286
+ case 1:
287
+ case 2:
288
+ case process.stdout.fd:
289
+ case process.stderr.fd:
290
+ return true;
291
+ default:
292
+ return false;
293
+ }
294
+ };
295
+ const fsFsync = (fd, cb)=>{
296
+ try {
297
+ _nodefs().default.fsync(fd, cb);
298
+ } catch (error) {
299
+ cb(error);
300
+ }
301
+ };
302
+
303
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/events/stream.ts"],"sourcesContent":["import { Buffer } from 'node:buffer';\nimport { EventEmitter } from 'node:events';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst BUSY_WRITE_TIMEOUT = 100;\nconst HIGH_WATER_MARK = 16_387; /*16KB*/\n\nexport class LogStream extends EventEmitter implements NodeJS.WritableStream {\n #fd = -1;\n #file: string | null = null;\n\n #writing = false;\n #ending = false;\n #flushPending = false;\n #destroyed = false;\n #opening = false;\n\n #output = '';\n #len = 0;\n #lines: string[] = [];\n #partialLine = 0;\n\n constructor(dest: string | number) {\n super();\n if (typeof dest === 'number') {\n fs.fsyncSync(dest);\n this.#fd = dest;\n process.nextTick(() => this.emit('ready'));\n } else if (typeof dest === 'string') {\n this.#openFile(dest);\n }\n }\n\n get file(): string | null {\n return this.#file;\n }\n\n get fd(): number {\n return this.#fd;\n }\n\n get writing(): boolean {\n return this.#writing;\n }\n\n get writable(): boolean {\n return !this.#destroyed && !this.#ending;\n }\n\n #release(error: NodeJS.ErrnoException | null, written: number) {\n if (error) {\n if (error.code === 'EAGAIN' || error.code === 'EBUSY') {\n setTimeout(() => this.#writeLine(), BUSY_WRITE_TIMEOUT);\n } else {\n this.#writing = false;\n this.emit('error', error);\n }\n } else {\n this.emit('write', written);\n\n const outputLength = Buffer.byteLength(this.#output);\n if (outputLength > written) {\n const output = Buffer.from(this.#output).subarray(written).toString();\n this.#len -= this.#output.length - output.length;\n this.#output = output;\n } else {\n this.#len -= this.#output.length;\n this.#output = '';\n }\n\n if (this.#output || this.#lines.length > this.#partialLine) {\n this.#writeLine();\n } else if (this.#ending) {\n this.#writing = false;\n this.#close();\n } else {\n this.#writing = false;\n this.emit('drain');\n }\n }\n }\n\n #openFile(file: string) {\n this.#opening = true;\n this.#writing = true;\n\n const onOpened = (error: Error | null, fd?: number | null) => {\n if (error) {\n this.#writing = false;\n this.#opening = false;\n this.emit('error', error);\n } else {\n this.#fd = fd!;\n this.#file = file;\n this.#opening = false;\n this.#writing = false;\n this.emit('ready');\n if (this.#destroyed) {\n // do nothing when we're already closing the file\n } else if (\n (!this.writing && this.#lines.length > this.#partialLine) ||\n this.#flushPending\n ) {\n this.#writeLine();\n }\n }\n };\n\n fs.mkdir(path.dirname(file), { recursive: true }, (err) => {\n if (err) return onOpened(err);\n fs.open(file, 'a', 0o666, onOpened);\n });\n }\n\n #close() {\n if (this.#fd === -1) {\n this.once('ready', () => this.#close());\n return;\n }\n\n this.#destroyed = true;\n this.#partialLine = 0;\n this.#lines.length = 0;\n\n const onClose = (error?: NodeJS.ErrnoException | null) => {\n if (error) {\n this.emit('error', error);\n this.emit('close', error);\n } else {\n if (this.#ending && !this.#writing) this.emit('finish');\n this.emit('close');\n }\n };\n\n fsFsync(this.#fd, (error) => {\n if (!error && !isStdFd(this.#fd)) {\n fs.close(this.#fd, onClose);\n } else {\n onClose(); // Error intentionally ignored, assume closed\n }\n });\n }\n\n #writeLine() {\n this.#writing = true;\n this.#output ||= this.#lines.length > this.#partialLine ? this.#lines.shift() || '' : '';\n fs.write(this.#fd, this.#output, (err, written) => this.#release(err, written));\n }\n\n _end() {\n if (!this.#destroyed && !this.#ending) {\n this.#ending = true;\n if (this.#opening) {\n this.once('ready', () => this._end());\n } else if (!this.#writing && this.#fd >= 0) {\n if (this.#lines.length > this.#partialLine) {\n this.#writeLine();\n } else {\n this.#close();\n }\n }\n }\n return this;\n }\n\n end(cb?: () => void): this;\n end(data: string | Uint8Array, cb?: () => void): this;\n end(str: string, encoding?: BufferEncoding, cb?: () => void): this;\n\n end(\n arg1?: Uint8Array | string | (() => void),\n arg2?: BufferEncoding | (() => void),\n arg3?: () => void\n ) {\n const maybeCb = arg3 || arg2 || arg1;\n const input = typeof arg1 !== 'function' ? arg1 : undefined;\n const encoding = typeof arg2 === 'string' ? arg2 : 'utf8';\n const cb = typeof maybeCb === 'function' ? maybeCb : undefined;\n if (typeof input === 'string') {\n this.write(input, encoding);\n } else if (input != null) {\n this.write(input);\n }\n if (cb) this.once('close', cb);\n return this._end();\n }\n\n destroy() {\n if (!this.#destroyed) this.#close();\n }\n\n flush(cb?: (error?: Error | null) => void) {\n if (this.#destroyed) {\n cb?.();\n } else {\n const onDrain = () => {\n if (!this.#destroyed) {\n fsFsync(this.#fd, (error) => {\n this.#flushPending = false;\n if (error?.code === 'EBADF') {\n cb?.(); // If fd is closed, ignore the error\n } else {\n cb?.(error);\n }\n });\n } else {\n this.#flushPending = false;\n cb?.();\n }\n this.off('error', onError);\n };\n\n const onError = (err: Error) => {\n this.#flushPending = false;\n this.off('drain', onDrain);\n cb?.(err);\n };\n\n this.#flushPending = true;\n this.once('drain', onDrain);\n this.once('error', onError);\n\n if (!this.#writing) {\n if (this.#lines.length > this.#partialLine || this.#output) {\n // There are complete lines or remaining output to write\n this.#writeLine();\n } else {\n // Nothing complete to write, emit drain immediately\n process.nextTick(() => this.emit('drain'));\n }\n }\n }\n }\n\n _write(data: string): boolean {\n if (this.#destroyed) {\n return false;\n }\n\n this.#len += data.length;\n\n let startIdx = 0;\n let endIdx = -1;\n while ((endIdx = data.indexOf('\\n', startIdx)) > -1) {\n const line = data.slice(startIdx, endIdx + 1);\n if (this.#partialLine > 0) {\n this.#lines[this.#lines.length - 1] += line;\n } else {\n this.#lines.push(line);\n }\n this.#partialLine = 0;\n startIdx = ++endIdx;\n }\n\n if (startIdx < data.length) {\n const line = data.slice(startIdx);\n if (this.#partialLine > 0) {\n this.#lines[this.#lines.length - 1] += line;\n } else {\n this.#lines.push(data.slice(startIdx));\n }\n this.#partialLine = 1;\n }\n\n if (!this.#writing && this.#lines.length > this.#partialLine) {\n this.#writeLine();\n }\n\n return this.#len < HIGH_WATER_MARK;\n }\n\n write(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean;\n write(str: string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void): boolean;\n\n write(\n input: Uint8Array | string,\n arg2?: BufferEncoding | ((err?: Error | null) => void),\n arg3?: (err?: Error | null) => void\n ): boolean {\n const maybeCb = arg3 || arg2;\n const encoding = typeof arg2 === 'string' ? arg2 : 'utf8';\n const data = typeof input === 'string' ? input : Buffer.from(input).toString(encoding);\n const cb = typeof maybeCb === 'function' ? maybeCb : undefined;\n try {\n return this._write(data);\n } finally {\n cb?.();\n }\n }\n\n [Symbol.dispose]() {\n this.destroy();\n }\n}\n\nconst isStdFd = (fd: number) => {\n switch (fd) {\n case 1:\n case 2:\n case process.stdout.fd:\n case process.stderr.fd:\n return true;\n default:\n return false;\n }\n};\n\nconst fsFsync = (fd: number, cb: (error?: NodeJS.ErrnoException | null) => void) => {\n try {\n fs.fsync(fd, cb);\n } catch (error: any) {\n cb(error);\n }\n};\n"],"names":["LogStream","BUSY_WRITE_TIMEOUT","HIGH_WATER_MARK","EventEmitter","constructor","dest","fs","fsyncSync","process","nextTick","emit","file","fd","writing","writable","error","written","code","setTimeout","outputLength","Buffer","byteLength","output","from","subarray","toString","length","onOpened","mkdir","path","dirname","recursive","err","open","once","onClose","fsFsync","isStdFd","close","shift","write","_end","end","arg1","arg2","arg3","maybeCb","input","undefined","encoding","cb","destroy","flush","onDrain","off","onError","_write","data","startIdx","endIdx","indexOf","line","slice","push","Symbol","dispose","stdout","stderr","fsync"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}