@replicast/vite-plugin 1.0.0-rc.1 → 1.0.0-rc.10

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.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,55 @@
1
- import type { Plugin } from 'vite';
2
- type BuildTarget = 'server' | 'client';
3
- export declare function replicastPlugin(target: BuildTarget): Plugin;
1
+ export type BuildTarget = 'server' | 'client';
2
+ export interface ReplicastPluginOptions {
3
+ /**
4
+ * Lower TC39 (2023-11) decorators to plain JS after Vite's own transforms.
5
+ * Vite 5–7 (esbuild) already lower decorators, so this is a no-op there; Vite 8+ (Oxc) does not
6
+ * (oxc-project/oxc#9170), so without it store/system classes ship with raw `@` syntax that neither
7
+ * Node nor browsers can parse. Default: true.
8
+ */
9
+ lowerDecorators?: boolean;
10
+ /**
11
+ * When no explicit target is given, environments whose name is in this list get the client
12
+ * transform; every other environment gets the server transform. Default: ['client'].
13
+ */
14
+ clientEnvironments?: string[];
15
+ }
16
+ /** Minimal structural type for the Vite plugin hooks we use (works across Vite 5–8 without a vite import). */
17
+ export interface ReplicastVitePlugin {
18
+ name: string;
19
+ enforce?: 'pre' | 'post';
20
+ applyToEnvironment?: (environment: {
21
+ name: string;
22
+ }) => boolean;
23
+ transform(this: {
24
+ environment?: {
25
+ name: string;
26
+ };
27
+ } | void, code: string, id: string): {
28
+ code: string;
29
+ map?: unknown;
30
+ } | string | null;
31
+ }
32
+ /** Which Replicast transforms a module needs. Detected by content, so naming is not load-bearing. */
33
+ export type ReplicastFileKind = 'store' | 'system' | 'lifecycle' | 'entity';
34
+ export declare function detectKinds(code: string, id: string): ReplicastFileKind[];
35
+ export declare function transformReplicastFile(code: string, id: string, target: BuildTarget): string | null;
36
+ /**
37
+ * Per-target store/system/lifecycle/entity rewriting. Runs before any other transform so it sees the
38
+ * original decorators. With no explicit target, the target is derived from the Vite environment
39
+ * (Vite 6+ Environment API): `client` → client transform, anything else → server transform.
40
+ */
41
+ export declare function replicastTransformPlugin(target?: BuildTarget, options?: ReplicastPluginOptions): ReplicastVitePlugin;
42
+ /** Lowers any TC39 decorators still present after Vite's TS/JSX transforms. */
43
+ export declare function replicastDecoratorPlugin(): ReplicastVitePlugin;
44
+ /**
45
+ * Replicast Vite plugin.
46
+ *
47
+ * replicastPlugin() // Vite 6+ environments: client env → client transform, others → server
48
+ * replicastPlugin('client') // explicit target (Vite 5 style, one config per target)
49
+ *
50
+ * Returns the per-target transform plus (by default) decorator lowering, so consumers need no
51
+ * extra Babel/SWC configuration on Vite 8.
52
+ */
53
+ export declare function replicastPlugin(target?: BuildTarget, options?: ReplicastPluginOptions): ReplicastVitePlugin[];
4
54
  export default replicastPlugin;
5
55
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAKlC,KAAK,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAA;AActC,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAY3D;AAED,eAAe,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE7C,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC9B;AAED,8GAA8G;AAC9G,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IACxB,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAA;IAC/D,SAAS,CAAC,IAAI,EAAE;QAAE,WAAW,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,GAAG,IAAI,CAAA;CACtI;AAED,qGAAqG;AACrG,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAA;AAQ3E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAUzE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CASnG;AAID;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,GAAE,sBAA2B,GAAG,mBAAmB,CAaxH;AAED,+EAA+E;AAC/E,wBAAgB,wBAAwB,IAAI,mBAAmB,CAoB9D;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,GAAE,sBAA2B,GAAG,mBAAmB,EAAE,CAIjH;AAED,eAAe,eAAe,CAAA"}
package/dist/index.js CHANGED
@@ -1,31 +1,104 @@
1
1
  import { transformStoreFile } from './transforms/store.js';
2
2
  import { transformSystemFile } from './transforms/system.js';
3
3
  import { transformLifecycleFile } from './transforms/lifecycle.js';
4
- function isStoreFile(id) {
5
- return id.endsWith('.store.ts') || id.endsWith('.store.js');
4
+ import { transformEntityFile } from './transforms/entity.js';
5
+ import { transformSync } from '@babel/core';
6
+ import decorators from '@babel/plugin-proposal-decorators';
7
+ const RE_CORE_IMPORT = /from\s+['"]@replicast\/core['"]/;
8
+ const RE_STORE = /@(?:GlobalStore|OwnerStore)\b/;
9
+ const RE_SYSTEM = /@System\b/;
10
+ const RE_LIFECYCLE = /@(?:Server|Client)\s+(?:export\s+)?(?:default\s+)?class\b/;
11
+ const RE_ENTITY = /@Entity\b/;
12
+ export function detectKinds(code, id) {
13
+ const kinds = [];
14
+ const clean = id.split('?')[0];
15
+ const byName = (suffix) => clean.endsWith(`.${suffix}.ts`) || clean.endsWith(`.${suffix}.js`);
16
+ const byContent = RE_CORE_IMPORT.test(code);
17
+ if (byName('store') || (byContent && RE_STORE.test(code)))
18
+ kinds.push('store');
19
+ if (byName('system') || (byContent && RE_SYSTEM.test(code)))
20
+ kinds.push('system');
21
+ if (byName('lifecycle') || (byContent && RE_LIFECYCLE.test(code)))
22
+ kinds.push('lifecycle');
23
+ if (byName('entity') || (byContent && RE_ENTITY.test(code)))
24
+ kinds.push('entity');
25
+ return kinds;
6
26
  }
7
- function isSystemFile(id) {
8
- return id.endsWith('.system.ts') || id.endsWith('.system.js');
27
+ export function transformReplicastFile(code, id, target) {
28
+ const kinds = detectKinds(code, id);
29
+ if (kinds.length === 0)
30
+ return null;
31
+ let out = code;
32
+ if (kinds.includes('store'))
33
+ out = transformStoreFile(out, target);
34
+ if (kinds.includes('system'))
35
+ out = transformSystemFile(out, target);
36
+ if (kinds.includes('lifecycle'))
37
+ out = transformLifecycleFile(out, target);
38
+ if (kinds.includes('entity'))
39
+ out = transformEntityFile(out, target);
40
+ return out;
9
41
  }
10
- function isLifecycleFile(id) {
11
- return id.endsWith('.lifecycle.ts') || id.endsWith('.lifecycle.js');
12
- }
13
- export function replicastPlugin(target) {
42
+ const SCRIPT_RE = /\.[cm]?[jt]sx?$/;
43
+ /**
44
+ * Per-target store/system/lifecycle/entity rewriting. Runs before any other transform so it sees the
45
+ * original decorators. With no explicit target, the target is derived from the Vite environment
46
+ * (Vite 6+ Environment API): `client` → client transform, anything else → server transform.
47
+ */
48
+ export function replicastTransformPlugin(target, options = {}) {
49
+ const clientEnvs = new Set(options.clientEnvironments ?? ['client']);
14
50
  return {
15
51
  name: 'replicast',
16
52
  enforce: 'pre',
17
53
  transform(code, id) {
18
- if (!id.endsWith('.ts') && !id.endsWith('.js'))
54
+ const clean = id.split('?')[0];
55
+ if (clean.includes('/node_modules/') || !SCRIPT_RE.test(clean))
56
+ return null;
57
+ const envName = this?.environment?.name;
58
+ const resolved = target ?? (envName === undefined || clientEnvs.has(envName) ? 'client' : 'server');
59
+ return transformReplicastFile(code, id, resolved);
60
+ }
61
+ };
62
+ }
63
+ /** Lowers any TC39 decorators still present after Vite's TS/JSX transforms. */
64
+ export function replicastDecoratorPlugin() {
65
+ return {
66
+ name: 'replicast:decorators',
67
+ enforce: 'post',
68
+ transform(code, id) {
69
+ const clean = id.split('?')[0];
70
+ if (clean.includes('/node_modules/') || !SCRIPT_RE.test(clean))
71
+ return null;
72
+ if (!code.includes('@'))
19
73
  return null;
20
- if (isStoreFile(id))
21
- return transformStoreFile(code, target);
22
- if (isSystemFile(id))
23
- return transformSystemFile(code, target);
24
- if (isLifecycleFile(id))
25
- return transformLifecycleFile(code, target);
26
- return null;
74
+ const result = transformSync(code, {
75
+ filename: clean,
76
+ babelrc: false,
77
+ configFile: false,
78
+ sourceMaps: true,
79
+ parserOpts: { sourceType: 'module', plugins: ['decorators'] },
80
+ plugins: [[decorators, { version: '2023-11' }]]
81
+ });
82
+ if (!result?.code)
83
+ return null;
84
+ return { code: result.code, map: result.map };
27
85
  }
28
86
  };
29
87
  }
88
+ /**
89
+ * Replicast Vite plugin.
90
+ *
91
+ * replicastPlugin() // Vite 6+ environments: client env → client transform, others → server
92
+ * replicastPlugin('client') // explicit target (Vite 5 style, one config per target)
93
+ *
94
+ * Returns the per-target transform plus (by default) decorator lowering, so consumers need no
95
+ * extra Babel/SWC configuration on Vite 8.
96
+ */
97
+ export function replicastPlugin(target, options = {}) {
98
+ const plugins = [replicastTransformPlugin(target, options)];
99
+ if (options.lowerDecorators !== false)
100
+ plugins.push(replicastDecoratorPlugin());
101
+ return plugins;
102
+ }
30
103
  export default replicastPlugin;
31
104
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAIlE,SAAS,WAAW,CAAC,EAAU;IAC7B,OAAO,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AAC7D,CAAC;AAED,SAAS,YAAY,CAAC,EAAU;IAC9B,OAAO,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;AAC/D,CAAC;AAED,SAAS,eAAe,CAAC,EAAU;IACjC,OAAO,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;AACrE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAmB;IACjD,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,KAAK;QACd,SAAS,CAAC,IAAI,EAAE,EAAE;YAChB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAA;YAC3D,IAAI,WAAW,CAAC,EAAE,CAAC;gBAAE,OAAO,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAC5D,IAAI,YAAY,CAAC,EAAE,CAAC;gBAAE,OAAO,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAC9D,IAAI,eAAe,CAAC,EAAE,CAAC;gBAAE,OAAO,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YACpE,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAA;AACH,CAAC;AAED,eAAe,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ type BuildTarget = 'server' | 'client';
2
+ /**
3
+ * Per-target rewriting of `@Entity` classes: the client bundle loses server bodies and
4
+ * `@ServerOnly` fields, the server bundle loses the client-side bodies (runtime dispatch replaces
5
+ * them with sends). Decorators are kept on both sides — the runtime reads them on both.
6
+ */
7
+ export declare function transformEntityFile(source: string, target: BuildTarget): string;
8
+ export {};
9
+ //# sourceMappingURL=entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/transforms/entity.ts"],"names":[],"mappings":"AAGA,KAAK,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAiCtC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAkE/E"}
@@ -0,0 +1,64 @@
1
+ import ts from 'typescript';
2
+ import { parseSource, printFile, hasDecorator, getDecoratorName } from '../ast-helpers.js';
3
+ /** Method decorators an `@Entity` class can carry, and which bundle keeps the body. */
4
+ const strippedOnClient = new Set(['ServerTick']);
5
+ const strippedOnServer = new Set(['Client', 'Multicast', 'ClientSpawn', 'ClientDespawn']);
6
+ /** `return this.__wsClient.callEntity(this.id, 'Ship.fire', [side, power])` */
7
+ function makeEntityClientStub(className, methodName, params) {
8
+ const argNames = Array.from(params)
9
+ .filter(p => ts.isIdentifier(p.name))
10
+ .map(p => p.name.text);
11
+ return [
12
+ ts.factory.createReturnStatement(ts.factory.createCallExpression(ts.factory.createPropertyAccessExpression(ts.factory.createPropertyAccessExpression(ts.factory.createThis(), '__wsClient'), 'callEntity'), undefined, [
13
+ ts.factory.createPropertyAccessExpression(ts.factory.createThis(), 'id'),
14
+ ts.factory.createStringLiteral(`${className}.${methodName}`),
15
+ ts.factory.createArrayLiteralExpression(argNames.map(n => ts.factory.createIdentifier(n))),
16
+ ]))
17
+ ];
18
+ }
19
+ /**
20
+ * Per-target rewriting of `@Entity` classes: the client bundle loses server bodies and
21
+ * `@ServerOnly` fields, the server bundle loses the client-side bodies (runtime dispatch replaces
22
+ * them with sends). Decorators are kept on both sides — the runtime reads them on both.
23
+ */
24
+ export function transformEntityFile(source, target) {
25
+ const sourceFile = parseSource(source);
26
+ const transformer = (context) => (sf) => {
27
+ function visitClass(classNode) {
28
+ const className = classNode.name?.text ?? 'UnknownEntity';
29
+ const members = classNode.members
30
+ // @ServerOnly fields never reach the client — drop the declaration and its initialiser.
31
+ .filter(member => !(target === 'client' && ts.isPropertyDeclaration(member) && hasDecorator(member, 'ServerOnly')))
32
+ .map(member => {
33
+ if (!ts.isMethodDeclaration(member) || !ts.isIdentifier(member.name))
34
+ return member;
35
+ const methodName = member.name.text;
36
+ const roles = (ts.getDecorators(member) ?? []).map(getDecoratorName);
37
+ let body = member.body;
38
+ if (target === 'client' && roles.includes('Server')) {
39
+ body = ts.factory.createBlock(makeEntityClientStub(className, methodName, member.parameters), true);
40
+ }
41
+ else if (roles.some(r => r !== null && (target === 'client' ? strippedOnClient : strippedOnServer).has(r))) {
42
+ body = ts.factory.createBlock([], false);
43
+ }
44
+ else {
45
+ return member;
46
+ }
47
+ return ts.factory.updateMethodDeclaration(member, member.modifiers, // keeps decorators: the runtime reads them on both sides
48
+ member.asteriskToken, member.name, member.questionToken, member.typeParameters, member.parameters, member.type, body);
49
+ });
50
+ // Stamp the source class name so the wire type survives bundling and minification.
51
+ const nameStamp = ts.factory.createPropertyDeclaration([ts.factory.createModifier(ts.SyntaxKind.StaticKeyword)], '__replicastName', undefined, undefined, ts.factory.createStringLiteral(className));
52
+ return ts.factory.updateClassDeclaration(classNode, classNode.modifiers, classNode.name, classNode.typeParameters, classNode.heritageClauses, ts.factory.createNodeArray([nameStamp, ...members]));
53
+ }
54
+ function visit(node) {
55
+ if (ts.isClassDeclaration(node) && hasDecorator(node, 'Entity'))
56
+ return visitClass(node);
57
+ return ts.visitEachChild(node, visit, context);
58
+ }
59
+ return ts.visitNode(sf, visit);
60
+ };
61
+ const result = ts.transform(sourceFile, [transformer]);
62
+ return printFile(result.transformed[0]);
63
+ }
64
+ //# sourceMappingURL=entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/transforms/entity.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/transforms/lifecycle.ts"],"names":[],"mappings":"AAGA,KAAK,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEtC,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAclF"}
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/transforms/lifecycle.ts"],"names":[],"mappings":"AAGA,KAAK,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEtC,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CA6BlF"}
@@ -3,7 +3,8 @@ import { parseSource, printFile, hasDecorator } from '../ast-helpers.js';
3
3
  export function transformLifecycleFile(source, target) {
4
4
  const sourceFile = parseSource(source);
5
5
  const transformer = (_context) => (sf) => {
6
- const newStatements = sf.statements.filter(stmt => {
6
+ const newStatements = sf.statements
7
+ .filter(stmt => {
7
8
  if (ts.isClassDeclaration(stmt)) {
8
9
  if (target === 'client' && hasDecorator(stmt, 'Server'))
9
10
  return false;
@@ -11,6 +12,13 @@ export function transformLifecycleFile(source, target) {
11
12
  return false;
12
13
  }
13
14
  return true;
15
+ })
16
+ .map(stmt => {
17
+ // Strip decorators from the kept lifecycle class only (other classes in the file are untouched)
18
+ if (ts.isClassDeclaration(stmt) && (hasDecorator(stmt, 'Server') || hasDecorator(stmt, 'Client'))) {
19
+ return ts.factory.updateClassDeclaration(stmt, ts.getModifiers(stmt), stmt.name, stmt.typeParameters, stmt.heritageClauses, stmt.members);
20
+ }
21
+ return stmt;
14
22
  });
15
23
  return ts.factory.updateSourceFile(sf, newStatements);
16
24
  };
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/transforms/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIxE,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,MAAmB;IACxE,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IACtC,MAAM,WAAW,GAAyC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE;QAC7E,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAChD,IAAI,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,IAAI,MAAM,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC;oBAAE,OAAO,KAAK,CAAA;gBACrE,IAAI,MAAM,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC;oBAAE,OAAO,KAAK,CAAA;YACvE,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CAAA;QACF,OAAO,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;IACvD,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IACtD,OAAO,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AACzC,CAAC"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/transforms/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIxE,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,MAAmB;IACxE,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IACtC,MAAM,WAAW,GAAyC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE;QAC7E,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU;aAChC,MAAM,CAAC,IAAI,CAAC,EAAE;YACb,IAAI,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,IAAI,MAAM,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC;oBAAE,OAAO,KAAK,CAAA;gBACrE,IAAI,MAAM,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC;oBAAE,OAAO,KAAK,CAAA;YACvE,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC,CAAC;aACD,GAAG,CAAC,IAAI,CAAC,EAAE;YACV,gGAAgG;YAChG,IAAI,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;gBAClG,OAAO,EAAE,CAAC,OAAO,CAAC,sBAAsB,CACtC,IAAI,EACJ,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EACrB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,OAAO,CACb,CAAA;YACH,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CAAA;QACJ,OAAO,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;IACvD,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IACtD,OAAO,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AACzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/transforms/store.ts"],"names":[],"mappings":"AAGA,KAAK,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEtC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CA6B9E"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/transforms/store.ts"],"names":[],"mappings":"AAGA,KAAK,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEtC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CA4C9E"}
@@ -6,14 +6,23 @@ export function transformStoreFile(source, target) {
6
6
  const sourceFile = parseSource(source);
7
7
  const transformer = (context) => (sf) => {
8
8
  function visit(node) {
9
- if (ts.isClassDeclaration(node)) {
10
- const newMembers = node.members.filter(member => {
9
+ if (ts.isClassDeclaration(node) && (hasDecorator(node, 'GlobalStore') || hasDecorator(node, 'OwnerStore'))) {
10
+ const newMembers = node.members
11
+ .filter(member => {
11
12
  if (ts.isPropertyDeclaration(member)) {
12
13
  return !hasDecorator(member, 'ServerOnly');
13
14
  }
14
15
  return true;
16
+ })
17
+ .map(member => {
18
+ // Strip decorators from remaining properties
19
+ if (ts.isPropertyDeclaration(member)) {
20
+ return ts.factory.updatePropertyDeclaration(member, ts.getModifiers(member), member.name, member.questionToken ?? member.exclamationToken, member.type, member.initializer);
21
+ }
22
+ return member;
15
23
  });
16
- return ts.factory.updateClassDeclaration(node, node.modifiers, node.name, node.typeParameters, node.heritageClauses, ts.factory.createNodeArray(newMembers));
24
+ return ts.factory.updateClassDeclaration(node, ts.getModifiers(node), // strips decorators (@GlobalStore, @OwnerStore)
25
+ node.name, node.typeParameters, node.heritageClauses, ts.factory.createNodeArray(newMembers));
17
26
  }
18
27
  return ts.visitEachChild(node, visit, context);
19
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/transforms/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIxE,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,MAAmB;IACpE,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAA;IAEtC,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IACtC,MAAM,WAAW,GAAyC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE;QAC5E,SAAS,KAAK,CAAC,IAAa;YAC1B,IAAI,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;oBAC9C,IAAI,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;wBACrC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;oBAC5C,CAAC;oBACD,OAAO,IAAI,CAAA;gBACb,CAAC,CAAC,CAAA;gBACF,OAAO,EAAE,CAAC,OAAO,CAAC,sBAAsB,CACtC,IAAI,EACJ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,eAAe,EACpB,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CACvC,CAAA;YACH,CAAC;YACD,OAAO,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;QAChD,CAAC;QACD,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAkB,CAAA;IACjD,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IACtD,OAAO,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AACzC,CAAC"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/transforms/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIxE,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,MAAmB;IACpE,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAA;IAEtC,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IACtC,MAAM,WAAW,GAAyC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE;QAC5E,SAAS,KAAK,CAAC,IAAa;YAC1B,IAAI,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;gBAC3G,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO;qBAC5B,MAAM,CAAC,MAAM,CAAC,EAAE;oBACf,IAAI,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;wBACrC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;oBAC5C,CAAC;oBACD,OAAO,IAAI,CAAA;gBACb,CAAC,CAAC;qBACD,GAAG,CAAC,MAAM,CAAC,EAAE;oBACZ,6CAA6C;oBAC7C,IAAI,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;wBACrC,OAAO,EAAE,CAAC,OAAO,CAAC,yBAAyB,CACzC,MAAM,EACN,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EACvB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,gBAAgB,EAC/C,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,WAAW,CACnB,CAAA;oBACH,CAAC;oBACD,OAAO,MAAM,CAAA;gBACf,CAAC,CAAC,CAAA;gBACJ,OAAO,EAAE,CAAC,OAAO,CAAC,sBAAsB,CACtC,IAAI,EACJ,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAG,gDAAgD;gBACxE,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,eAAe,EACpB,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CACvC,CAAA;YACH,CAAC;YACD,OAAO,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;QAChD,CAAC;QACD,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAkB,CAAA;IACjD,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IACtD,OAAO,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AACzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/transforms/system.ts"],"names":[],"mappings":"AAGA,KAAK,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAuGtC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CA8D/E"}
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/transforms/system.ts"],"names":[],"mappings":"AAGA,KAAK,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAmItC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CA+G/E"}
@@ -1,9 +1,8 @@
1
1
  import ts from 'typescript';
2
2
  import { parseSource, printFile, hasDecorator, getDecoratorName } from '../ast-helpers.js';
3
3
  function makeClientStub(className, methodName, params) {
4
- // Skip ctx (first param)server-side parameter not sent over the wire
5
- const argParams = Array.from(params).slice(1);
6
- const argNames = argParams
4
+ // All params are wire args ctx is no longer the first param
5
+ const argNames = Array.from(params)
7
6
  .filter(p => ts.isIdentifier(p.name))
8
7
  .map(p => p.name.text);
9
8
  const argsArray = ts.factory.createArrayLiteralExpression(argNames.map(n => ts.factory.createIdentifier(n)));
@@ -23,31 +22,34 @@ function makeSendToClientDispatch(className, methodName, params) {
23
22
  }
24
23
  const targetId = argNames[0];
25
24
  const restArgs = argNames.slice(1);
26
- const rpcCtx = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), '__rpcCtx');
27
- return [
28
- ts.factory.createExpressionStatement(ts.factory.createCallExpression(ts.factory.createPropertyAccessExpression(rpcCtx, 'sendToClient'), undefined, [
29
- ts.factory.createIdentifier(targetId),
30
- ts.factory.createStringLiteral(`${className}.${methodName}`),
31
- ...restArgs.map(n => ts.factory.createIdentifier(n))
32
- ]))
33
- ];
25
+ // const __ctx = useCtx()
26
+ const ctxDecl = ts.factory.createVariableStatement(undefined, ts.factory.createVariableDeclarationList([ts.factory.createVariableDeclaration('__ctx', undefined, undefined, ts.factory.createCallExpression(ts.factory.createIdentifier('useCtx'), undefined, []))], ts.NodeFlags.Const));
27
+ // __ctx.sendToClient(targetId, 'Class.method', ...args)
28
+ const dispatch = ts.factory.createExpressionStatement(ts.factory.createCallExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier('__ctx'), 'sendToClient'), undefined, [
29
+ ts.factory.createIdentifier(targetId),
30
+ ts.factory.createStringLiteral(`${className}.${methodName}`),
31
+ ...restArgs.map(n => ts.factory.createIdentifier(n))
32
+ ]));
33
+ return [ctxDecl, dispatch];
34
34
  }
35
35
  function makeBroadcastDispatch(className, methodName, params) {
36
+ // All params are wire args — ctx is no longer the first param
36
37
  const argNames = Array.from(params)
37
38
  .filter(p => ts.isIdentifier(p.name))
38
- .map(p => p.name.text)
39
- .slice(1); // drop ctx (first param), same as makeClientStub
40
- const rpcCtx = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), '__rpcCtx');
41
- return [
42
- ts.factory.createForOfStatement(undefined, ts.factory.createVariableDeclarationList([ts.factory.createVariableDeclaration('_pid')], ts.NodeFlags.Const), ts.factory.createPropertyAccessExpression(rpcCtx, 'players'), ts.factory.createExpressionStatement(ts.factory.createCallExpression(ts.factory.createPropertyAccessExpression(rpcCtx, 'sendToClient'), undefined, [
43
- ts.factory.createIdentifier('_pid'),
44
- ts.factory.createStringLiteral(`${className}.${methodName}`),
45
- ...argNames.map(n => ts.factory.createIdentifier(n))
46
- ])))
47
- ];
39
+ .map(p => p.name.text);
40
+ // const __ctx = useCtx()
41
+ const ctxDecl = ts.factory.createVariableStatement(undefined, ts.factory.createVariableDeclarationList([ts.factory.createVariableDeclaration('__ctx', undefined, undefined, ts.factory.createCallExpression(ts.factory.createIdentifier('useCtx'), undefined, []))], ts.NodeFlags.Const));
42
+ // for (const _pid of __ctx.players) { __ctx.sendToClient(_pid, 'Class.method', ...args) }
43
+ const broadcast = ts.factory.createForOfStatement(undefined, ts.factory.createVariableDeclarationList([ts.factory.createVariableDeclaration('_pid')], ts.NodeFlags.Const), ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier('__ctx'), 'players'), ts.factory.createExpressionStatement(ts.factory.createCallExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier('__ctx'), 'sendToClient'), undefined, [
44
+ ts.factory.createIdentifier('_pid'),
45
+ ts.factory.createStringLiteral(`${className}.${methodName}`),
46
+ ...argNames.map(n => ts.factory.createIdentifier(n))
47
+ ])));
48
+ return [ctxDecl, broadcast];
48
49
  }
49
50
  export function transformSystemFile(source, target) {
50
51
  const sourceFile = parseSource(source);
52
+ let needsUseCtx = false;
51
53
  const transformer = (context) => (sf) => {
52
54
  function visitClass(classNode) {
53
55
  const className = classNode.name?.text ?? 'UnknownSystem';
@@ -57,24 +59,28 @@ export function transformSystemFile(source, target) {
57
59
  const methodName = member.name.text;
58
60
  const decorators = ts.getDecorators(member) ?? [];
59
61
  const role = decorators.map(getDecoratorName).find(n => n === 'Server' || n === 'Client' || n === 'Multicast');
60
- if (!role)
61
- return member;
62
62
  let newStatements;
63
63
  if (target === 'client' && role === 'Server') {
64
64
  newStatements = makeClientStub(className, methodName, member.parameters);
65
65
  }
66
66
  else if (target === 'server' && role === 'Client') {
67
+ needsUseCtx = true;
67
68
  newStatements = makeSendToClientDispatch(className, methodName, member.parameters);
68
69
  }
69
70
  else if (target === 'server' && role === 'Multicast') {
71
+ needsUseCtx = true;
70
72
  newStatements = makeBroadcastDispatch(className, methodName, member.parameters);
71
73
  }
72
- else {
73
- return member;
74
- }
75
- return ts.factory.updateMethodDeclaration(member, member.modifiers, member.asteriskToken, member.name, member.questionToken, member.typeParameters, member.parameters, member.type, ts.factory.createBlock(newStatements, true));
74
+ // Strip decorators from all methods on client; rewrite body if needed
75
+ const modifiers = target === 'client' ? ts.getModifiers(member) : member.modifiers;
76
+ return ts.factory.updateMethodDeclaration(member, modifiers, member.asteriskToken, member.name, member.questionToken, member.typeParameters, member.parameters, member.type, newStatements ? ts.factory.createBlock(newStatements, true) : member.body);
76
77
  });
77
- return ts.factory.updateClassDeclaration(classNode, classNode.modifiers, classNode.name, classNode.typeParameters, classNode.heritageClauses, ts.factory.createNodeArray(newMembers));
78
+ // Stamp the source class name so the server can register RPC methods without relying on
79
+ // constructor.name, which bundlers/minifiers (e.g. rolldown in Vite 8) may drop or rename.
80
+ const nameStamp = ts.factory.createPropertyDeclaration([ts.factory.createModifier(ts.SyntaxKind.StaticKeyword)], '__replicastName', undefined, undefined, ts.factory.createStringLiteral(className));
81
+ // Strip @System decorator from class on client
82
+ const classModifiers = target === 'client' ? ts.getModifiers(classNode) : classNode.modifiers;
83
+ return ts.factory.updateClassDeclaration(classNode, classModifiers, classNode.name, classNode.typeParameters, classNode.heritageClauses, ts.factory.createNodeArray([nameStamp, ...newMembers]));
78
84
  }
79
85
  function visit(node) {
80
86
  if (ts.isClassDeclaration(node) && hasDecorator(node, 'System')) {
@@ -82,7 +88,22 @@ export function transformSystemFile(source, target) {
82
88
  }
83
89
  return ts.visitEachChild(node, visit, context);
84
90
  }
85
- return ts.visitNode(sf, visit);
91
+ let transformed = ts.visitNode(sf, visit);
92
+ if (needsUseCtx) {
93
+ const alreadyImported = sf.statements.some(stmt => ts.isImportDeclaration(stmt) &&
94
+ ts.isStringLiteral(stmt.moduleSpecifier) &&
95
+ stmt.moduleSpecifier.text === '@replicast/core' &&
96
+ stmt.importClause?.namedBindings !== undefined &&
97
+ ts.isNamedImports(stmt.importClause.namedBindings) &&
98
+ stmt.importClause.namedBindings.elements.some(el => el.name.text === 'useCtx'));
99
+ if (!alreadyImported) {
100
+ const importDecl = ts.factory.createImportDeclaration(undefined, ts.factory.createImportClause(false, undefined, ts.factory.createNamedImports([
101
+ ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier('useCtx'))
102
+ ])), ts.factory.createStringLiteral('@replicast/core'));
103
+ transformed = ts.factory.updateSourceFile(transformed, [importDecl, ...transformed.statements]);
104
+ }
105
+ }
106
+ return transformed;
86
107
  };
87
108
  const result = ts.transform(sourceFile, [transformer]);
88
109
  return printFile(result.transformed[0]);
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/transforms/system.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/transforms/system.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@replicast/vite-plugin",
3
- "version": "1.0.0-rc.1",
3
+ "version": "1.0.0-rc.10",
4
4
  "description": "Vite plugin for replicast — transforms store, system, and lifecycle files per build target",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -17,13 +17,16 @@
17
17
  "test": "vitest run"
18
18
  },
19
19
  "dependencies": {
20
- "typescript": "^5.5.0"
20
+ "typescript": "^5.5.0",
21
+ "@babel/core": "^7.26.0",
22
+ "@babel/plugin-proposal-decorators": "^7.25.0"
21
23
  },
22
24
  "peerDependencies": {
23
- "vite": "^5.0.0"
25
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
24
26
  },
25
27
  "devDependencies": {
26
- "vite": "^5.3.0",
27
- "vitest": "^1.6.0"
28
+ "vite": "^8.0.0",
29
+ "vitest": "^1.6.0",
30
+ "@types/babel__core": "^7.20.5"
28
31
  }
29
32
  }