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.
- package/README.md +7 -7
- package/dist/Style.d.ts +2 -2
- package/dist/Style.d.ts.map +1 -1
- package/dist/Style.js +4 -4
- package/dist/Style.js.map +1 -1
- package/dist/babel/index.d.ts +4 -1
- package/dist/babel/index.d.ts.map +1 -1
- package/dist/babel/index.js +6 -3
- package/dist/babel/index.js.map +1 -1
- package/dist/babel/internal/Compilation.d.ts +12 -0
- package/dist/babel/internal/Compilation.d.ts.map +1 -0
- package/dist/babel/internal/Compilation.js +3 -0
- package/dist/babel/internal/Compilation.js.map +1 -0
- package/dist/compiler/Graph.d.ts +6 -1
- package/dist/compiler/Graph.d.ts.map +1 -1
- package/dist/compiler/Graph.js +160 -36
- package/dist/compiler/Graph.js.map +1 -1
- package/dist/compiler/Transform.d.ts.map +1 -1
- package/dist/compiler/Transform.js +2 -1
- package/dist/compiler/Transform.js.map +1 -1
- package/dist/compiler/internal/Stylesheets.d.ts +8 -0
- package/dist/compiler/internal/Stylesheets.d.ts.map +1 -1
- package/dist/compiler/internal/Stylesheets.js +4 -0
- package/dist/compiler/internal/Stylesheets.js.map +1 -1
- package/dist/internal/Value.d.ts +5 -5
- package/dist/internal/Value.d.ts.map +1 -1
- package/dist/internal/Value.js +18 -64
- package/dist/internal/Value.js.map +1 -1
- package/dist/metro/Graph.d.ts +9 -1
- package/dist/metro/Graph.d.ts.map +1 -1
- package/dist/metro/Graph.js +5 -4
- package/dist/metro/Graph.js.map +1 -1
- package/dist/metro/transformer.d.ts +0 -1
- package/dist/metro/transformer.d.ts.map +1 -1
- package/dist/metro/transformer.js +19 -1
- package/dist/metro/transformer.js.map +1 -1
- package/dist/next/index.d.ts +3 -3
- package/dist/next/index.d.ts.map +1 -1
- package/dist/next/index.js +25 -30
- package/dist/next/index.js.map +1 -1
- package/dist/next/internal/Project.d.ts +4 -4
- package/dist/next/internal/Project.d.ts.map +1 -1
- package/dist/next/internal/Project.js +153 -107
- package/dist/next/internal/Project.js.map +1 -1
- package/dist/next/loader.d.ts +3 -1
- package/dist/next/loader.d.ts.map +1 -1
- package/dist/next/loader.js +152 -99
- package/dist/next/loader.js.map +1 -1
- package/dist/node/Host.d.ts.map +1 -1
- package/dist/node/Host.js +11 -3
- package/dist/node/Host.js.map +1 -1
- package/dist/node/internal/Snapshot.d.ts +12 -0
- package/dist/node/internal/Snapshot.d.ts.map +1 -0
- package/dist/node/internal/Snapshot.js +74 -0
- package/dist/node/internal/Snapshot.js.map +1 -0
- package/dist/unplugin/index.d.ts.map +1 -1
- package/dist/unplugin/index.js +13 -9
- package/dist/unplugin/index.js.map +1 -1
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +130 -27
- package/dist/vite/index.js.map +1 -1
- package/package.json +1 -1
- package/src/Style.ts +6 -6
- package/src/babel/index.ts +10 -4
- package/src/babel/internal/Compilation.ts +13 -0
- package/src/compiler/Graph.ts +213 -47
- package/src/compiler/Transform.ts +2 -1
- package/src/compiler/internal/Stylesheets.ts +9 -0
- package/src/internal/Value.ts +40 -88
- package/src/metro/Graph.ts +5 -3
- package/src/metro/transformer.ts +26 -1
- package/src/next/index.ts +26 -31
- package/src/next/internal/Project.ts +196 -155
- package/src/next/loader.ts +181 -124
- package/src/node/Host.ts +15 -3
- package/src/node/internal/Snapshot.ts +79 -0
- package/src/unplugin/index.ts +12 -8
- package/src/vite/index.ts +161 -35
package/dist/metro/Graph.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Graph.js","sourceRoot":"","sources":["../../src/metro/Graph.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,
|
|
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":"
|
|
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
|
-
...
|
|
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":"
|
|
1
|
+
{"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../src/metro/transformer.ts"],"names":[],"mappings":"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"}
|
package/dist/next/index.d.ts
CHANGED
|
@@ -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
|
|
5
|
-
* Preserves
|
|
6
|
-
*
|
|
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;
|
package/dist/next/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/next/index.js
CHANGED
|
@@ -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 = {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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'
|
|
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/
|
|
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: '
|
|
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'
|
|
90
|
+
options: { ...loaderOptions, bundler: 'webpack' },
|
|
96
91
|
},
|
|
97
92
|
],
|
|
98
93
|
});
|
package/dist/next/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAajC,MAAM,UAAU,IAAI,CAClB,MAAuD,EACvD,OAAO,GAAiB,EAAE;IAE1B,IAAI,OAAO,MAAM,KAAK,UAAU;QAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAA;IAC9E,IAAI,MAAM,YAAY,OAAO;QAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;IAErD,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAC1D,kBAAkB,CACnB,CAAA;IACD,MAAM,aAAa,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
-
|
|
119
|
+
return undefined;
|
|
90
120
|
if (node.type === 'ImportDeclaration'
|
|
91
121
|
? node.importKind === 'type'
|
|
92
122
|
: node.exportKind === 'type')
|
|
93
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
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
|