Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import * as esbuild from 'esbuild';
  2. import { readFile } from 'fs/promises';
  3. const argv = process.argv.slice(2);
  4. const json = await readFile(new URL('./package.json', import.meta.url), { encoding: 'utf8' });
  5. const pack = JSON.parse(json);
  6. const production = !pack.version.endsWith('-dev');
  7. const minify = (argv.indexOf('--minify') >= 0);
  8. const serve = (argv.indexOf('--serve') >= 0);
  9. const options = {
  10. //entryPoints: ['src/main.ts'], // AR.AR
  11. stdin: {
  12. contents: 'import { AR } from "./main.ts";\nmodule.exports = AR;',
  13. resolveDir: 'src',
  14. sourcefile: 'index.ts',
  15. },
  16. bundle: true,
  17. minify: minify,
  18. target: ['es2020'],
  19. format: 'iife',
  20. globalName: 'AR',
  21. define: {
  22. __AR_VERSION__: JSON.stringify(pack.version),
  23. __AR_WEBSITE__: JSON.stringify(pack.homepage),
  24. __AR_FLAGS__ : String(process.env.AR_FLAGS ?? 0),
  25. },
  26. legalComments: 'inline',
  27. banner: { js: generateBanner() },
  28. footer: { js: serve ? generateLiveReloadCode() : '' },
  29. outfile: 'build/' + (minify ? 'encantar.min.js' : 'encantar.js'),
  30. sourcemap: !production && 'linked',
  31. logLevel: 'info',
  32. };
  33. if(!serve) {
  34. await esbuild.build(options);
  35. process.exit(0);
  36. }
  37. const ctx = await esbuild.context(options);
  38. await ctx.watch();
  39. await ctx.serve({
  40. host: '0.0.0.0',
  41. port: Number(process.env.PORT ?? 8000),
  42. servedir: 'www',
  43. keyfile: new URL('.local-server.key', import.meta.url).pathname,
  44. certfile: new URL('.local-server.cert', import.meta.url).pathname,
  45. });
  46. function generateBanner()
  47. {
  48. const { version, description, homepage, license } = pack;
  49. const author = pack.author.replace('@', '(at)');
  50. const year = new Date().getFullYear();
  51. const date = new Date().toISOString();
  52. return [
  53. `/*!`,
  54. ` * encantar.js version ${version}`,
  55. ` * ${description}`,
  56. ` * Copyright 2022-${year} ${author}`,
  57. ` * ${homepage}`,
  58. ` *`,
  59. ` * @license ${license}`,
  60. ` * Date: ${date}`,
  61. `*/`
  62. ].join('\n');
  63. }
  64. function generateLiveReloadCode()
  65. {
  66. return `
  67. (function liveReload() {
  68. new EventSource('/esbuild').
  69. addEventListener('change', () => location.reload());
  70. })();
  71. `;
  72. }