xref: /netbsd-src/external/bsd/file/dist/magic/magdir/javascript (revision e15daa8be9575f7ad2ca804c7c7c2d7f8e182d98)
12ae0d66fSchristos
22ae0d66fSchristos#------------------------------------------------------------------------------
3*e15daa8bSchristos# $File: javascript,v 1.5 2023/01/12 00:02:16 christos Exp $
42ae0d66fSchristos# javascript:  magic for javascript and node.js scripts.
52ae0d66fSchristos#
6*e15daa8bSchristos0	string/tw	#!/bin/node		Node.js script executable
72ae0d66fSchristos!:mime application/javascript
8*e15daa8bSchristos0	string/tw	#!/usr/bin/node		Node.js script executable
92ae0d66fSchristos!:mime application/javascript
10*e15daa8bSchristos0	string/tw	#!/bin/nodejs		Node.js script executable
112ae0d66fSchristos!:mime application/javascript
12*e15daa8bSchristos0	string/tw	#!/usr/bin/nodejs	Node.js script executable
132ae0d66fSchristos!:mime application/javascript
14*e15daa8bSchristos0	string/t		#!/usr/bin/env\ node	Node.js script executable
152ae0d66fSchristos!:mime application/javascript
16*e15daa8bSchristos0	string/t		#!/usr/bin/env\ nodejs	Node.js script executable
172ae0d66fSchristos!:mime application/javascript
18*e15daa8bSchristos
19*e15daa8bSchristos# JavaScript
20*e15daa8bSchristos# The strength is increased to beat the C++ & HTML rules
21*e15daa8bSchristos0	search	"use\x20strict"	JavaScript source
22*e15daa8bSchristos!:strength +30
23*e15daa8bSchristos!:mime	application/javascript
24*e15daa8bSchristos!:ext 	js
25*e15daa8bSchristos0	search	'use\x20strict'	JavaScript source
26*e15daa8bSchristos!:strength +30
27*e15daa8bSchristos!:mime	application/javascript
28*e15daa8bSchristos!:ext 	js
29*e15daa8bSchristos0	regex	module(\\.|\\[["'])exports.*=	JavaScript source
30*e15daa8bSchristos!:strength +30
31*e15daa8bSchristos!:mime	application/javascript
32*e15daa8bSchristos!:ext 	js
33*e15daa8bSchristos0	regex	\^(const|var|let).*=.*require\\(	JavaScript source
34*e15daa8bSchristos!:strength +30
35*e15daa8bSchristos!:mime	application/javascript
36*e15daa8bSchristos!:ext 	js
37*e15daa8bSchristos0	regex	\^export\x20(function|class|default|const|var|let|async)\x20	JavaScript source
38*e15daa8bSchristos!:strength +30
39*e15daa8bSchristos!:mime	application/javascript
40*e15daa8bSchristos!:ext 	js
41*e15daa8bSchristos0	regex	\\((async\x20)?function[(\x20]	JavaScript source
42*e15daa8bSchristos!:strength +30
43*e15daa8bSchristos!:mime	application/javascript
44*e15daa8bSchristos!:ext 	js
45*e15daa8bSchristos0	regex	\^(import|export).*\x20from\x20	JavaScript source
46*e15daa8bSchristos!:strength +30
47*e15daa8bSchristos!:mime	application/javascript
48*e15daa8bSchristos!:ext 	js
49*e15daa8bSchristos0	regex	\^(import|export)\x20["']\\./	JavaScript source
50*e15daa8bSchristos!:strength +30
51*e15daa8bSchristos!:mime	application/javascript
52*e15daa8bSchristos!:ext 	js
53*e15daa8bSchristos0	regex	\^require\\(["']	JavaScript source
54*e15daa8bSchristos!:strength +30
55*e15daa8bSchristos!:mime	application/javascript
56*e15daa8bSchristos!:ext 	js
57*e15daa8bSchristos0	regex	typeof.*[!=]==	JavaScript source
58*e15daa8bSchristos!:strength +30
59*e15daa8bSchristos!:mime	application/javascript
60*e15daa8bSchristos!:ext 	js
61*e15daa8bSchristos
62*e15daa8bSchristos# React Native minified JavaScript
63*e15daa8bSchristos0	search/128	__BUNDLE_START_TIME__=	React Native minified JavaScript
64*e15daa8bSchristos!:strength +30
65*e15daa8bSchristos!:mime	application/javascript
66*e15daa8bSchristos!:ext	bundle/jsbundle
67*e15daa8bSchristos
68eff51ed2Schristos# Hermes by Facebook https://hermesengine.dev/
69eff51ed2Schristos# https://github.com/facebook/hermes/blob/master/include/hermes/\
70eff51ed2Schristos# BCGen/HBC/BytecodeFileFormat.h#L24
71eff51ed2Schristos0	lequad		0x1F1903C103BC1FC6	Hermes JavaScript bytecode
72eff51ed2Schristos>8	lelong		x			\b, version %d
73a77ebd86Schristos
74a77ebd86Schristos# v8 JavaScript engine bytecode
75a77ebd86Schristos# From: Alexandre Iooss <erdnaxe@crans.org>
76a77ebd86Schristos# URL:	https://v8.dev/docs/ignition
77a77ebd86Schristos# Note: used in bytenode and NW.js protected source code
78a77ebd86Schristos# V8 bytecode extraction was added in NodeJS v5.7.0 (V8 4.6.85.31).
79a77ebd86Schristos# Version information is provided for some v8 versions found in NodeJS releases.
80a77ebd86Schristos2	uleshort		=0xC0DE
81a77ebd86Schristos>0	ulelong^0xC0DE0000	>0
82a77ebd86Schristos# Reservation table starts at 40
83a77ebd86Schristos>>40	ulelong&0xFFFFFF00	=0x80000000
84a77ebd86Schristos# Stub keys present
85a77ebd86Schristos>>>24	ulelong			>0
86a77ebd86Schristos>>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
87a77ebd86Schristos>>>>4	ulelong			=0xEE4BF478	version 5.1.281.111,
88a77ebd86Schristos>>>>4	ulelong			=0xC4A0100C	version 5.5.372.43,
89a77ebd86Schristos>>>>8	ulelong			x		source size: %u bytes,
90a77ebd86Schristos>>>>12	ulelong			x		cpu features: %#08X,
91a77ebd86Schristos>>>>16	ulelong			x		flag hash: %#08X,
92a77ebd86Schristos>>>>20	ulelong			x		%u reservations,
93a77ebd86Schristos>>>>28	ulelong			x		payload size: %u bytes,
94a77ebd86Schristos>>>>32	ulelong			x		checksum1: %#08X,
95a77ebd86Schristos>>>>36	ulelong			x		checksum2: %#08X
96a77ebd86Schristos# No stub keys
97a77ebd86Schristos>>>24	ulelong			=0
98a77ebd86Schristos>>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
99a77ebd86Schristos>>>>4	ulelong			=0x54F0AD81	version 6.2.414.46,
100a77ebd86Schristos>>>>4	ulelong			=0X7D1BF182	version 6.2.414.54,
101a77ebd86Schristos>>>>4	ulelong			=0x35BA122E	version 6.2.414.77,
102a77ebd86Schristos>>>>4	ulelong			=0X9319F9C2	version 6.2.414.78,
103a77ebd86Schristos>>>>4	ulelong			=0xB1240060	version 6.6.346.32,
104a77ebd86Schristos>>>>4	ulelong			=0x2B757060	version 6.7.288.46,
105a77ebd86Schristos>>>>4	ulelong			=0x09D147AA	version 6.7.288.49,
106a77ebd86Schristos>>>>4	ulelong			=0xF4D4F48A	version 6.8.275.32,
107a77ebd86Schristos>>>>4	ulelong			=0xD3961326	version 7.0.276.38,
108a77ebd86Schristos>>>>8	ulelong			x		source size: %u bytes,
109a77ebd86Schristos>>>>12	ulelong			x		cpu features: %#08X,
110a77ebd86Schristos>>>>16	ulelong			x		flag hash: %#08X,
111a77ebd86Schristos>>>>20	ulelong			x		%u reservations,
112a77ebd86Schristos>>>>28	ulelong			x		payload size: %u bytes,
113a77ebd86Schristos>>>>32	ulelong			x		checksum1: %#08X,
114a77ebd86Schristos>>>>36	ulelong			x		checksum2: %#08X
115a77ebd86Schristos# Reservation table starts at 32
116a77ebd86Schristos>>32	ulelong&0xFFFFFF00	=0x80000000
117a77ebd86Schristos# Second checksum present
118a77ebd86Schristos>>>28	ulelong			>0
119a77ebd86Schristos>>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
120a77ebd86Schristos>>>>4	ulelong			=0x21DDF627	version 7.4.288.21,
121a77ebd86Schristos>>>>4	ulelong			=0x1FC9FE84	version 7.4.288.27,
122a77ebd86Schristos>>>>4	ulelong			=0x60A99E8B	version 7.5.288.22,
123a77ebd86Schristos>>>>4	ulelong			=0x4F665E90	version 7.6.303.29,
124a77ebd86Schristos>>>>4	ulelong			=0xC7ACFCDE	version 7.7.299.11,
125a77ebd86Schristos>>>>4	ulelong			=0x7F641D8F	version 7.7.299.13,
126a77ebd86Schristos>>>>4	ulelong			=0xFD9A4F2E	version 7.8.279.17,
127a77ebd86Schristos>>>>4	ulelong			=0x3A845324	version 7.8.279.23,
128a77ebd86Schristos>>>>4	ulelong			=0xFF52FEAF	version 7.9.317.25,
129a77ebd86Schristos>>>>8	ulelong			x		source size: %u bytes,
130a77ebd86Schristos>>>>12	ulelong			x		flag hash: %#08X,
131a77ebd86Schristos>>>>16	ulelong			x		%u reservations,
132a77ebd86Schristos>>>>20	ulelong			x		payload size: %u bytes,
133a77ebd86Schristos>>>>24	ulelong			x		checksum1: %#08X,
134a77ebd86Schristos>>>>28	ulelong			x		checksum2: %#08X
135a77ebd86Schristos# No second checksum
136a77ebd86Schristos>>>28	ulelong			=0
137a77ebd86Schristos>>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
138a77ebd86Schristos>>>>4	ulelong			=0x8725E0F8	version 8.1.307.30,
139a77ebd86Schristos>>>>4	ulelong			=0x09ED1289	version 8.1.307.31,
140a77ebd86Schristos>>>>4	ulelong			=0xA5728C87	version 8.3.110.9,
141a77ebd86Schristos>>>>4	ulelong			=0xB45C5D30	version 8.4.371.23,
142a77ebd86Schristos>>>>4	ulelong			=0xED9C278B	version 8.4.371.19,
143a77ebd86Schristos>>>>4	ulelong			=0xD27BFF42	version 8.6.395.16,
144a77ebd86Schristos>>>>8	ulelong			x		source size: %u bytes,
145a77ebd86Schristos>>>>12	ulelong			x		flag hash: %#08X,
146a77ebd86Schristos>>>>16	ulelong			x		%u reservations,
147a77ebd86Schristos>>>>20	ulelong			x		payload size: %u bytes,
148a77ebd86Schristos>>>>24	ulelong			x		payload checksum: %#08X
149a77ebd86Schristos# No reservation table and code starts at 24
150a77ebd86Schristos>>32	ulelong		=0
151a77ebd86Schristos>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
152a77ebd86Schristos>>>4	ulelong			=0x9A6F0B0F	version 9.0.257.17,
153a77ebd86Schristos>>>4	ulelong			=0x271D5D1E	version 9.0.257.24,
154a77ebd86Schristos>>>4	ulelong			=0x4EEA75DF	version 9.0.257.25,
155a77ebd86Schristos>>>4	ulelong			=0x80809479	version 9.1.269.36,
156a77ebd86Schristos>>>4	ulelong			=0x55C46F65	version 9.1.269.38,
157a77ebd86Schristos>>>4	ulelong			=0x8A9C758A	version 9.2.230.21,
158a77ebd86Schristos>>>4	ulelong			=0x9712F0E1	version 9.3.345.16,
159a77ebd86Schristos>>>4	ulelong			=0x29593715	version 9.4.146.19,
160a77ebd86Schristos>>>4	ulelong			=0xCD991825	version 9.4.146.24,
161a77ebd86Schristos>>>4	ulelong			=0xACDD64EE	version 9.4.146.26,
162a77ebd86Schristos>>>4	ulelong			=0xC96B4CD5	version 9.5.172.21,
163a77ebd86Schristos>>>4	ulelong			=0xBCCE4578	version 9.5.172.25,
164a77ebd86Schristos>>>4	ulelong			=0xA2EEA077	version 9.6.180.15,
165a77ebd86Schristos>>>4	ulelong			=0xFD350011	version 10.1.124.8,
166a77ebd86Schristos>>>4	ulelong			=0xBEF4028F	version 10.2.154.13,
167a77ebd86Schristos>>>4	ulelong			=0xAF632352	version 10.2.154.4,
168a77ebd86Schristos>>>8	ulelong			x		source size: %u bytes,
169a77ebd86Schristos>>>12	ulelong			x		flag hash: %#08X,
170a77ebd86Schristos>>>16	ulelong			x		payload size: %u bytes,
171a77ebd86Schristos>>>20	ulelong			x		payload checksum: %#08X
172