zyzz 0.0.7 → 0.0.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.
Files changed (78) hide show
  1. package/README.md +7 -7
  2. package/dist/Style.d.ts +2 -2
  3. package/dist/Style.d.ts.map +1 -1
  4. package/dist/Style.js +4 -4
  5. package/dist/Style.js.map +1 -1
  6. package/dist/babel/index.d.ts +4 -1
  7. package/dist/babel/index.d.ts.map +1 -1
  8. package/dist/babel/index.js +6 -3
  9. package/dist/babel/index.js.map +1 -1
  10. package/dist/babel/internal/Compilation.d.ts +12 -0
  11. package/dist/babel/internal/Compilation.d.ts.map +1 -0
  12. package/dist/babel/internal/Compilation.js +3 -0
  13. package/dist/babel/internal/Compilation.js.map +1 -0
  14. package/dist/compiler/Graph.d.ts +6 -1
  15. package/dist/compiler/Graph.d.ts.map +1 -1
  16. package/dist/compiler/Graph.js +160 -36
  17. package/dist/compiler/Graph.js.map +1 -1
  18. package/dist/compiler/Transform.d.ts.map +1 -1
  19. package/dist/compiler/Transform.js +2 -1
  20. package/dist/compiler/Transform.js.map +1 -1
  21. package/dist/compiler/internal/Stylesheets.d.ts +8 -0
  22. package/dist/compiler/internal/Stylesheets.d.ts.map +1 -1
  23. package/dist/compiler/internal/Stylesheets.js +4 -0
  24. package/dist/compiler/internal/Stylesheets.js.map +1 -1
  25. package/dist/internal/Value.d.ts +5 -5
  26. package/dist/internal/Value.d.ts.map +1 -1
  27. package/dist/internal/Value.js +18 -64
  28. package/dist/internal/Value.js.map +1 -1
  29. package/dist/metro/Graph.d.ts +9 -1
  30. package/dist/metro/Graph.d.ts.map +1 -1
  31. package/dist/metro/Graph.js +5 -4
  32. package/dist/metro/Graph.js.map +1 -1
  33. package/dist/metro/transformer.d.ts +0 -1
  34. package/dist/metro/transformer.d.ts.map +1 -1
  35. package/dist/metro/transformer.js +19 -1
  36. package/dist/metro/transformer.js.map +1 -1
  37. package/dist/next/index.d.ts +3 -3
  38. package/dist/next/index.d.ts.map +1 -1
  39. package/dist/next/index.js +25 -30
  40. package/dist/next/index.js.map +1 -1
  41. package/dist/next/internal/Project.d.ts +4 -4
  42. package/dist/next/internal/Project.d.ts.map +1 -1
  43. package/dist/next/internal/Project.js +153 -107
  44. package/dist/next/internal/Project.js.map +1 -1
  45. package/dist/next/loader.d.ts +3 -1
  46. package/dist/next/loader.d.ts.map +1 -1
  47. package/dist/next/loader.js +152 -99
  48. package/dist/next/loader.js.map +1 -1
  49. package/dist/node/Host.d.ts.map +1 -1
  50. package/dist/node/Host.js +11 -3
  51. package/dist/node/Host.js.map +1 -1
  52. package/dist/node/internal/Snapshot.d.ts +12 -0
  53. package/dist/node/internal/Snapshot.d.ts.map +1 -0
  54. package/dist/node/internal/Snapshot.js +74 -0
  55. package/dist/node/internal/Snapshot.js.map +1 -0
  56. package/dist/unplugin/index.d.ts.map +1 -1
  57. package/dist/unplugin/index.js +13 -9
  58. package/dist/unplugin/index.js.map +1 -1
  59. package/dist/vite/index.d.ts.map +1 -1
  60. package/dist/vite/index.js +130 -27
  61. package/dist/vite/index.js.map +1 -1
  62. package/package.json +1 -1
  63. package/src/Style.ts +6 -6
  64. package/src/babel/index.ts +10 -4
  65. package/src/babel/internal/Compilation.ts +13 -0
  66. package/src/compiler/Graph.ts +213 -47
  67. package/src/compiler/Transform.ts +2 -1
  68. package/src/compiler/internal/Stylesheets.ts +9 -0
  69. package/src/internal/Value.ts +40 -88
  70. package/src/metro/Graph.ts +5 -3
  71. package/src/metro/transformer.ts +26 -1
  72. package/src/next/index.ts +26 -31
  73. package/src/next/internal/Project.ts +196 -155
  74. package/src/next/loader.ts +181 -124
  75. package/src/node/Host.ts +15 -3
  76. package/src/node/internal/Snapshot.ts +79 -0
  77. package/src/unplugin/index.ts +12 -8
  78. package/src/vite/index.ts +161 -35
@@ -1 +1 @@
1
- {"version":3,"file":"Graph.js","sourceRoot":"","sources":["../../src/metro/Graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Graph.js","sourceRoot":"","sources":["../../src/metro/Graph.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- /** Chains native authoring compilation into the configured Metro Babel transformer. @module */
2
1
  import type * as Babel from '@babel/core';
3
2
  import { type NativeOptions } from '../babel/index.js';
4
3
  /** Babel transformer inputs passed through without removing upstream fields. */
@@ -1 +1 @@
1
- {"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../src/metro/transformer.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,OAAO,KAAK,KAAK,KAAK,MAAM,aAAa,CAAA;AAMzC,OAAO,EAAE,KAAK,aAAa,EAAQ,MAAM,mBAAmB,CAAA;AAE5D,gFAAgF;AAChF,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;IAC5D,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,KAAK,CAAC,UAAU,EAAE,GAAG,SAAS,CAAA;IAC1D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB,CAAA;AAOD,4FAA4F;AAC5F,wBAAgB,MAAM,CACpB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,IAAI,CACX,aAAa,EACb,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAC3E,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE;IAI3B,WAAW,UAAU,SAAS,OAAO,EAAE;IAqCvC,SAAS,QAAQ,KAAK;EA2BzB"}
1
+ {"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../src/metro/transformer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,KAAK,MAAM,aAAa,CAAA;AAMzC,OAAO,EAAE,KAAK,aAAa,EAAQ,MAAM,mBAAmB,CAAA;AAE5D,gFAAgF;AAChF,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;IAC5D,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,KAAK,CAAC,UAAU,EAAE,GAAG,SAAS,CAAA;IAC1D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB,CAAA;AAOD,4FAA4F;AAC5F,wBAAgB,MAAM,CACpB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,IAAI,CACX,aAAa,EACb,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAC3E,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE;IAM3B,WAAW,UAAU,SAAS,OAAO,EAAE;IAqCvC,SAAS,QAAQ,KAAK;EA+CzB"}
@@ -1,3 +1,7 @@
1
+ /** Chains native authoring compilation into the configured Metro Babel transformer. @module */
2
+ import * as Compilation from '../babel/internal/Compilation.js';
3
+ import * as Compiler from '../compiler/Graph.js';
4
+ import * as Snapshot from '../node/internal/Snapshot.js';
1
5
  import * as Crypto from 'node:crypto';
2
6
  import * as Fs from 'node:fs';
3
7
  import * as Module from 'node:module';
@@ -6,6 +10,8 @@ import * as Graph from './Graph.js';
6
10
  import { zyzz } from '../babel/index.js';
7
11
  /** Creates a transformer with isolated options and the existing upstream implementation. */
8
12
  export function create(upstreamPath, options) {
13
+ const compilers = new Map();
14
+ const snapshot = Snapshot.create();
9
15
  const upstream = Module.createRequire(import.meta.url)(upstreamPath);
10
16
  return {
11
17
  getCacheKey(...args) {
@@ -50,6 +56,13 @@ export function create(upstreamPath, options) {
50
56
  input.filename.split(/[\\/]/).includes('node_modules') ||
51
57
  Path.relative(options.root, filename).startsWith(`..${Path.sep}`))
52
58
  return upstream.transform(input);
59
+ const graph = Graph.read(filename, input.src, platform, options.root, snapshot);
60
+ const key = `${platform}:${filename}`;
61
+ let compiler = compilers.get(key);
62
+ if (!compiler) {
63
+ compiler = Compiler.create();
64
+ compilers.set(key, compiler);
65
+ }
53
66
  return upstream.transform({
54
67
  ...input,
55
68
  plugins: [
@@ -59,7 +72,12 @@ export function create(upstreamPath, options) {
59
72
  ...options,
60
73
  platform,
61
74
  target: 'native',
62
- ...Graph.read(filename, input.src, platform, options.root),
75
+ ...graph,
76
+ [Compilation.key]: {
77
+ compile: compiler.compile,
78
+ parse: snapshot.parse,
79
+ programs: snapshot.programs(graph.modules),
80
+ },
63
81
  },
64
82
  ],
65
83
  ...(input.plugins ?? []),
@@ -1 +1 @@
1
- {"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../src/metro/transformer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../src/metro/transformer.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  /** Connects Next.js configuration to the shared static compiler. @module */
2
2
  import type { NextConfig } from 'next';
3
3
  /**
4
- * Adds source transformation, CSS delivery, and project dependency watching to both bundlers.
5
- * Preserves existing configuration hooks and creates `.zyzz/next` beneath the working directory.
6
- * Throws file-system errors during setup; compilation errors are reported by the bundler.
4
+ * Adds source transformation, CSS delivery, and imported dependency watching to both bundlers.
5
+ * Preserves configuration hooks. Compilation emits stylesheets beneath `.zyzz/next`.
6
+ * Compilation and file-system errors are reported by the bundler.
7
7
  */
8
8
  export declare function zyzz(config: NextConfig, options?: zyzz.Options): NextConfig;
9
9
  export declare function zyzz(config: zyzz.Factory, options?: zyzz.Options): zyzz.Factory;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAKtC;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,UAAU,CAAA;AAC5E,wBAAgB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;AAChF,wBAAgB,IAAI,CAClB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,EAC3B,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,GACrB,OAAO,CAAC,UAAU,CAAC,CAAA;AA0GtB,gDAAgD;AAChD,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,+EAA+E;IAC/E,KAAK,OAAO,GAAG,CACb,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QAAE,aAAa,EAAE,UAAU,CAAA;KAAE,KACnC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAErC,wCAAwC;IACxC,KAAK,OAAO,GAAG;QACb,gDAAgD;QAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KACrC,CAAA;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAKtC;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,UAAU,CAAA;AAC5E,wBAAgB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;AAChF,wBAAgB,IAAI,CAClB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,EAC3B,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,GACrB,OAAO,CAAC,UAAU,CAAC,CAAA;AAqGtB,gDAAgD;AAChD,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,+EAA+E;IAC/E,KAAK,OAAO,GAAG,CACb,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QAAE,aAAa,EAAE,UAAU,CAAA;KAAE,KACnC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAErC,wCAAwC;IACxC,KAAK,OAAO,GAAG;QACb,gDAAgD;QAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KACrC,CAAA;CACF"}
@@ -7,26 +7,34 @@ export function zyzz(config, options = {}) {
7
7
  if (config instanceof Promise)
8
8
  return config.then((value) => zyzz(value, options));
9
9
  const loader = Module.createRequire(import.meta.url).resolve('zyzz/next/loader');
10
- const loaderOptions = { reset: options.reset ?? false, root: process.cwd() };
11
- const shared = Path.join(loaderOptions.root, '.zyzz', 'next', 'shared.css');
12
- Fs.mkdirSync(Path.dirname(shared), { recursive: true });
13
- try {
14
- Fs.writeFileSync(shared, '', { flag: 'wx' });
15
- }
16
- catch (error) {
17
- if (error.code !== 'EEXIST')
18
- throw error;
10
+ const loaderOptions = {
11
+ development: process.env.NODE_ENV === 'development',
12
+ reset: options.reset ?? false,
13
+ root: process.cwd(),
14
+ };
15
+ // Turbopack must observe the output directory before taking its filesystem snapshot.
16
+ const directory = Path.join(loaderOptions.root, '.zyzz', 'next');
17
+ Fs.mkdirSync(directory, { recursive: true });
18
+ for (const [name, source] of Object.entries({
19
+ 'package.json': JSON.stringify({ sideEffects: true, type: 'module' }),
20
+ 'style.css': '',
21
+ })) {
22
+ try {
23
+ Fs.writeFileSync(Path.join(directory, name), source, { flag: 'wx' });
24
+ }
25
+ catch (error) {
26
+ if (error.code !== 'EEXIST')
27
+ throw error;
28
+ }
19
29
  }
20
30
  const pattern = '*.{ts,tsx,js,jsx,mts,cts,mjs,cjs}';
21
31
  const existing = config.turbopack?.rules?.[pattern];
22
32
  const rule = {
23
- condition: {
24
- all: [{ not: 'foreign' }, { not: { query: /zyzz-style/ } }],
25
- },
33
+ condition: { not: 'foreign' },
26
34
  loaders: [
27
35
  {
28
36
  loader,
29
- options: { ...loaderOptions, bundler: 'turbopack', mode: 'source' },
37
+ options: { ...loaderOptions, bundler: 'turbopack' },
30
38
  },
31
39
  ],
32
40
  };
@@ -51,29 +59,16 @@ export function zyzz(config, options = {}) {
51
59
  [pattern]: [
52
60
  ...(Array.isArray(existing) ? existing : existing ? [existing] : []),
53
61
  rule,
54
- {
55
- condition: { query: /zyzz-style/ },
56
- loaders: [
57
- {
58
- loader,
59
- options: {
60
- ...loaderOptions,
61
- bundler: 'turbopack',
62
- mode: 'style',
63
- },
64
- },
65
- ],
66
- as: '*.css',
67
- },
68
62
  ],
69
- '**/.zyzz/next/shared.css': {
63
+ '**/.zyzz/next/style.css': {
64
+ condition: { query: /zyzz=/ },
70
65
  loaders: [
71
66
  {
72
67
  loader,
73
68
  options: {
74
69
  ...loaderOptions,
75
70
  bundler: 'turbopack',
76
- mode: 'shared',
71
+ mode: 'style',
77
72
  },
78
73
  },
79
74
  ],
@@ -92,7 +87,7 @@ export function zyzz(config, options = {}) {
92
87
  use: [
93
88
  {
94
89
  loader,
95
- options: { ...loaderOptions, bundler: 'webpack', mode: 'source' },
90
+ options: { ...loaderOptions, bundler: 'webpack' },
96
91
  },
97
92
  ],
98
93
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,6 @@
1
1
  import * as Graph from '../../compiler/Graph.js';
2
2
  /** Resolution and dependency notifications supplied by the active loader invocation. */
3
3
  export type Context = {
4
- /** Track graph membership changes. */
5
- addContextDependency(directory: string): void;
6
4
  /** Track source and contract edits. */
7
5
  addDependency(file: string): void;
8
6
  /** Resolve with the active bundler's aliases and conditions. */
@@ -13,12 +11,14 @@ export type Context = {
13
11
  /** Creates project state owned by a loader configuration in one worker process. */
14
12
  export declare function create(options: create.Options): {
15
13
  /** Compiles a fresh snapshot while retaining unchanged syntax and graph results. */
16
- compile(context: Context, source?: string): Promise<Graph.compile.ReturnType>;
14
+ compile(context: Context, source: string): Promise<Graph.compile.ReturnType>;
17
15
  };
18
16
  /** Project cache settings. */
19
17
  export declare namespace create {
20
- /** Isolates source discovery and shared stylesheet options. */
18
+ /** Isolates imported source graphs and shared stylesheet options. */
21
19
  type Options = {
20
+ /** Keep development class names stable across value edits. */
21
+ readonly development?: boolean | undefined;
22
22
  /** Include the packaged reset in shared CSS. */
23
23
  readonly reset?: boolean | undefined;
24
24
  /** Absolute application directory. */
@@ -1 +1 @@
1
- {"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../../../src/next/internal/Project.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,yBAAyB,CAAA;AAMhD,wFAAwF;AACxF,MAAM,MAAM,OAAO,GAAG;IACpB,sCAAsC;IACtC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7C,uCAAuC;IACvC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,gEAAgE;IAChE,UAAU,CACR,OAAO,EAAE,MAAM,GACd,CACD,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,KAAK,IAAI,KAC3D,IAAI,CAAA;IACT,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,mFAAmF;AACnF,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO;IAmB1C,oFAAoF;IACpF,OAAO,UAAU,OAAO,WAAW,MAAM;EA6O5C;AAED,8BAA8B;AAC9B,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,+DAA+D;IAC/D,KAAK,OAAO,GAAG;QACb,gDAAgD;QAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QACpC,sCAAsC;QACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KACtB,CAAA;CACF"}
1
+ {"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../../../src/next/internal/Project.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,yBAAyB,CAAA;AAMhD,wFAAwF;AACxF,MAAM,MAAM,OAAO,GAAG;IACpB,uCAAuC;IACvC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,gEAAgE;IAChE,UAAU,CACR,OAAO,EAAE,MAAM,GACd,CACD,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,KAAK,IAAI,KAC3D,IAAI,CAAA;IACT,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,mFAAmF;AACnF,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO;IAe1C,oFAAoF;IACpF,OAAO,UAAU,OAAO,UAAU,MAAM;EA6T3C;AAED,8BAA8B;AAC9B,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,qEAAqE;IACrE,KAAK,OAAO,GAAG;QACb,8DAA8D;QAC9D,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QAC1C,gDAAgD;QAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QACpC,sCAAsC;QACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KACtB,CAAA;CACF"}
@@ -4,11 +4,11 @@ import * as Fs from 'node:fs/promises';
4
4
  import * as Graph from '../../compiler/Graph.js';
5
5
  import * as Path from 'node:path';
6
6
  import * as Reset from '../../node/Reset.js';
7
+ import * as Stylesheets from '../../compiler/internal/Stylesheets.js';
7
8
  import * as Syntax from '../../compiler/internal/Syntax.js';
8
9
  /** Creates project state owned by a loader configuration in one worker process. */
9
10
  export function create(options) {
10
11
  let compiler = Graph.create();
11
- const directories = new Map();
12
12
  const files = new Map();
13
13
  const libraries = new Map();
14
14
  const reset = options.reset ? Reset.read() : undefined;
@@ -19,16 +19,18 @@ export function create(options) {
19
19
  compile(context, source) {
20
20
  // Loader calls may overlap, but only one immutable snapshot updates the compiler at a time.
21
21
  const result = pending.then(async () => {
22
+ const tracked = new Set();
22
23
  try {
23
- return await compile(context, source);
24
+ return await compile(context, source, tracked);
24
25
  }
25
26
  catch (error) {
26
- // Failed discovery or extraction may leave a partial filesystem snapshot.
27
+ // Failed resolution or extraction may leave a partial filesystem snapshot.
27
28
  compiler = Graph.create();
28
- directories.clear();
29
29
  files.clear();
30
30
  libraries.clear();
31
31
  syntax.clear();
32
+ for (const file of tracked)
33
+ context.addDependency(file);
32
34
  throw error;
33
35
  }
34
36
  });
@@ -37,75 +39,168 @@ export function create(options) {
37
39
  return result;
38
40
  },
39
41
  };
40
- async function compile(context, source) {
42
+ async function compile(context, source, tracked) {
41
43
  const root = options.root;
44
+ const runtime = new Set();
45
+ function track(file) {
46
+ if (tracked.has(file))
47
+ return;
48
+ tracked.add(file);
49
+ }
42
50
  const programs = new Map();
43
- const seenDirectories = new Set();
44
- const seenFiles = new Set();
45
- async function read(file) {
46
- seenFiles.add(file);
51
+ const reads = new Map();
52
+ function read(file) {
53
+ let pending = reads.get(file);
54
+ if (!pending) {
55
+ pending = load(file);
56
+ reads.set(file, pending);
57
+ }
58
+ return pending;
59
+ }
60
+ async function load(file) {
47
61
  const version = await stamp(file);
48
62
  let entry = files.get(file);
49
63
  if (entry?.version !== version) {
50
64
  entry = { source: await Fs.readFile(file, 'utf8'), version };
51
- files.set(file, entry);
52
65
  }
66
+ files.delete(file);
67
+ files.set(file, entry);
68
+ if (files.size > 256)
69
+ files.delete(files.keys().next().value);
53
70
  return entry.source;
54
71
  }
55
72
  const modules = Object.create(null);
56
73
  const imports = Object.create(null);
57
74
  const contracts = Object.create(null);
58
- const resolve = context.getResolve({});
75
+ const resolver = context.getResolve({});
76
+ const resolutions = new Map();
77
+ function resolve(directory, specifier) {
78
+ const key = JSON.stringify([directory, specifier]);
79
+ let pending = resolutions.get(key);
80
+ if (!pending) {
81
+ pending = new Promise((accept, reject) => {
82
+ resolver(directory, specifier, (error, value) => error ? reject(error) : accept(value));
83
+ });
84
+ resolutions.set(key, pending);
85
+ }
86
+ return pending;
87
+ }
59
88
  const id = (file) => `app/${Path.relative(root, file).split(Path.sep).join('/')}`;
60
89
  const eligible = (file) => /\.[cm]?[jt]sx?$/.test(file) &&
61
90
  !/\.(?:d|test|test-d|bench|bench-d)\.[cm]?[jt]sx?$/.test(file) &&
62
91
  !Path.relative(root, file)
63
92
  .split(Path.sep)
64
93
  .some((part) => part === '..' || part === 'node_modules' || part.startsWith('.'));
94
+ function parse(name, source) {
95
+ let entry = syntax.get(name);
96
+ if (entry?.source !== source)
97
+ entry = { source, parsed: Syntax.parse({ moduleId: name, source }) };
98
+ syntax.delete(name);
99
+ syntax.set(name, entry);
100
+ if (syntax.size > 256)
101
+ syntax.delete(syntax.keys().next().value);
102
+ return entry.parsed;
103
+ }
65
104
  async function visit(file, text) {
66
105
  const name = id(file);
67
106
  if (Object.hasOwn(modules, name))
68
107
  return;
69
- context.addDependency(file);
70
- seenFiles.add(file);
108
+ track(file);
71
109
  modules[name] = text ?? (await read(file));
72
110
  const links = Object.create(null);
73
111
  imports[name] = links;
74
- let entry = syntax.get(name);
75
- if (entry?.source !== modules[name]) {
76
- entry = {
77
- source: modules[name],
78
- parsed: Syntax.parse({ moduleId: name, source: modules[name] }),
79
- };
80
- syntax.set(name, entry);
81
- }
82
- programs.set(name, entry.parsed);
83
- const parsed = entry.parsed;
84
- for (const node of parsed.program.body) {
112
+ const parsed = parse(name, modules[name]);
113
+ programs.set(name, parsed);
114
+ const resolutions = await Promise.all(parsed.program.body.map(async (node) => {
85
115
  if ((node.type !== 'ImportDeclaration' &&
86
116
  node.type !== 'ExportNamedDeclaration' &&
87
117
  node.type !== 'ExportAllDeclaration') ||
88
118
  !node.source)
89
- continue;
119
+ return undefined;
90
120
  if (node.type === 'ImportDeclaration'
91
121
  ? node.importKind === 'type'
92
122
  : node.exportKind === 'type')
93
- continue;
123
+ return undefined;
94
124
  const specifier = node.source.value;
95
125
  links[specifier] = null;
96
126
  // Next owns this virtual module, which has no physical stylesheet contract.
97
127
  if (specifier === 'next/root-params')
98
- continue;
128
+ return undefined;
99
129
  if (specifier === 'zyzz' ||
100
130
  (specifier.startsWith('zyzz/') && specifier !== 'zyzz/default') ||
101
131
  specifier.startsWith('node:'))
132
+ return undefined;
133
+ const resolved = await resolve(Path.dirname(file), specifier);
134
+ return { node, specifier, resolved };
135
+ }));
136
+ for (const resolution of resolutions) {
137
+ if (!resolution)
102
138
  continue;
103
- const resolved = await new Promise((accept, reject) => {
104
- resolve(Path.dirname(file), specifier, (error, value) => error ? reject(error) : accept(value));
105
- });
139
+ const { node, specifier, resolved } = resolution;
106
140
  if (!resolved || !/\.[cm]?[jt]sx?$/.test(resolved))
107
141
  continue;
108
142
  if (eligible(resolved)) {
143
+ if (node.type === 'ImportDeclaration' && node.specifiers.length) {
144
+ track(resolved);
145
+ const parsed = parse(id(resolved), await read(resolved));
146
+ const functions = new Set();
147
+ let defaultBinding;
148
+ for (const statement of parsed.program.body) {
149
+ if (statement.type === 'ExportDefaultDeclaration' &&
150
+ [
151
+ 'FunctionDeclaration',
152
+ 'ClassDeclaration',
153
+ 'ArrowFunctionExpression',
154
+ 'FunctionExpression',
155
+ ].includes(statement.declaration.type)) {
156
+ functions.add('default');
157
+ if (statement.declaration.type === 'FunctionDeclaration' ||
158
+ statement.declaration.type === 'ClassDeclaration')
159
+ defaultBinding = statement.declaration.id?.name;
160
+ }
161
+ if (statement.type !== 'ExportNamedDeclaration')
162
+ continue;
163
+ const declaration = statement.declaration;
164
+ if ((declaration?.type === 'FunctionDeclaration' ||
165
+ declaration?.type === 'ClassDeclaration') &&
166
+ declaration.id)
167
+ functions.add(declaration.id.name);
168
+ if (declaration?.type === 'VariableDeclaration')
169
+ for (const item of declaration.declarations) {
170
+ if (item.id.type === 'Identifier' &&
171
+ item.init &&
172
+ [
173
+ 'ArrowFunctionExpression',
174
+ 'FunctionExpression',
175
+ 'ClassExpression',
176
+ ].includes(item.init.type))
177
+ functions.add(item.id.name);
178
+ }
179
+ }
180
+ for (const statement of parsed.program.body) {
181
+ const declaration = statement.type === 'ExportNamedDeclaration'
182
+ ? statement.declaration
183
+ : statement;
184
+ if (declaration?.type === 'TSModuleDeclaration' &&
185
+ declaration.id.type === 'Identifier') {
186
+ functions.delete(declaration.id.name);
187
+ if (declaration.id.name === defaultBinding)
188
+ functions.delete('default');
189
+ }
190
+ }
191
+ if (!parsed.errors.length &&
192
+ node.specifiers.every((specifier) => specifier.type === 'ImportDefaultSpecifier'
193
+ ? functions.has('default')
194
+ : specifier.type === 'ImportSpecifier' &&
195
+ (specifier.importKind === 'type' ||
196
+ functions.has(specifier.imported.type === 'Identifier'
197
+ ? specifier.imported.name
198
+ : specifier.imported.value)))) {
199
+ runtime.add(resolved);
200
+ track(resolved);
201
+ continue;
202
+ }
203
+ }
109
204
  links[specifier] = id(resolved);
110
205
  await visit(resolved);
111
206
  continue;
@@ -113,7 +208,7 @@ export function create(options) {
113
208
  const sidecar = `${resolved}.zyzz.json`;
114
209
  try {
115
210
  contracts[resolved] = await read(sidecar);
116
- context.addDependency(sidecar);
211
+ track(sidecar);
117
212
  links[specifier] = resolved;
118
213
  }
119
214
  catch (error) {
@@ -122,46 +217,7 @@ export function create(options) {
122
217
  }
123
218
  }
124
219
  }
125
- async function discover(directory) {
126
- const version = await stamp(directory);
127
- let cached = directories.get(directory);
128
- if (cached?.version !== version) {
129
- const items = await Fs.readdir(directory, { withFileTypes: true });
130
- cached = {
131
- items,
132
- track: !items.some((item) => item.name === 'node_modules') ||
133
- !(await loops(directory)),
134
- version,
135
- };
136
- directories.set(directory, cached);
137
- }
138
- seenDirectories.add(directory);
139
- const items = cached.items;
140
- // Linked package roots are tracked through children to avoid recursive dependency loops.
141
- if (cached.track)
142
- context.addContextDependency(directory);
143
- for (const item of items) {
144
- if (item.name.startsWith('.') ||
145
- [
146
- 'node_modules',
147
- 'dist',
148
- 'build',
149
- 'coverage',
150
- 'test',
151
- 'tests',
152
- '__tests__',
153
- ].includes(item.name))
154
- continue;
155
- const file = Path.join(directory, item.name);
156
- if (item.isDirectory())
157
- await discover(file);
158
- else if (item.isFile() && eligible(file))
159
- await visit(file);
160
- }
161
- }
162
- if (source !== undefined)
163
- await visit(context.resourcePath, source);
164
- await discover(root);
220
+ await visit(context.resourcePath, source);
165
221
  const loaded = new Set();
166
222
  async function dependencies(file) {
167
223
  if (loaded.has(file))
@@ -178,9 +234,7 @@ export function create(options) {
178
234
  for (const dependency of library.dependencies) {
179
235
  let owner = file;
180
236
  for (const specifier of dependency) {
181
- const target = await new Promise((accept, reject) => {
182
- resolve(Path.dirname(owner), specifier, (error, value) => error ? reject(error) : accept(value));
183
- });
237
+ const target = await resolve(Path.dirname(owner), specifier);
184
238
  if (!target || !Path.isAbsolute(target))
185
239
  throw new Error('Unable to resolve packed stylesheet dependency.');
186
240
  const links = (imports[owner] ??= Object.create(null));
@@ -188,7 +242,7 @@ export function create(options) {
188
242
  if (!Object.hasOwn(contracts, target)) {
189
243
  const sidecar = `${target}.zyzz.json`;
190
244
  contracts[target] = await read(sidecar);
191
- context.addDependency(sidecar);
245
+ track(sidecar);
192
246
  }
193
247
  await dependencies(target);
194
248
  owner = target;
@@ -199,23 +253,38 @@ export function create(options) {
199
253
  await dependencies(file);
200
254
  const graph = compiler.compile({
201
255
  [Syntax.cache]: programs,
256
+ [Stylesheets.entry]: id(context.resourcePath),
202
257
  contracts,
258
+ development: options.development,
203
259
  imports,
204
260
  modules,
205
261
  reset,
206
262
  });
207
- for (const file of files.keys())
208
- if (!seenFiles.has(file))
209
- files.delete(file);
210
- for (const file of directories.keys())
211
- if (!seenDirectories.has(file))
212
- directories.delete(file);
263
+ const entry = id(context.resourcePath);
264
+ const output = graph.modules[entry];
265
+ // Unchanged runtime modules rely on Next's import graph, not transitive style inputs.
266
+ if (output.code === source && !output.css) {
267
+ context.addDependency(context.resourcePath);
268
+ for (const file of runtime)
269
+ context.addDependency(file);
270
+ for (const file of tracked)
271
+ if (file.endsWith('.zyzz.json'))
272
+ context.addDependency(file);
273
+ for (const target of Object.values(imports[entry] ?? {})) {
274
+ if (!target)
275
+ continue;
276
+ context.addDependency(target.startsWith('app/')
277
+ ? Path.join(root, target.slice(4))
278
+ : `${target}.zyzz.json`);
279
+ }
280
+ }
281
+ else {
282
+ for (const file of tracked)
283
+ context.addDependency(file);
284
+ }
213
285
  for (const file of libraries.keys())
214
286
  if (!Object.hasOwn(contracts, file))
215
287
  libraries.delete(file);
216
- for (const name of syntax.keys())
217
- if (!programs.has(name))
218
- syntax.delete(name);
219
288
  return graph;
220
289
  }
221
290
  }
@@ -223,27 +292,4 @@ async function stamp(file) {
223
292
  const stat = await Fs.stat(file, { bigint: true });
224
293
  return `${stat.dev}:${stat.ino}:${stat.size}:${stat.mtimeNs}:${stat.ctimeNs}`;
225
294
  }
226
- /** Whether an installed dependency links back to the directory or one of its ancestors. */
227
- async function loops(directory) {
228
- const installed = Path.join(directory, 'node_modules');
229
- const entries = await Fs.readdir(installed, { withFileTypes: true }).catch(() => []);
230
- const candidates = (await Promise.all(entries.map(async (entry) => {
231
- if (!entry.name.startsWith('@'))
232
- return [Path.join(installed, entry.name)];
233
- const scoped = Path.join(installed, entry.name);
234
- return (await Fs.readdir(scoped).catch(() => [])).map((name) => Path.join(scoped, name));
235
- }))).flat();
236
- for (const candidate of candidates) {
237
- const stat = await Fs.lstat(candidate).catch(() => undefined);
238
- if (!stat?.isSymbolicLink())
239
- continue;
240
- const target = await Fs.realpath(candidate).catch(() => undefined);
241
- if (target === undefined)
242
- continue;
243
- const relative = Path.relative(target, directory);
244
- if (!relative.startsWith('..') && !Path.isAbsolute(relative))
245
- return true;
246
- }
247
- return false;
248
- }
249
295
  //# sourceMappingURL=Project.js.map