xref: /src/contrib/file/magic/Magdir/javascript (revision ae316d1d1cffd71ab7751f94e10118777a88e027)
177409849SXin LI
277409849SXin LI#------------------------------------------------------------------------------
3995a16e0SXin LI# $File: javascript,v 1.7 2024/11/10 14:48:55 christos Exp $
477409849SXin LI# javascript:  magic for javascript and node.js scripts.
577409849SXin LI#
672d4668cSXin LI0	string/tw	#!/bin/node		Node.js script executable
777409849SXin LI!:mime application/javascript
872d4668cSXin LI0	string/tw	#!/usr/bin/node		Node.js script executable
977409849SXin LI!:mime application/javascript
1072d4668cSXin LI0	string/tw	#!/bin/nodejs		Node.js script executable
1177409849SXin LI!:mime application/javascript
1272d4668cSXin LI0	string/tw	#!/usr/bin/nodejs	Node.js script executable
1377409849SXin LI!:mime application/javascript
1472d4668cSXin LI0	string/t		#!/usr/bin/env\ node	Node.js script executable
1577409849SXin LI!:mime application/javascript
1672d4668cSXin LI0	string/t		#!/usr/bin/env\ nodejs	Node.js script executable
1777409849SXin LI!:mime application/javascript
1872d4668cSXin LI
1972d4668cSXin LI# JavaScript
20995a16e0SXin LI# The strength is increased to beat the C++ but lose to HTML rules,
21995a16e0SXin LI# because javascript is embedded in hmtl files typically
2272d4668cSXin LI0	search	"use\x20strict"	JavaScript source
23995a16e0SXin LI!:strength +20
2472d4668cSXin LI!:mime	application/javascript
2572d4668cSXin LI!:ext 	js
2672d4668cSXin LI0	search	'use\x20strict'	JavaScript source
27995a16e0SXin LI!:strength +20
2872d4668cSXin LI!:mime	application/javascript
2972d4668cSXin LI!:ext 	js
3072d4668cSXin LI0	regex	module(\\.|\\[["'])exports.*=	JavaScript source
31995a16e0SXin LI!:strength +20
3272d4668cSXin LI!:mime	application/javascript
3372d4668cSXin LI!:ext 	js
3472d4668cSXin LI0	regex	\^(const|var|let).*=.*require\\(	JavaScript source
35995a16e0SXin LI!:strength +20
3672d4668cSXin LI!:mime	application/javascript
3772d4668cSXin LI!:ext 	js
3872d4668cSXin LI0	regex	\^export\x20(function|class|default|const|var|let|async)\x20	JavaScript source
39995a16e0SXin LI!:strength +20
4072d4668cSXin LI!:mime	application/javascript
4172d4668cSXin LI!:ext 	js
4272d4668cSXin LI0	regex	\\((async\x20)?function[(\x20]	JavaScript source
43995a16e0SXin LI!:strength +20
4472d4668cSXin LI!:mime	application/javascript
4572d4668cSXin LI!:ext 	js
4672d4668cSXin LI0	regex	\^(import|export).*\x20from\x20	JavaScript source
47995a16e0SXin LI!:strength +20
4872d4668cSXin LI!:mime	application/javascript
4972d4668cSXin LI!:ext 	js
5072d4668cSXin LI0	regex	\^(import|export)\x20["']\\./	JavaScript source
51995a16e0SXin LI!:strength +20
5272d4668cSXin LI!:mime	application/javascript
5372d4668cSXin LI!:ext 	js
5472d4668cSXin LI0	regex	typeof.*[!=]==	JavaScript source
55995a16e0SXin LI!:strength +20
5672d4668cSXin LI!:mime	application/javascript
5772d4668cSXin LI!:ext 	js
5872d4668cSXin LI
5972d4668cSXin LI# React Native minified JavaScript
6072d4668cSXin LI0	search/128	__BUNDLE_START_TIME__=	React Native minified JavaScript
61995a16e0SXin LI!:strength +20
6272d4668cSXin LI!:mime	application/javascript
6372d4668cSXin LI!:ext	bundle/jsbundle
6472d4668cSXin LI
65f210d1e9SXin LI# Hermes by Facebook https://hermesengine.dev/
66f210d1e9SXin LI# https://github.com/facebook/hermes/blob/master/include/hermes/\
67f210d1e9SXin LI# BCGen/HBC/BytecodeFileFormat.h#L24
68f210d1e9SXin LI0	lequad		0x1F1903C103BC1FC6	Hermes JavaScript bytecode
69f210d1e9SXin LI>8	lelong		x			\b, version %d
70ac338006SXin LI
71ac338006SXin LI# v8 JavaScript engine bytecode
72ac338006SXin LI# From: Alexandre Iooss <erdnaxe@crans.org>
73ac338006SXin LI# URL:	https://v8.dev/docs/ignition
74ac338006SXin LI# Note: used in bytenode and NW.js protected source code
75ac338006SXin LI# V8 bytecode extraction was added in NodeJS v5.7.0 (V8 4.6.85.31).
76ac338006SXin LI# Version information is provided for some v8 versions found in NodeJS releases.
77ac338006SXin LI2	uleshort		=0xC0DE
78ac338006SXin LI>0	ulelong^0xC0DE0000	>0
79ac338006SXin LI# Reservation table starts at 40
80ac338006SXin LI>>40	ulelong&0xFFFFFF00	=0x80000000
81ac338006SXin LI# Stub keys present
82ac338006SXin LI>>>24	ulelong			>0
83ac338006SXin LI>>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
84ac338006SXin LI>>>>4	ulelong			=0xEE4BF478	version 5.1.281.111,
85ac338006SXin LI>>>>4	ulelong			=0xC4A0100C	version 5.5.372.43,
86ac338006SXin LI>>>>8	ulelong			x		source size: %u bytes,
87ac338006SXin LI>>>>12	ulelong			x		cpu features: %#08X,
88ac338006SXin LI>>>>16	ulelong			x		flag hash: %#08X,
89ac338006SXin LI>>>>20	ulelong			x		%u reservations,
90ac338006SXin LI>>>>28	ulelong			x		payload size: %u bytes,
91ac338006SXin LI>>>>32	ulelong			x		checksum1: %#08X,
92ac338006SXin LI>>>>36	ulelong			x		checksum2: %#08X
93ac338006SXin LI# No stub keys
94ac338006SXin LI>>>24	ulelong			=0
95ac338006SXin LI>>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
96ac338006SXin LI>>>>4	ulelong			=0x54F0AD81	version 6.2.414.46,
97ac338006SXin LI>>>>4	ulelong			=0X7D1BF182	version 6.2.414.54,
98ac338006SXin LI>>>>4	ulelong			=0x35BA122E	version 6.2.414.77,
99ac338006SXin LI>>>>4	ulelong			=0X9319F9C2	version 6.2.414.78,
100ac338006SXin LI>>>>4	ulelong			=0xB1240060	version 6.6.346.32,
101ac338006SXin LI>>>>4	ulelong			=0x2B757060	version 6.7.288.46,
102ac338006SXin LI>>>>4	ulelong			=0x09D147AA	version 6.7.288.49,
103ac338006SXin LI>>>>4	ulelong			=0xF4D4F48A	version 6.8.275.32,
104ac338006SXin LI>>>>4	ulelong			=0xD3961326	version 7.0.276.38,
105ac338006SXin LI>>>>8	ulelong			x		source size: %u bytes,
106ac338006SXin LI>>>>12	ulelong			x		cpu features: %#08X,
107ac338006SXin LI>>>>16	ulelong			x		flag hash: %#08X,
108ac338006SXin LI>>>>20	ulelong			x		%u reservations,
109ac338006SXin LI>>>>28	ulelong			x		payload size: %u bytes,
110ac338006SXin LI>>>>32	ulelong			x		checksum1: %#08X,
111ac338006SXin LI>>>>36	ulelong			x		checksum2: %#08X
112ac338006SXin LI# Reservation table starts at 32
113ac338006SXin LI>>32	ulelong&0xFFFFFF00	=0x80000000
114ac338006SXin LI# Second checksum present
115ac338006SXin LI>>>28	ulelong			>0
116ac338006SXin LI>>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
117ac338006SXin LI>>>>4	ulelong			=0x21DDF627	version 7.4.288.21,
118ac338006SXin LI>>>>4	ulelong			=0x1FC9FE84	version 7.4.288.27,
119ac338006SXin LI>>>>4	ulelong			=0x60A99E8B	version 7.5.288.22,
120ac338006SXin LI>>>>4	ulelong			=0x4F665E90	version 7.6.303.29,
121ac338006SXin LI>>>>4	ulelong			=0xC7ACFCDE	version 7.7.299.11,
122ac338006SXin LI>>>>4	ulelong			=0x7F641D8F	version 7.7.299.13,
123ac338006SXin LI>>>>4	ulelong			=0xFD9A4F2E	version 7.8.279.17,
124ac338006SXin LI>>>>4	ulelong			=0x3A845324	version 7.8.279.23,
125ac338006SXin LI>>>>4	ulelong			=0xFF52FEAF	version 7.9.317.25,
126ac338006SXin LI>>>>8	ulelong			x		source size: %u bytes,
127ac338006SXin LI>>>>12	ulelong			x		flag hash: %#08X,
128ac338006SXin LI>>>>16	ulelong			x		%u reservations,
129ac338006SXin LI>>>>20	ulelong			x		payload size: %u bytes,
130ac338006SXin LI>>>>24	ulelong			x		checksum1: %#08X,
131ac338006SXin LI>>>>28	ulelong			x		checksum2: %#08X
132ac338006SXin LI# No second checksum
133ac338006SXin LI>>>28	ulelong			=0
134ac338006SXin LI>>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
135ac338006SXin LI>>>>4	ulelong			=0x8725E0F8	version 8.1.307.30,
136ac338006SXin LI>>>>4	ulelong			=0x09ED1289	version 8.1.307.31,
137ac338006SXin LI>>>>4	ulelong			=0xA5728C87	version 8.3.110.9,
138ac338006SXin LI>>>>4	ulelong			=0xB45C5D30	version 8.4.371.23,
139ac338006SXin LI>>>>4	ulelong			=0xED9C278B	version 8.4.371.19,
140ac338006SXin LI>>>>4	ulelong			=0xD27BFF42	version 8.6.395.16,
141ac338006SXin LI>>>>8	ulelong			x		source size: %u bytes,
142ac338006SXin LI>>>>12	ulelong			x		flag hash: %#08X,
143ac338006SXin LI>>>>16	ulelong			x		%u reservations,
144ac338006SXin LI>>>>20	ulelong			x		payload size: %u bytes,
145ac338006SXin LI>>>>24	ulelong			x		payload checksum: %#08X
146ac338006SXin LI# No reservation table and code starts at 24
147ac338006SXin LI>>32	ulelong		=0
148ac338006SXin LI>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
149ac338006SXin LI>>>4	ulelong			=0x9A6F0B0F	version 9.0.257.17,
150ac338006SXin LI>>>4	ulelong			=0x271D5D1E	version 9.0.257.24,
151ac338006SXin LI>>>4	ulelong			=0x4EEA75DF	version 9.0.257.25,
152ac338006SXin LI>>>4	ulelong			=0x80809479	version 9.1.269.36,
153ac338006SXin LI>>>4	ulelong			=0x55C46F65	version 9.1.269.38,
154ac338006SXin LI>>>4	ulelong			=0x8A9C758A	version 9.2.230.21,
155ac338006SXin LI>>>4	ulelong			=0x9712F0E1	version 9.3.345.16,
156ac338006SXin LI>>>4	ulelong			=0x29593715	version 9.4.146.19,
157ac338006SXin LI>>>4	ulelong			=0xCD991825	version 9.4.146.24,
158ac338006SXin LI>>>4	ulelong			=0xACDD64EE	version 9.4.146.26,
159ac338006SXin LI>>>4	ulelong			=0xC96B4CD5	version 9.5.172.21,
160ac338006SXin LI>>>4	ulelong			=0xBCCE4578	version 9.5.172.25,
161ac338006SXin LI>>>4	ulelong			=0xA2EEA077	version 9.6.180.15,
162ac338006SXin LI>>>4	ulelong			=0xFD350011	version 10.1.124.8,
163ac338006SXin LI>>>4	ulelong			=0xBEF4028F	version 10.2.154.13,
164ac338006SXin LI>>>4	ulelong			=0xAF632352	version 10.2.154.4,
165ac338006SXin LI>>>8	ulelong			x		source size: %u bytes,
166ac338006SXin LI>>>12	ulelong			x		flag hash: %#08X,
167ac338006SXin LI>>>16	ulelong			x		payload size: %u bytes,
168ac338006SXin LI>>>20	ulelong			x		payload checksum: %#08X
169