@@ -3,6 +3,7 @@ const UglifyJS = require("uglify-js");
33const fs = require ( "fs" ) ;
44const esprima = require ( "esprima" ) ;
55const path = require ( "path" ) ;
6+ const acorn = require ( "acorn" ) ;
67
78const GREEN = "\x1b[32m%s\x1b[0m" ;
89const YELLOW = "\x1b[33m%s\x1b[0m" ;
@@ -30,21 +31,21 @@ const fillTemplate = (template, { overwriteOptions = null } = {}) => {
3031 return template
3132 . replace (
3233 / \{ \{ \s ? n g i n x H o s t \s ? \} \} / gi,
33- '<!--# echo var="http_host" default="" -->' ,
34+ '<!--# echo var="http_host" default="" -->'
3435 )
3536 . replace (
3637 / \{ \{ \s ? n g i n x P r o x y H o s t \s ? \} \} / gi,
37- '<!--# echo var="proxy_hostname" default="" --><!--# echo var="proxy_path" default="/simple" -->' ,
38+ '<!--# echo var="proxy_hostname" default="" --><!--# echo var="proxy_path" default="/simple" -->'
3839 )
3940 . replace (
4041 / \\ ? " \{ \{ \s ? o v e r w r i t e O p t i o n s \s ? \} \} \\ ? " / gi,
4142 overwriteOptions
4243 ? JSON . stringify ( overwriteOptions ) . replace ( / : " ( [ ^ " ] + ) " / gi, ":$1" )
43- : "{}" ,
44+ : "{}"
4445 )
4546 . replace (
4647 / " \{ \{ \s ? c l o u d F l a r e C u s t o m D o m a i n \s ? \} \} " / gi,
47- 'INSTALL_OPTIONS.custom_domain || "queue.simpleanalyticscdn.com"' ,
48+ 'INSTALL_OPTIONS.custom_domain || "queue.simpleanalyticscdn.com"'
4849 ) ;
4950} ;
5051
@@ -284,7 +285,7 @@ const files = templates.reduce((list, template) => {
284285 if ( template . variables . sri ) {
285286 list . push (
286287 { ...template , variables : { ...template . variables , sri : true } } ,
287- { ...template , variables : { ...template . variables , sri : false } } ,
288+ { ...template , variables : { ...template . variables , sri : false } }
288289 ) ;
289290 } else {
290291 list . push ( template ) ;
@@ -320,7 +321,7 @@ for (const file of files) {
320321 . digest ( "hex" )
321322 . slice ( 0 , 4 ) ;
322323
323- const prepend = `/* Simple Analytics - Privacy friendly analytics (docs.simpleanalytics.com/script; ${ date } ; ${ hash } ${
324+ const prepend = `/* Simple Analytics - Privacy-first analytics (docs.simpleanalytics.com/script; ${ date } ; ${ hash } ${
324325 variables . sri ? `; SRI-version` : ""
325326 } ${ variables . version ? `; v${ variables . version } ` : "" } ) */\n`;
326327
@@ -346,7 +347,7 @@ for (const file of files) {
346347 filename : originalFileName ,
347348 url : `${ finalFileName } .map` ,
348349 } ,
349- } ,
350+ }
350351 )
351352 : {
352353 code : prepend + rawCode ,
@@ -358,6 +359,31 @@ for (const file of files) {
358359 for ( const warning of warnings || [ ] )
359360 console . warn ( YELLOW , `[${ name } ] ${ warning } ` ) ;
360361
362+ try {
363+ acorn . parse ( rawCode , { ecmaVersion : 5 } ) ;
364+ } catch ( error ) {
365+ // console.log("acorn", error);
366+
367+ // error object:
368+ // pos: 147,
369+ // loc: Position { line: 12, column: 0 },
370+ // raisedAt: 148
371+
372+ // Find part of the code that is causing the error
373+ const lines = rawCode . split ( "\n" ) ;
374+ const line = error . loc . line ;
375+ const column = error . loc . column ;
376+ const start = Math . max ( 0 , line - 3 ) ;
377+ const end = Math . min ( lines . length , line + 3 ) ;
378+ const codeSnippet = lines . slice ( start , end ) . join ( "\n" ) ;
379+ const sentence = lines [ error . loc . line - 1 ] ;
380+
381+ // console.log({ codeSnippet, line: lines[error.loc.line - 1] });
382+
383+ throw new Error (
384+ `${ error . message } at line ${ sentence } position ${ column } : ${ codeSnippet } `
385+ ) ;
386+ }
361387 const code = fillTemplate ( codeTemplate , variables ) ;
362388
363389 const validate = template ( {
@@ -374,7 +400,7 @@ for (const file of files) {
374400 RED ,
375401 `[${ name } ][ERROR] ${ input
376402 . split ( "/" )
377- . pop ( ) } ${ description } at line ${ lineNumber } position ${ index } `,
403+ . pop ( ) } ${ description } at line ${ lineNumber } position ${ index } `
378404 ) ;
379405 continue ;
380406 }
@@ -402,15 +428,15 @@ for (const file of files) {
402428
403429 let write = code . replace (
404430 / s o u r c e M a p p i n g U R L = l a t e s t \. j s \. m a p / gi,
405- `sourceMappingURL=${ cdnFileName } .map` ,
431+ `sourceMappingURL=${ cdnFileName } .map`
406432 ) ;
407433
408434 fs . writeFileSync ( versionFile , write ) ;
409435
410436 if ( compiledMap ) {
411437 let writeCompiled = compiledMap . replace (
412438 / l a t e s t \. s o u r c e \. j s / gi,
413- cdnFileName ,
439+ cdnFileName
414440 ) ;
415441
416442 fs . writeFileSync ( `${ versionFile } .map` , writeCompiled ) ;
@@ -438,7 +464,7 @@ for (const file of files) {
438464 console . log (
439465 ` ${ name . toLowerCase ( ) } ${ fill1 } Compiled ${ sourceName } ${ fill2 } ${ bytesZeroFilled } bytes ${
440466 variables . sri ? " (SRI)" : ""
441- } `,
467+ } `
442468 ) ;
443469}
444470
0 commit comments