@twick/vite-plugin 0.14.19 → 0.14.21

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.
Files changed (56) hide show
  1. package/lib/index.d.ts +3 -0
  2. package/lib/index.js +23 -0
  3. package/lib/index.js.map +1 -0
  4. package/lib/main.d.ts +71 -0
  5. package/lib/main.js +40 -0
  6. package/lib/main.js.map +1 -0
  7. package/lib/openInExplorer.d.ts +1 -0
  8. package/lib/openInExplorer.js +44 -0
  9. package/lib/openInExplorer.js.map +1 -0
  10. package/lib/partials/assets.d.ts +6 -0
  11. package/lib/partials/assets.js +50 -0
  12. package/lib/partials/assets.js.map +1 -0
  13. package/lib/partials/editor.d.ts +8 -0
  14. package/lib/partials/editor.js +73 -0
  15. package/lib/partials/editor.js.map +1 -0
  16. package/lib/partials/ffmpegBridge.d.ts +40 -0
  17. package/lib/partials/ffmpegBridge.js +195 -0
  18. package/lib/partials/ffmpegBridge.js.map +1 -0
  19. package/lib/partials/imageExporter.d.ts +6 -0
  20. package/lib/partials/imageExporter.js +45 -0
  21. package/lib/partials/imageExporter.js.map +1 -0
  22. package/lib/partials/index.d.ts +11 -0
  23. package/lib/partials/index.js +28 -0
  24. package/lib/partials/index.js.map +1 -0
  25. package/lib/partials/meta.d.ts +2 -0
  26. package/lib/partials/meta.js +68 -0
  27. package/lib/partials/meta.js.map +1 -0
  28. package/lib/partials/metrics.d.ts +2 -0
  29. package/lib/partials/metrics.js +13 -0
  30. package/lib/partials/metrics.js.map +1 -0
  31. package/lib/partials/projects.d.ts +10 -0
  32. package/lib/partials/projects.js +34 -0
  33. package/lib/partials/projects.js.map +1 -0
  34. package/lib/partials/rive.d.ts +2 -0
  35. package/lib/partials/rive.js +70 -0
  36. package/lib/partials/rive.js.map +1 -0
  37. package/lib/partials/settings.d.ts +2 -0
  38. package/lib/partials/settings.js +65 -0
  39. package/lib/partials/settings.js.map +1 -0
  40. package/lib/partials/wasmExporter.d.ts +2 -0
  41. package/lib/partials/wasmExporter.js +87 -0
  42. package/lib/partials/wasmExporter.js.map +1 -0
  43. package/lib/partials/webgl.d.ts +10 -0
  44. package/lib/partials/webgl.js +88 -0
  45. package/lib/partials/webgl.js.map +1 -0
  46. package/lib/plugins.d.ts +99 -0
  47. package/lib/plugins.js +9 -0
  48. package/lib/plugins.js.map +1 -0
  49. package/lib/tsconfig.tsbuildinfo +1 -0
  50. package/lib/utils.d.ts +6 -0
  51. package/lib/utils.js +44 -0
  52. package/lib/utils.js.map +1 -0
  53. package/lib/versions.d.ts +6 -0
  54. package/lib/versions.js +28 -0
  55. package/lib/versions.js.map +1 -0
  56. package/package.json +4 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageExporter.js","sourceRoot":"","sources":["../../src/partials/imageExporter.ts"],"names":[],"mappings":";;;;;AAUA,wCAgDC;AA1DD,4CAAoB;AACpB,4DAA8B;AAC9B,gDAAwB;AAExB,sDAAiD;AAMjD,SAAgB,cAAc,CAAC,EAAC,UAAU,EAAuB;IAC/D,OAAO;QACL,IAAI,EAAE,gBAAgB;QAEtB,eAAe,CAAC,MAAM;YACpB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBACxC,IAAI,GAAG,CAAC,GAAG,KAAK,qBAAqB,EAAE,CAAC;oBACtC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC/B,YAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;oBAC9C,CAAC;oBACD,IAAA,+BAAc,EAAC,UAAU,CAAC,CAAC;oBAC3B,GAAG,CAAC,GAAG,EAAE,CAAC;oBACV,OAAO;gBACT,CAAC;gBAED,IAAI,EAAE,CAAC;YACT,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,EAAE,CACV,cAAc,EACd,KAAK,EACH,EAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAC,EACjE,MAAM,EACN,EAAE;gBACF,MAAM,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;qBAC7C,QAAQ,EAAE;qBACV,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACpB,MAAM,SAAS,GAAG,oBAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAC3C,MAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAC9B,UAAU,EACV,GAAG,cAAc,EACjB,GAAG,IAAI,IAAI,SAAS,EAAE,CACvB,CAAC;gBACF,MAAM,eAAe,GAAG,cAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAErD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;oBACpC,YAAE,CAAC,SAAS,CAAC,eAAe,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;gBACnD,CAAC;gBAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrD,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,UAAU,EAAE;oBACtD,QAAQ,EAAE,QAAQ;iBACnB,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAC,KAAK,EAAC,CAAC,CAAC;YAC3C,CAAC,CACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export * from './assets';
2
+ export * from './editor';
3
+ export * from './ffmpegBridge';
4
+ export * from './imageExporter';
5
+ export * from './meta';
6
+ export * from './metrics';
7
+ export * from './projects';
8
+ export * from './rive';
9
+ export * from './settings';
10
+ export * from './wasmExporter';
11
+ export * from './webgl';
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./assets"), exports);
18
+ __exportStar(require("./editor"), exports);
19
+ __exportStar(require("./ffmpegBridge"), exports);
20
+ __exportStar(require("./imageExporter"), exports);
21
+ __exportStar(require("./meta"), exports);
22
+ __exportStar(require("./metrics"), exports);
23
+ __exportStar(require("./projects"), exports);
24
+ __exportStar(require("./rive"), exports);
25
+ __exportStar(require("./settings"), exports);
26
+ __exportStar(require("./wasmExporter"), exports);
27
+ __exportStar(require("./webgl"), exports);
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/partials/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,2CAAyB;AACzB,iDAA+B;AAC/B,kDAAgC;AAChC,yCAAuB;AACvB,4CAA0B;AAC1B,6CAA2B;AAC3B,yCAAuB;AACvB,6CAA2B;AAC3B,iDAA+B;AAC/B,0CAAwB"}
@@ -0,0 +1,2 @@
1
+ import type { Plugin } from 'vite';
2
+ export declare function metaPlugin(): Plugin;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.metaPlugin = metaPlugin;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ function metaPlugin() {
10
+ const timeStamps = {};
11
+ let config;
12
+ return {
13
+ name: 'twick:meta',
14
+ configResolved(resolvedConfig) {
15
+ config = resolvedConfig;
16
+ },
17
+ async transform(code, id) {
18
+ const [base] = id.split('?');
19
+ const { name, ext } = path_1.default.posix.parse(base);
20
+ if (ext !== '.meta') {
21
+ return;
22
+ }
23
+ const sourceFile = config.command === 'build' ? false : JSON.stringify(id);
24
+ /* language=typescript */
25
+ return `\
26
+ import {MetaFile} from '@twick/core';
27
+ let meta;
28
+ if (import.meta.hot) {
29
+ meta = import.meta.hot.data.meta;
30
+ }
31
+ meta ??= new MetaFile('${name}', ${sourceFile});
32
+ if (import.meta.hot) {
33
+ import.meta.hot.accept();
34
+ import.meta.hot.data.meta = meta;
35
+ }
36
+ meta.loadData(${code});
37
+ export default meta;
38
+ `;
39
+ },
40
+ configureServer(server) {
41
+ server.ws.on('twick:meta', async ({ source, data }, client) => {
42
+ // Ignore virtual meta files.
43
+ if (source.startsWith('\0')) {
44
+ return;
45
+ }
46
+ timeStamps[source] = Date.now();
47
+ if (!process.env.DONT_WRITE_TO_META_FILES) {
48
+ await fs_1.default.promises.writeFile(source, JSON.stringify(data, undefined, 2), 'utf8');
49
+ }
50
+ client.send('twick:meta-ack', { source });
51
+ });
52
+ },
53
+ handleHotUpdate(ctx) {
54
+ const now = Date.now();
55
+ const modules = [];
56
+ for (const module of ctx.modules) {
57
+ if (module.file !== null &&
58
+ timeStamps[module.file] &&
59
+ timeStamps[module.file] + 1000 > now) {
60
+ continue;
61
+ }
62
+ modules.push(module);
63
+ }
64
+ return modules;
65
+ },
66
+ };
67
+ }
68
+ //# sourceMappingURL=meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/partials/meta.ts"],"names":[],"mappings":";;;;;AAIA,gCA2EC;AA/ED,4CAAoB;AACpB,gDAAwB;AAGxB,SAAgB,UAAU;IACxB,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,IAAI,MAAsB,CAAC;IAC3B,OAAO;QACL,IAAI,EAAE,YAAY;QAElB,cAAc,CAAC,cAAc;YAC3B,MAAM,GAAG,cAAc,CAAC;QAC1B,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE;YACtB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,EAAC,IAAI,EAAE,GAAG,EAAC,GAAG,cAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,MAAM,UAAU,GACd,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAE1D,yBAAyB;YACzB,OAAO;;;;;;yBAMY,IAAI,MAAM,UAAU;;;;;gBAK7B,IAAI;;CAEnB,CAAC;QACE,CAAC;QAED,eAAe,CAAC,MAAM;YACpB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,EAAE,MAAM,EAAE,EAAE;gBAC1D,6BAA6B;gBAC7B,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5B,OAAO;gBACT,CAAC;gBAED,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;oBAC1C,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,MAAM,EACN,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,EAClC,MAAM,CACP,CAAC;gBACJ,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAC,MAAM,EAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,eAAe,CAAC,GAAG;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,EAAE,CAAC;YAEnB,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBACjC,IACE,MAAM,CAAC,IAAI,KAAK,IAAI;oBACpB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;oBACvB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,EACpC,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Plugin } from 'vite';
2
+ export declare function metricsPlugin(): Plugin;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.metricsPlugin = metricsPlugin;
4
+ const telemetry_1 = require("@twick/telemetry");
5
+ function metricsPlugin() {
6
+ return {
7
+ name: 'twick:metrics',
8
+ async configResolved() {
9
+ (0, telemetry_1.sendEvent)(telemetry_1.EventName.ServerStarted);
10
+ },
11
+ };
12
+ }
13
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/partials/metrics.ts"],"names":[],"mappings":";;AAGA,sCAQC;AAXD,gDAAsD;AAGtD,SAAgB,aAAa;IAC3B,OAAO;QACL,IAAI,EAAE,eAAe;QAErB,KAAK,CAAC,cAAc;YAClB,IAAA,qBAAS,EAAC,qBAAS,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Plugin } from 'vite';
2
+ import type { PluginOptions } from '../plugins';
3
+ import type { Projects } from '../utils';
4
+ interface ProjectPluginConfig {
5
+ buildForEditor?: boolean;
6
+ plugins: PluginOptions[];
7
+ projects: Projects;
8
+ }
9
+ export declare function projectsPlugin({ buildForEditor, projects, }: ProjectPluginConfig): Plugin;
10
+ export {};
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.projectsPlugin = projectsPlugin;
4
+ function projectsPlugin({ buildForEditor, projects, }) {
5
+ // TODO(refactor): use version information
6
+ // const versions = JSON.stringify(getVersions());
7
+ return {
8
+ name: 'twick:project',
9
+ config(config) {
10
+ return {
11
+ build: {
12
+ target: buildForEditor ? 'esnext' : 'modules',
13
+ assetsDir: './',
14
+ rollupOptions: {
15
+ preserveEntrySignatures: 'strict',
16
+ input: Object.fromEntries(projects.list.map(project => [project.name, project.url])),
17
+ },
18
+ },
19
+ server: {
20
+ port: config?.server?.port ?? 9000,
21
+ },
22
+ esbuild: {
23
+ jsx: 'automatic',
24
+ jsxImportSource: '@twick/2d/lib',
25
+ },
26
+ optimizeDeps: {
27
+ entries: projects.list.map(project => project.url),
28
+ exclude: ['preact', 'preact/*', '@preact/signals'],
29
+ },
30
+ };
31
+ },
32
+ };
33
+ }
34
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/partials/projects.ts"],"names":[],"mappings":";;AAWA,wCAmCC;AAnCD,SAAgB,cAAc,CAAC,EAC7B,cAAc,EACd,QAAQ,GACY;IACpB,0CAA0C;IAC1C,kDAAkD;IAClD,OAAO;QACL,IAAI,EAAE,eAAe;QAErB,MAAM,CAAC,MAAM;YACX,OAAO;gBACL,KAAK,EAAE;oBACL,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;oBAC7C,SAAS,EAAE,IAAI;oBACf,aAAa,EAAE;wBACb,uBAAuB,EAAE,QAAQ;wBACjC,KAAK,EAAE,MAAM,CAAC,WAAW,CACvB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAC1D;qBACF;iBACF;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI;iBACnC;gBACD,OAAO,EAAE;oBACP,GAAG,EAAE,WAAW;oBAChB,eAAe,EAAE,eAAe;iBACjC;gBACD,YAAY,EAAE;oBACZ,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;oBAClD,OAAO,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,iBAAiB,CAAC;iBACnD;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Plugin } from 'vite';
2
+ export declare function rivePlugin(): Plugin;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.rivePlugin = rivePlugin;
30
+ const fs = __importStar(require("fs"));
31
+ const path_1 = __importDefault(require("path"));
32
+ const stream_1 = require("stream");
33
+ async function getRiveWasmPath() {
34
+ try {
35
+ const packageJsonPath = require.resolve('@rive-app/canvas-advanced/package.json');
36
+ const packageDir = path_1.default.dirname(packageJsonPath);
37
+ const wasmPath = path_1.default.join(packageDir, 'rive.wasm');
38
+ await fs.promises.access(wasmPath, fs.constants.F_OK);
39
+ return wasmPath;
40
+ }
41
+ catch (error) {
42
+ console.error('Error finding Rive WASM file:', error);
43
+ throw new Error('Could not find Rive WASM file');
44
+ }
45
+ }
46
+ function rivePlugin() {
47
+ return {
48
+ name: 'twick:rive-wasm',
49
+ configureServer(server) {
50
+ server.middlewares.use(async (req, res, next) => {
51
+ if (req.url && req.url === '/@rive-wasm') {
52
+ try {
53
+ const wasmPath = await getRiveWasmPath();
54
+ const file = await fs.promises.readFile(wasmPath);
55
+ res.setHeader('Content-Type', 'application/wasm');
56
+ stream_1.Readable.from(file).pipe(res);
57
+ }
58
+ catch (error) {
59
+ console.error('Error serving Rive WASM file:', error);
60
+ res.statusCode = 500;
61
+ res.end('Error serving Rive WASM file');
62
+ }
63
+ return;
64
+ }
65
+ next();
66
+ });
67
+ },
68
+ };
69
+ }
70
+ //# sourceMappingURL=rive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rive.js","sourceRoot":"","sources":["../../src/partials/rive.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,gCAuBC;AA7CD,uCAAyB;AACzB,gDAAwB;AACxB,mCAAgC;AAGhC,KAAK,UAAU,eAAe;IAC5B,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CACrC,wCAAwC,CACzC,CAAC;QACF,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAEpD,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEtD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,SAAgB,UAAU;IACxB,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,eAAe,CAAC,MAAM;YACpB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBAC9C,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,aAAa,EAAE,CAAC;oBACzC,IAAI,CAAC;wBACH,MAAM,QAAQ,GAAG,MAAM,eAAe,EAAE,CAAC;wBACzC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBAElD,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;wBAClD,iBAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAChC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;wBACtD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;wBACrB,GAAG,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;oBAC1C,CAAC;oBACD,OAAO;gBACT,CAAC;gBACD,IAAI,EAAE,CAAC;YACT,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Plugin } from 'vite';
2
+ export declare function settingsPlugin(): Plugin;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.settingsPlugin = settingsPlugin;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const os_1 = __importDefault(require("os"));
9
+ const path_1 = __importDefault(require("path"));
10
+ function settingsPlugin() {
11
+ const settingsId = 'virtual:settings.meta';
12
+ const resolvedSettingsId = '\0' + settingsId;
13
+ const settingsPath = path_1.default.resolve(os_1.default.homedir(), '.twick/settings.json');
14
+ const outputDirectory = path_1.default.dirname(settingsPath);
15
+ return {
16
+ name: 'twick:settings',
17
+ resolveId(id) {
18
+ if (id === settingsId) {
19
+ return resolvedSettingsId;
20
+ }
21
+ },
22
+ async load(id) {
23
+ if (id === resolvedSettingsId) {
24
+ let parsed = {};
25
+ try {
26
+ parsed = JSON.parse(await fs_1.default.promises.readFile(settingsPath, 'utf8'));
27
+ }
28
+ catch (_) {
29
+ // Ignore an invalid settings file
30
+ }
31
+ return JSON.stringify(parsed);
32
+ }
33
+ },
34
+ configureServer(server) {
35
+ server.ws.on('twick:meta', async ({ source, data }, client) => {
36
+ if (source !== resolvedSettingsId) {
37
+ return;
38
+ }
39
+ await fs_1.default.promises.mkdir(outputDirectory, { recursive: true });
40
+ const newData = JSON.stringify(data, undefined, 2);
41
+ let oldData = '';
42
+ try {
43
+ oldData = await fs_1.default.promises.readFile(settingsPath, 'utf8');
44
+ }
45
+ catch (_) {
46
+ // Ignore an invalid settings file
47
+ }
48
+ if (oldData !== newData) {
49
+ await Promise.all([
50
+ fs_1.default.promises.writeFile(settingsPath, newData, 'utf8'),
51
+ // Invalidate the module so that the settings are up-to-date next
52
+ // time the browser is refreshed.
53
+ server.moduleGraph.getModuleByUrl(source).then(module => {
54
+ if (module) {
55
+ server.moduleGraph.invalidateModule(module);
56
+ }
57
+ }),
58
+ ]);
59
+ }
60
+ client.send('twick:meta-ack', { source });
61
+ });
62
+ },
63
+ };
64
+ }
65
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/partials/settings.ts"],"names":[],"mappings":";;;;;AAKA,wCA4DC;AAjED,4CAAoB;AACpB,4CAAoB;AACpB,gDAAwB;AAGxB,SAAgB,cAAc;IAC5B,MAAM,UAAU,GAAG,uBAAuB,CAAC;IAC3C,MAAM,kBAAkB,GAAG,IAAI,GAAG,UAAU,CAAC;IAC7C,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,CAAC;IACxE,MAAM,eAAe,GAAG,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEnD,OAAO;QACL,IAAI,EAAE,gBAAgB;QAEtB,SAAS,CAAC,EAAE;YACV,IAAI,EAAE,KAAK,UAAU,EAAE,CAAC;gBACtB,OAAO,kBAAkB,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,KAAK,kBAAkB,EAAE,CAAC;gBAC9B,IAAI,MAAM,GAAG,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;gBACxE,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,kCAAkC;gBACpC,CAAC;gBAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,eAAe,CAAC,MAAM;YACpB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,EAAE,MAAM,EAAE,EAAE;gBAC1D,IAAI,MAAM,KAAK,kBAAkB,EAAE,CAAC;oBAClC,OAAO;gBACT,CAAC;gBAED,MAAM,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;gBAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBACnD,IAAI,OAAO,GAAG,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,OAAO,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;gBAC7D,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,kCAAkC;gBACpC,CAAC;gBAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;oBACxB,MAAM,OAAO,CAAC,GAAG,CAAC;wBAChB,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC;wBACpD,iEAAiE;wBACjE,iCAAiC;wBACjC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;4BACtD,IAAI,MAAM,EAAE,CAAC;gCACX,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;4BAC9C,CAAC;wBACH,CAAC,CAAC;qBACH,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAC,MAAM,EAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Plugin } from 'vite';
2
+ export declare function wasmExporterPlugin(): Plugin;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.wasmExporterPlugin = wasmExporterPlugin;
30
+ const formidable_1 = require("formidable");
31
+ const fs = __importStar(require("fs"));
32
+ const os = __importStar(require("os"));
33
+ const path_1 = __importDefault(require("path"));
34
+ const stream_1 = require("stream");
35
+ function wasmExporterPlugin() {
36
+ return {
37
+ name: 'twick:mp4-wasm',
38
+ configureServer(server) {
39
+ // Virtual file for mp4-wasm
40
+ server.middlewares.use(async (req, res, next) => {
41
+ if (req.url && req.url === '/@mp4-wasm') {
42
+ const pathNew = path_1.default.dirname(require.resolve('mp4-wasm'));
43
+ const filePath = path_1.default.resolve(pathNew, 'mp4.wasm');
44
+ const file = await fs.promises.readFile(filePath);
45
+ res.setHeader('Content-Type', 'application/wasm');
46
+ stream_1.Readable.from(file).pipe(res);
47
+ return;
48
+ }
49
+ next();
50
+ });
51
+ // Endpoint to download the video file from the client
52
+ server.middlewares.use('/uploadVideoFile', async (req, res) => {
53
+ if (req.method === 'POST') {
54
+ const form = new formidable_1.IncomingForm({ maxFileSize: 1024 * 1024 * 1024 * 10 }); // 10GB limit
55
+ form.parse(req, async (err, fields, files) => {
56
+ if (err) {
57
+ console.error('Error parsing form:', err);
58
+ res.statusCode = 500;
59
+ res.end();
60
+ return;
61
+ }
62
+ try {
63
+ const tempDir = fields.tempDir[0];
64
+ const file = files.file[0];
65
+ const outputPath = path_1.default.join(os.tmpdir(), tempDir, 'visuals.mp4');
66
+ const writeStream = fs.createWriteStream(outputPath);
67
+ await new Promise((resolve, reject) => {
68
+ fs.createReadStream(file.filepath)
69
+ .pipe(writeStream)
70
+ .on('finish', resolve)
71
+ .on('error', reject);
72
+ });
73
+ res.statusCode = 200;
74
+ res.end();
75
+ }
76
+ catch (err) {
77
+ console.error('Error uploading video:', err);
78
+ res.statusCode = 500;
79
+ res.end();
80
+ }
81
+ });
82
+ }
83
+ });
84
+ },
85
+ };
86
+ }
87
+ //# sourceMappingURL=wasmExporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasmExporter.js","sourceRoot":"","sources":["../../src/partials/wasmExporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Plugin } from 'vite';
2
+ declare module 'source-map' {
3
+ interface SourceNode {
4
+ add(value: string | SourceNode): void;
5
+ }
6
+ interface SourceMapGenerator {
7
+ toJSON(): any;
8
+ }
9
+ }
10
+ export declare function webglPlugin(): Plugin;
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.webglPlugin = webglPlugin;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const source_map_1 = require("source-map");
10
+ const vite_1 = require("vite");
11
+ const GLSL_EXTENSION_REGEX = /\.glsl(?:$|\?)/;
12
+ const INCLUDE_REGEX = /^#include "([^"]+)"/;
13
+ function webglPlugin() {
14
+ let config;
15
+ return {
16
+ name: 'twick:webgl',
17
+ configResolved(resolvedConfig) {
18
+ config = resolvedConfig;
19
+ },
20
+ async transform(code, id) {
21
+ if (!GLSL_EXTENSION_REGEX.test(id)) {
22
+ return;
23
+ }
24
+ const [base, query] = id.split('?');
25
+ const { dir } = path_1.default.posix.parse(base);
26
+ const params = new URLSearchParams(query);
27
+ if (params.has('raw')) {
28
+ return;
29
+ }
30
+ const context = {
31
+ rootDir: dir,
32
+ fileStack: [],
33
+ includeMap: new Map(),
34
+ watchFile: file => this.addWatchFile(file),
35
+ resolve: async (source, importer) => {
36
+ const resolved = await this.resolve(source, importer);
37
+ return resolved?.id;
38
+ },
39
+ };
40
+ const glslSource = await resolveGlsl(context, id, code);
41
+ const sourceUrl = (0, vite_1.normalizePath)(path_1.default.relative(config.root, base));
42
+ const result = glslSource.toStringWithSourceMap();
43
+ const map = result.map.toJSON();
44
+ map.includeMap = Object.fromEntries(context.includeMap);
45
+ return {
46
+ map,
47
+ code: `export default \`${result.code}\n//# sourceURL=${sourceUrl}\`;`,
48
+ };
49
+ },
50
+ };
51
+ }
52
+ async function resolveGlsl(context, id, code) {
53
+ const lines = code.split(/\r?\n/);
54
+ const source = new source_map_1.SourceNode(1, 0, '', '');
55
+ if (context.fileStack.includes(id)) {
56
+ throw new Error(`Circular dependency detected: ${context.fileStack.join(' -> ')}`);
57
+ }
58
+ context.fileStack.push(id);
59
+ const sourceMapId = path_1.default.posix.relative(context.rootDir, id);
60
+ for (let i = 0; i < lines.length; i++) {
61
+ const line = lines[i];
62
+ const match = line.match(INCLUDE_REGEX);
63
+ if (match) {
64
+ const childId = await context.resolve(match[1], id);
65
+ if (!childId) {
66
+ continue;
67
+ }
68
+ const childSourceMapId = path_1.default.posix.relative(context.rootDir, childId);
69
+ if (context.includeMap.has(childSourceMapId)) {
70
+ continue;
71
+ }
72
+ context.includeMap.set(childSourceMapId, [sourceMapId, i + 1]);
73
+ context.watchFile(childId);
74
+ const childCode = await fs_1.default.promises.readFile(childId, 'utf-8');
75
+ source.add(await resolveGlsl(context, childId, childCode));
76
+ }
77
+ else {
78
+ let j = 0;
79
+ for (; j < line.length; j++) {
80
+ source.add(new source_map_1.SourceNode(i + 1, j, sourceMapId, line[j]));
81
+ }
82
+ source.add(new source_map_1.SourceNode(i + 1, j, sourceMapId, '\n'));
83
+ }
84
+ }
85
+ context.fileStack.pop();
86
+ return source;
87
+ }
88
+ //# sourceMappingURL=webgl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgl.js","sourceRoot":"","sources":["../../src/partials/webgl.ts"],"names":[],"mappings":"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"}