@replicast/vite-plugin 1.0.0-rc.7 → 1.0.0-rc.9

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
@@ -30,11 +30,11 @@ export interface ReplicastVitePlugin {
30
30
  } | string | null;
31
31
  }
32
32
  /** Which Replicast transforms a module needs. Detected by content, so naming is not load-bearing. */
33
- export type ReplicastFileKind = 'store' | 'system' | 'lifecycle';
33
+ export type ReplicastFileKind = 'store' | 'system' | 'lifecycle' | 'entity';
34
34
  export declare function detectKinds(code: string, id: string): ReplicastFileKind[];
35
35
  export declare function transformReplicastFile(code: string, id: string, target: BuildTarget): string | null;
36
36
  /**
37
- * Per-target store/system/lifecycle rewriting. Runs before any other transform so it sees the
37
+ * Per-target store/system/lifecycle/entity rewriting. Runs before any other transform so it sees the
38
38
  * original decorators. With no explicit target, the target is derived from the Vite environment
39
39
  * (Vite 6+ Environment API): `client` → client transform, anything else → server transform.
40
40
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,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,CAAA;AAOhE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,iBAAiB,EAAE,CASzE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAQnG;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"}
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,12 +1,14 @@
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
+ import { transformEntityFile } from './transforms/entity.js';
4
5
  import { transformSync } from '@babel/core';
5
6
  import decorators from '@babel/plugin-proposal-decorators';
6
7
  const RE_CORE_IMPORT = /from\s+['"]@replicast\/core['"]/;
7
8
  const RE_STORE = /@(?:GlobalStore|OwnerStore)\b/;
8
9
  const RE_SYSTEM = /@System\b/;
9
10
  const RE_LIFECYCLE = /@(?:Server|Client)\s+(?:export\s+)?(?:default\s+)?class\b/;
11
+ const RE_ENTITY = /@Entity\b/;
10
12
  export function detectKinds(code, id) {
11
13
  const kinds = [];
12
14
  const clean = id.split('?')[0];
@@ -18,6 +20,8 @@ export function detectKinds(code, id) {
18
20
  kinds.push('system');
19
21
  if (byName('lifecycle') || (byContent && RE_LIFECYCLE.test(code)))
20
22
  kinds.push('lifecycle');
23
+ if (byName('entity') || (byContent && RE_ENTITY.test(code)))
24
+ kinds.push('entity');
21
25
  return kinds;
22
26
  }
23
27
  export function transformReplicastFile(code, id, target) {
@@ -31,11 +35,13 @@ export function transformReplicastFile(code, id, target) {
31
35
  out = transformSystemFile(out, target);
32
36
  if (kinds.includes('lifecycle'))
33
37
  out = transformLifecycleFile(out, target);
38
+ if (kinds.includes('entity'))
39
+ out = transformEntityFile(out, target);
34
40
  return out;
35
41
  }
36
42
  const SCRIPT_RE = /\.[cm]?[jt]sx?$/;
37
43
  /**
38
- * Per-target store/system/lifecycle rewriting. Runs before any other transform so it sees the
44
+ * Per-target store/system/lifecycle/entity rewriting. Runs before any other transform so it sees the
39
45
  * original decorators. With no explicit target, the target is derived from the Vite environment
40
46
  * (Vite 6+ Environment API): `client` → client transform, anything else → server transform.
41
47
  */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,UAAU,MAAM,mCAAmC,CAAA;AA8B1D,MAAM,cAAc,GAAG,iCAAiC,CAAA;AACxD,MAAM,QAAQ,GAAG,+BAA+B,CAAA;AAChD,MAAM,SAAS,GAAG,WAAW,CAAA;AAC7B,MAAM,YAAY,GAAG,2DAA2D,CAAA;AAChF,MAAM,SAAS,GAAG,WAAW,CAAA;AAE7B,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,EAAU;IAClD,MAAM,KAAK,GAAwB,EAAE,CAAA;IACrC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAA;IAC/B,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,MAAM,KAAK,CAAC,CAAA;IACrG,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC3C,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC9E,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACjF,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAC1F,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACjF,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,EAAU,EAAE,MAAmB;IAClF,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACnC,IAAI,GAAG,GAAG,IAAI,CAAA;IACd,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,GAAG,GAAG,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAClE,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,GAAG,GAAG,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IACpE,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,GAAG,GAAG,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC1E,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,GAAG,GAAG,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IACpE,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,SAAS,GAAG,iBAAiB,CAAA;AAEnC;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAoB,EAAE,UAAkC,EAAE;IACjG,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IACpE,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,KAAK;QACd,SAAS,CAAC,IAAI,EAAE,EAAE;YAChB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAA;YAC/B,IAAI,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAA;YAC3E,MAAM,OAAO,GAAI,IAAkD,EAAE,WAAW,EAAE,IAAI,CAAA;YACtF,MAAM,QAAQ,GAAgB,MAAM,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;YAChH,OAAO,sBAAsB,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAA;QACnD,CAAC;KACF,CAAA;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,MAAM;QACf,SAAS,CAAC,IAAI,EAAE,EAAE;YAChB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAA;YAC/B,IAAI,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAA;YAC3E,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAA;YACpC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE;gBACjC,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,KAAK;gBACjB,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE;gBAC7D,OAAO,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;aAChD,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,EAAE,IAAI;gBAAE,OAAO,IAAI,CAAA;YAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAA;QAC/C,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB,EAAE,UAAkC,EAAE;IACxF,MAAM,OAAO,GAAG,CAAC,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC3D,IAAI,OAAO,CAAC,eAAe,KAAK,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAA;IAC/E,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,eAAe,eAAe,CAAA"}
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@replicast/vite-plugin",
3
- "version": "1.0.0-rc.7",
3
+ "version": "1.0.0-rc.9",
4
4
  "description": "Vite plugin for replicast — transforms store, system, and lifecycle files per build target",
5
5
  "license": "MIT",
6
6
  "type": "module",