@nexus_js/compiler 0.7.2 → 0.7.5

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 (48) hide show
  1. package/dist/client-security-scan.d.ts +12 -0
  2. package/dist/client-security-scan.d.ts.map +1 -0
  3. package/dist/client-security-scan.js +54 -0
  4. package/dist/client-security-scan.js.map +1 -0
  5. package/dist/client-security-scan.test.d.ts +2 -0
  6. package/dist/client-security-scan.test.d.ts.map +1 -0
  7. package/dist/client-security-scan.test.js +31 -0
  8. package/dist/client-security-scan.test.js.map +1 -0
  9. package/dist/codegen.d.ts.map +1 -1
  10. package/dist/codegen.js +594 -46
  11. package/dist/codegen.js.map +1 -1
  12. package/dist/compile-lib.d.ts +20 -0
  13. package/dist/compile-lib.d.ts.map +1 -0
  14. package/dist/compile-lib.js +73 -0
  15. package/dist/compile-lib.js.map +1 -0
  16. package/dist/index.d.ts +4 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +6 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/island-codegen.test.d.ts +2 -0
  21. package/dist/island-codegen.test.d.ts.map +1 -0
  22. package/dist/island-codegen.test.js +159 -0
  23. package/dist/island-codegen.test.js.map +1 -0
  24. package/dist/island-template-warnings.d.ts +8 -0
  25. package/dist/island-template-warnings.d.ts.map +1 -0
  26. package/dist/island-template-warnings.js +35 -0
  27. package/dist/island-template-warnings.js.map +1 -0
  28. package/dist/island-wrap.d.ts.map +1 -1
  29. package/dist/island-wrap.js +27 -9
  30. package/dist/island-wrap.js.map +1 -1
  31. package/dist/island-wrap.test.d.ts +2 -0
  32. package/dist/island-wrap.test.d.ts.map +1 -0
  33. package/dist/island-wrap.test.js +22 -0
  34. package/dist/island-wrap.test.js.map +1 -0
  35. package/dist/parser.d.ts.map +1 -1
  36. package/dist/parser.js +11 -2
  37. package/dist/parser.js.map +1 -1
  38. package/dist/pretext-extract.d.ts +29 -0
  39. package/dist/pretext-extract.d.ts.map +1 -0
  40. package/dist/pretext-extract.js +51 -0
  41. package/dist/pretext-extract.js.map +1 -0
  42. package/dist/pretext-extract.test.d.ts +2 -0
  43. package/dist/pretext-extract.test.d.ts.map +1 -0
  44. package/dist/pretext-extract.test.js +33 -0
  45. package/dist/pretext-extract.test.js.map +1 -0
  46. package/dist/types.d.ts +15 -0
  47. package/dist/types.d.ts.map +1 -1
  48. package/package.json +5 -1
package/dist/parser.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { extractServerActionsFromSource } from './server-actions-extract.js';
2
+ import { splitPretext } from './pretext-extract.js';
2
3
  /** Regex patterns for parsing .nx files */
3
4
  const FRONTMATTER_RE = /^---\n([\s\S]*?)\n---/;
4
5
  const SCRIPT_BLOCK_RE = /<script(?:\s[^>]*)?>(\n[\s\S]*?)<\/script>/;
@@ -41,10 +42,15 @@ export function parse(source, filepath) {
41
42
  const fmMatch = FRONTMATTER_RE.exec(source);
42
43
  let frontmatter = null;
43
44
  let remaining = source;
45
+ let pretext = null;
44
46
  if (fmMatch && fmMatch.index === 0) {
47
+ const rawFm = fmMatch[1] ?? '';
48
+ const split = splitPretext(rawFm);
49
+ pretext = split.pretext;
50
+ const mergedServer = [split.leading, split.server].filter(Boolean).join('\n\n');
45
51
  frontmatter = {
46
52
  type: 'server',
47
- content: fmMatch[1] ?? '',
53
+ content: mergedServer,
48
54
  start: 0,
49
55
  end: fmMatch[0].length,
50
56
  };
@@ -90,9 +96,11 @@ export function parse(source, filepath) {
90
96
  // --- Island directives ---
91
97
  const islandDirectives = extractIslandDirectives(templateContent);
92
98
  // --- Server Actions ---
99
+ // Include `// nexus:pretext` body: `createAction` / `use server` often live there, not in leading/server merge.
93
100
  const scriptContent = script?.content ?? '';
94
101
  const frontmatterContent = frontmatter?.content ?? '';
95
- const serverActions = extractServerActionsFromSource(scriptContent + '\n' + frontmatterContent);
102
+ const pretextContent = pretext ?? '';
103
+ const serverActions = extractServerActionsFromSource(scriptContent + '\n' + frontmatterContent + '\n' + pretextContent);
96
104
  if (serverActions.length > 0 && !source.includes('use server')) {
97
105
  warnings.push(`Found server action patterns without "use server" directive in ${filepath}`);
98
106
  }
@@ -100,6 +108,7 @@ export function parse(source, filepath) {
100
108
  source,
101
109
  filepath,
102
110
  frontmatter,
111
+ pretext: pretext ?? null,
103
112
  script,
104
113
  template,
105
114
  style,
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Splits `.nx` server frontmatter into optional `// nexus:pretext` … `// nexus:server` regions.
3
+ *
4
+ * ```
5
+ * ---
6
+ * import { db } from '$lib/db';
7
+ * // nexus:pretext
8
+ * export async function load(ctx) {
9
+ * return { flow: await db.flows.findFirst() };
10
+ * }
11
+ * // nexus:server
12
+ * defineHead({ title: '…' });
13
+ * ---
14
+ * ```
15
+ */
16
+ export interface PretextSplitResult {
17
+ /** Code before `// nexus:pretext` (usually imports shared by pretext + server). */
18
+ leading: string;
19
+ /** Body of the pretext export (async function / const). */
20
+ pretext: string | null;
21
+ /** Code after `// nexus:server` (runs at module top level, same as today). */
22
+ server: string;
23
+ }
24
+ export declare function splitPretext(frontmatter: string): PretextSplitResult;
25
+ /**
26
+ * Renames `load` → `nxPretext` so the server can `import { nxPretext }` uniformly.
27
+ */
28
+ export declare function transformPretextExport(pretextBody: string): string;
29
+ //# sourceMappingURL=pretext-extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pretext-extract.d.ts","sourceRoot":"","sources":["../src/pretext-extract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,kBAAkB;IACjC,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,CA0BpE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAMlE"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Splits `.nx` server frontmatter into optional `// nexus:pretext` … `// nexus:server` regions.
3
+ *
4
+ * ```
5
+ * ---
6
+ * import { db } from '$lib/db';
7
+ * // nexus:pretext
8
+ * export async function load(ctx) {
9
+ * return { flow: await db.flows.findFirst() };
10
+ * }
11
+ * // nexus:server
12
+ * defineHead({ title: '…' });
13
+ * ---
14
+ * ```
15
+ */
16
+ export function splitPretext(frontmatter) {
17
+ const lines = frontmatter.split('\n');
18
+ const markerIdx = lines.findIndex((l) => /^\s*\/\/\s*nexus:pretext\s*$/u.test(l));
19
+ if (markerIdx === -1) {
20
+ return { leading: '', pretext: null, server: frontmatter.trim() };
21
+ }
22
+ const leading = lines.slice(0, markerIdx).join('\n').trim();
23
+ const afterMarker = lines.slice(markerIdx + 1).join('\n');
24
+ const serverMatch = afterMarker.match(/^\s*\/\/\s*nexus:server\s*$/m);
25
+ let pretextBody;
26
+ let serverBody;
27
+ if (!serverMatch || serverMatch.index === undefined) {
28
+ pretextBody = afterMarker.trim();
29
+ serverBody = '';
30
+ }
31
+ else {
32
+ pretextBody = afterMarker.slice(0, serverMatch.index).trim();
33
+ serverBody = afterMarker.slice(serverMatch.index + serverMatch[0].length).trim();
34
+ }
35
+ return {
36
+ leading,
37
+ pretext: pretextBody || null,
38
+ server: serverBody,
39
+ };
40
+ }
41
+ /**
42
+ * Renames `load` → `nxPretext` so the server can `import { nxPretext }` uniformly.
43
+ */
44
+ export function transformPretextExport(pretextBody) {
45
+ let t = pretextBody.trim();
46
+ t = t.replace(/^export\s+async\s+function\s+load\s*\(/u, 'export async function nxPretext(');
47
+ t = t.replace(/^export\s+const\s+load\s*=\s*async\s*/u, 'export const nxPretext = async ');
48
+ t = t.replace(/^export\s+default\s+async\s+function\s+/u, 'export async function nxPretext ');
49
+ return t;
50
+ }
51
+ //# sourceMappingURL=pretext-extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pretext-extract.js","sourceRoot":"","sources":["../src/pretext-extract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAWH,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAEtE,IAAI,WAAmB,CAAC;IACxB,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACpD,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;QACjC,UAAU,GAAG,EAAE,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACnF,CAAC;IAED,OAAO;QACL,OAAO;QACP,OAAO,EAAE,WAAW,IAAI,IAAI;QAC5B,MAAM,EAAE,UAAU;KACnB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAAmB;IACxD,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,yCAAyC,EAAE,kCAAkC,CAAC,CAAC;IAC7F,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,wCAAwC,EAAE,iCAAiC,CAAC,CAAC;IAC3F,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,0CAA0C,EAAE,kCAAkC,CAAC,CAAC;IAC9F,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pretext-extract.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pretext-extract.test.d.ts","sourceRoot":"","sources":["../src/pretext-extract.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { splitPretext, transformPretextExport } from './pretext-extract.js';
3
+ describe('splitPretext', () => {
4
+ it('returns full frontmatter as server when no marker', () => {
5
+ const fm = `import { x } from 'y';\nconst a = 1;`;
6
+ const r = splitPretext(fm);
7
+ expect(r.pretext).toBeNull();
8
+ expect(r.server).toBe(fm);
9
+ expect(r.leading).toBe('');
10
+ });
11
+ it('splits pretext and server regions', () => {
12
+ const fm = `import { db } from './db';
13
+ // nexus:pretext
14
+ export async function load(ctx) {
15
+ return { ok: true };
16
+ }
17
+ // nexus:server
18
+ defineHead({ title: 't' });`;
19
+ const r = splitPretext(fm);
20
+ expect(r.leading.trim()).toContain("import { db }");
21
+ expect(r.pretext).toContain('export async function load');
22
+ expect(r.pretext).not.toContain('defineHead');
23
+ expect(r.server.trim()).toContain('defineHead');
24
+ });
25
+ });
26
+ describe('transformPretextExport', () => {
27
+ it('renames load to nxPretext', () => {
28
+ const out = transformPretextExport('export async function load(ctx) {\n return {};\n}');
29
+ expect(out).toContain('export async function nxPretext(');
30
+ expect(out).not.toContain('function load(');
31
+ });
32
+ });
33
+ //# sourceMappingURL=pretext-extract.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pretext-extract.test.js","sourceRoot":"","sources":["../src/pretext-extract.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE5E,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,EAAE,GAAG,sCAAsC,CAAC;QAClD,MAAM,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,EAAE,GAAG;;;;;;4BAMa,CAAC;QACzB,MAAM,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACpD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QAC1D,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,GAAG,GAAG,sBAAsB,CAAC,oDAAoD,CAAC,CAAC;QACzF,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC1D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -13,6 +13,11 @@ export interface ParsedComponent {
13
13
  filepath: string;
14
14
  /** Frontmatter block (server-only, runs at request time) */
15
15
  frontmatter: NexusBlock | null;
16
+ /**
17
+ * Optional `// nexus:pretext` … `// nexus:server` region — compiled to `export async function nxPretext(ctx)`.
18
+ * Executed in parallel with parent layouts before `render()`, merged onto `ctx.pretext`.
19
+ */
20
+ pretext: string | null;
16
21
  /** Reactive script block (client island code using Runes) */
17
22
  script: NexusBlock | null;
18
23
  /** HTML template block */
@@ -52,6 +57,16 @@ export interface CompileOptions {
52
57
  target: 'node' | 'edge' | 'browser';
53
58
  /** App root — used for stable /_nexus/islands/client.mjs?path=… query strings */
54
59
  appRoot?: string;
60
+ /**
61
+ * Route URL pattern from the manifest (e.g. `/dashboard`). When `dev` is false, the actions
62
+ * sidecar imports the server bundle via `./${segment}.js` matching `nexus build` output.
63
+ */
64
+ routePattern?: string;
65
+ /**
66
+ * Dev only: max mtime of `src/lib/**` — appended as `?t=` on emitted `$lib` imports so Node ESM
67
+ * reloads when shared modules change without restarting the dev server.
68
+ */
69
+ libDepsMtime?: number;
55
70
  }
56
71
  export interface CompileResult {
57
72
  /** Server-side module code (runs on every request) */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,WAAW,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,6DAA6D;IAC7D,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,0BAA0B;IAC1B,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAC;IAC5B,kBAAkB;IAClB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,kEAAkE;IAClE,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,uDAAuD;IACvD,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED,MAAM,MAAM,eAAe,GACvB,aAAa,GACb,aAAa,GACb,gBAAgB,GAChB,cAAc,GACd,aAAa,CAAC;AAElB,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,eAAe,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACrC,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,uDAAuD;IACvD,kBAAkB,EAAE,OAAO,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB;IACjB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,4CAA4C;IAC5C,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,kDAAkD;IAClD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,kBAAkB;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,eAAe,CAAC;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nexus_js/compiler",
3
- "version": "0.7.2",
3
+ "version": "0.7.5",
4
4
  "description": "Nexus compiler — transforms .nx files into optimized server/client bundles",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -29,6 +29,10 @@
29
29
  "bugs": {
30
30
  "url": "https://github.com/bierfor/nexus/issues"
31
31
  },
32
+ "funding": {
33
+ "type": "individual",
34
+ "url": "https://buymeacoffee.com/bierfor084"
35
+ },
32
36
  "keywords": [
33
37
  "nexus",
34
38
  "framework",