@wuchale/vite-plugin 0.10.3 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,14 +1,9 @@
1
- type SendFunc = (event: string, data: any[]) => void;
2
- type HMRClient = {
3
- send: SendFunc;
4
- };
1
+ import type { CompiledElement } from "wuchale";
5
2
  type ViteDevServer = {
6
3
  ws: {
7
- send: SendFunc;
8
- on: (event: string, cb: (msg: {
9
- loadID: string | null;
10
- }, client: HMRClient) => void) => void;
4
+ send: (event: string, data: CompiledElement[]) => void;
11
5
  };
6
+ moduleGraph: any;
12
7
  };
13
8
  declare class Plugin {
14
9
  #private;
@@ -20,9 +15,10 @@ declare class Plugin {
20
15
  };
21
16
  root: string;
22
17
  }) => Promise<void>;
23
- configureServer: (server: ViteDevServer) => void;
24
18
  handleHotUpdate: (ctx: {
25
19
  file: string;
20
+ server: ViteDevServer;
21
+ timestamp: number;
26
22
  }) => Promise<void>;
27
23
  resolveId: (source: string, importer?: string) => string;
28
24
  load: (id: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;AACpD,KAAK,SAAS,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAA;AAEnC,KAAK,aAAa,GAAG;IACjB,EAAE,EAAE;QACA,IAAI,EAAE,QAAQ,CAAC;QACf,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE;YAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;SAAC,EAAE,MAAM,EAAE,SAAS,KAAK,IAAI,KAAK,IAAI,CAAC;KAC9F,CAAA;CACJ,CAAA;AAED,cAAM,MAAM;;IAER,IAAI,SAAa;gBAgBL,UAAU,EAAE,MAAM;IA8B9B,cAAc,GAAU,QAAQ;QAAE,GAAG,EAAE;YAAE,GAAG,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,mBASvE;IAED,eAAe,GAAI,QAAQ,aAAa,UAiBvC;IAmBD,eAAe,GAAU,KAAK;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,mBAQ3C;IAED,SAAS,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,YAK7C;IAED,IAAI,GAAI,IAAI,MAAM,YAiCjB;IAmBD,SAAS;eAAa,KAAK;wBAjBM,MAAM,MAAM,MAAM;;;;MAiBiB;CACvE;AAED,eAAO,MAAM,OAAO,GAAI,aAAa,MAAM,WAA2B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAgB,eAAe,EAAC,MAAM,SAAS,CAAA;AAO3D,KAAK,aAAa,GAAG;IACjB,EAAE,EAAE;QAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,IAAI,CAAA;KAAE,CAAA;IAC9D,WAAW,EAAE,GAAG,CAAA;CACnB,CAAA;AAED,cAAM,MAAM;;IAER,IAAI,SAAa;gBAgBL,UAAU,EAAE,MAAM;IA+B9B,cAAc,GAAU,QAAQ;QAAE,GAAG,EAAE;YAAE,GAAG,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,mBASvE;IAoBD,eAAe,GAAU,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,aAAa,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,mBA+BvF;IAED,SAAS,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,YAK7C;IAED,IAAI,GAAI,IAAI,MAAM,YAiCjB;IAeD,SAAS;eAAa,KAAK;wBAbM,MAAM,MAAM,MAAM;;;;MAaiB;CACvE;AAED,eAAO,MAAM,OAAO,GAAI,aAAa,MAAM,WAA2B,CAAA"}
package/dist/index.js CHANGED
@@ -1,8 +1,7 @@
1
1
  // $$ cd ../.. && npm run test
2
2
  import { relative, resolve } from "node:path";
3
- import { getConfig as getConfig } from "wuchale/config";
4
- import { AdapterHandler } from "wuchale/handler";
5
- import { Logger } from "wuchale/log";
3
+ import { getConfig as getConfig, Logger, AdapterHandler } from "wuchale";
4
+ import { catalogVarName } from "wuchale/runtime";
6
5
  const pluginName = 'wuchale';
7
6
  const virtualPrefix = `virtual:${pluginName}/`;
8
7
  const virtualResolvedPrefix = '\0';
@@ -11,7 +10,7 @@ class Plugin {
11
10
  #config;
12
11
  #locales = [];
13
12
  #projectRoot = '';
14
- #server;
13
+ #mode;
15
14
  #adapters = {};
16
15
  #adaptersByLoaderPath = {};
17
16
  #adaptersByCatalogPath = {};
@@ -24,6 +23,7 @@ class Plugin {
24
23
  this.#config = await getConfig(this.#configPath);
25
24
  this.#locales = [this.#config.sourceLocale, ...this.#config.otherLocales];
26
25
  this.#log = new Logger(this.#config.messages);
26
+ this.#mode = mode;
27
27
  if (Object.keys(this.#config.adapters).length === 0) {
28
28
  throw Error('At least one adapter is needed.');
29
29
  }
@@ -48,40 +48,23 @@ class Plugin {
48
48
  this.#projectRoot = config.root;
49
49
  await this.#init(mode);
50
50
  };
51
- configureServer = (server) => {
52
- this.#server = server;
53
- // initial load
54
- for (const [key, adapter] of Object.entries(this.#adapters)) {
55
- for (const loc of this.#locales) {
56
- const event = adapter.virtModEvent(loc, null);
57
- server.ws.on(event, (payload, client) => {
58
- const eventSend = adapter.virtModEvent(loc, payload.loadID);
59
- if (!this.#config.adapters[key].granularLoad) {
60
- client.send(eventSend, adapter.compiled[loc].items);
61
- return;
62
- }
63
- const compiled = adapter.granularStateByID[payload.loadID].compiled[loc];
64
- client.send(eventSend, compiled.items);
65
- });
51
+ #loadCatalog(adapter, locale, loadID) {
52
+ const module = adapter.loadDataModule(locale, loadID);
53
+ if (this.#mode !== 'dev') {
54
+ return module;
55
+ }
56
+ return `
57
+ ${module}
58
+ let updateCallback
59
+ export const onUpdate = callback => { updateCallback = callback }
60
+ if (import.meta.hot) {
61
+ import.meta.hot.on('${adapter.virtModEvent(locale, loadID)}', newData => {
62
+ ${catalogVarName} = newData
63
+ updateCallback?.(newData)
64
+ })
66
65
  }
67
- }
68
- };
69
- #sendUpdateToClient = (adapter, locales) => {
70
- if (!this.#server) {
71
- // maybe not in dev mode
72
- return;
73
- }
74
- for (const loc of locales) {
75
- if (!this.#config.adapters[adapter.key].granularLoad) {
76
- this.#server.ws.send(adapter.virtModEvent(loc, null), adapter.compiled[loc].items);
77
- return;
78
- }
79
- for (const [loadID, state] of Object.entries(adapter.granularStateByID)) {
80
- const eventName = adapter.virtModEvent(loc, loadID);
81
- this.#server.ws.send(eventName, state.compiled[loc].items);
82
- }
83
- }
84
- };
66
+ `;
67
+ }
85
68
  handleHotUpdate = async (ctx) => {
86
69
  if (!(ctx.file in this.#adaptersByCatalogPath)) {
87
70
  return;
@@ -89,20 +72,40 @@ class Plugin {
89
72
  const adapter = this.#adaptersByCatalogPath[ctx.file];
90
73
  const loc = adapter.catalogPathsToLocales[ctx.file];
91
74
  await adapter.loadCatalogNCompile(loc);
92
- this.#sendUpdateToClient(adapter, [loc]);
75
+ const loadIDsToInvalidate = [];
76
+ if (this.#config.adapters[adapter.key].granularLoad) {
77
+ for (const [loadID, state] of Object.entries(adapter.granularStateByID)) {
78
+ loadIDsToInvalidate.push(loadID);
79
+ const eventName = adapter.virtModEvent(loc, loadID);
80
+ ctx.server.ws.send(eventName, state.compiled[loc].items);
81
+ }
82
+ }
83
+ else {
84
+ loadIDsToInvalidate.push(null);
85
+ ctx.server.ws.send(adapter.virtModEvent(loc, null), adapter.compiled[loc].items);
86
+ }
87
+ // invalidate for next reload
88
+ const invalidatedModules = new Set();
89
+ for (const loadID of loadIDsToInvalidate) {
90
+ const fileID = `${virtualResolvedPrefix}${adapter.virtModEvent(loc, loadID)}`;
91
+ for (const module of ctx.server.moduleGraph.getModulesByFile(fileID)) {
92
+ ctx.server.moduleGraph.invalidateModule(module, invalidatedModules, ctx.timestamp, false // no hmr, already sent event
93
+ );
94
+ }
95
+ }
93
96
  };
94
97
  resolveId = (source, importer) => {
95
98
  if (!source.startsWith(virtualPrefix)) {
96
99
  return null;
97
100
  }
98
- return `${virtualResolvedPrefix}${source}?${importer}`;
101
+ return `${virtualResolvedPrefix}${source}?importer=${importer}`;
99
102
  };
100
103
  load = (id) => {
101
104
  const prefix = virtualResolvedPrefix + virtualPrefix;
102
105
  if (!id.startsWith(prefix)) {
103
106
  return null;
104
107
  }
105
- const [path, importer] = id.slice(prefix.length).split('?');
108
+ const [path, importer] = id.slice(prefix.length).split('?importer=');
106
109
  const [part, ...rest] = path.split('/');
107
110
  if (part === 'catalog') {
108
111
  const [adapterKey, loadID, locale] = rest;
@@ -111,7 +114,7 @@ class Plugin {
111
114
  this.#log.error(`Adapter not found for key: ${adapterKey}`);
112
115
  return null;
113
116
  }
114
- return adapter.loadDataModule(locale, loadID);
117
+ return this.#loadCatalog(adapter, locale, loadID);
115
118
  }
116
119
  if (part === 'locales') {
117
120
  return `export const locales = ['${this.#locales.join("', '")}']`;
@@ -138,11 +141,7 @@ class Plugin {
138
141
  const filename = relative(this.#projectRoot, id);
139
142
  for (const adapter of Object.values(this.#adapters)) {
140
143
  if (adapter.fileMatches(filename)) {
141
- const { catalogChanged, ...output } = await adapter.transform(code, filename);
142
- if (catalogChanged) {
143
- this.#sendUpdateToClient(adapter, this.#locales);
144
- }
145
- return output;
144
+ return await adapter.transform(code, filename);
146
145
  }
147
146
  }
148
147
  return {};
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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wuchale/vite-plugin",
3
- "version": "0.10.3",
3
+ "version": "0.12.0",
4
4
  "description": "Protobuf-like i18n from normal code",
5
5
  "scripts": {
6
6
  "dev": "tsc --watch",
@@ -27,8 +27,7 @@
27
27
  "lightweight"
28
28
  ],
29
29
  "files": [
30
- "dist",
31
- "src"
30
+ "dist"
32
31
  ],
33
32
  "main": "./dist/index.js",
34
33
  "types": "./dist/index.d.ts",
@@ -41,7 +40,7 @@
41
40
  "author": "K1DV5",
42
41
  "license": "MIT",
43
42
  "dependencies": {
44
- "wuchale": "^0.11.0"
43
+ "wuchale": "^0.13.0"
45
44
  },
46
45
  "devDependencies": {
47
46
  "typescript": "^5.8.3"
package/src/index.ts DELETED
@@ -1,189 +0,0 @@
1
- // $$ cd ../.. && npm run test
2
- import { relative, resolve } from "node:path"
3
- import { getConfig as getConfig, type Config } from "wuchale/config"
4
- import { AdapterHandler } from "wuchale/handler"
5
- import type {Mode} from 'wuchale/handler'
6
- import { Logger } from "wuchale/log"
7
-
8
- const pluginName = 'wuchale'
9
- const virtualPrefix = `virtual:${pluginName}/`
10
- const virtualResolvedPrefix = '\0'
11
-
12
- type SendFunc = (event: string, data: any[]) => void
13
- type HMRClient = { send: SendFunc }
14
-
15
- type ViteDevServer = {
16
- ws: {
17
- send: SendFunc,
18
- on: (event: string, cb: (msg: {loadID: string | null}, client: HMRClient) => void) => void,
19
- }
20
- }
21
-
22
- class Plugin {
23
-
24
- name = pluginName
25
-
26
- #config: Config
27
- #locales: string[] = []
28
- #projectRoot: string = ''
29
-
30
- #server: ViteDevServer
31
-
32
- #adapters: {[key: string]: AdapterHandler} = {}
33
- #adaptersByLoaderPath: {[loader: string]: AdapterHandler} = {}
34
- #adaptersByCatalogPath: {[path: string]: AdapterHandler} = {}
35
-
36
- #log: Logger
37
-
38
- #configPath: string
39
-
40
- constructor(configPath: string) {
41
- this.#configPath = configPath
42
- }
43
-
44
- #init = async (mode: Mode) => {
45
- this.#config = await getConfig(this.#configPath)
46
- this.#locales = [this.#config.sourceLocale, ...this.#config.otherLocales]
47
- this.#log = new Logger(this.#config.messages)
48
- if (Object.keys(this.#config.adapters).length === 0) {
49
- throw Error('At least one adapter is needed.')
50
- }
51
- for (const [key, adapter] of Object.entries(this.#config.adapters)) {
52
- const handler = new AdapterHandler(
53
- adapter,
54
- key,
55
- this.#config,
56
- mode,
57
- virtualPrefix,
58
- this.#projectRoot,
59
- this.#log,
60
- )
61
- await handler.init()
62
- this.#adapters[key] = handler
63
- this.#adaptersByLoaderPath[resolve(handler.loaderPath)] = handler
64
- for (const fname of Object.keys(handler.catalogPathsToLocales)) {
65
- this.#adaptersByCatalogPath[fname] = handler
66
- }
67
- }
68
- }
69
-
70
- configResolved = async (config: { env: { DEV?: boolean }, root: string }) => {
71
- let mode: Mode
72
- if (config.env.DEV) {
73
- mode = 'dev'
74
- } else {
75
- mode = 'prod'
76
- }
77
- this.#projectRoot = config.root
78
- await this.#init(mode)
79
- }
80
-
81
- configureServer = (server: ViteDevServer) => {
82
- this.#server = server
83
- // initial load
84
- for (const [key, adapter] of Object.entries(this.#adapters)) {
85
- for (const loc of this.#locales) {
86
- const event = adapter.virtModEvent(loc, null)
87
- server.ws.on(event, (payload, client) => {
88
- const eventSend = adapter.virtModEvent(loc, payload.loadID)
89
- if (!this.#config.adapters[key].granularLoad) {
90
- client.send(eventSend, adapter.compiled[loc].items)
91
- return
92
- }
93
- const compiled = adapter.granularStateByID[payload.loadID].compiled[loc]
94
- client.send(eventSend, compiled.items)
95
- })
96
- }
97
- }
98
- }
99
-
100
- #sendUpdateToClient = (adapter: AdapterHandler, locales: string[]) => {
101
- if (!this.#server) {
102
- // maybe not in dev mode
103
- return
104
- }
105
- for (const loc of locales) {
106
- if (!this.#config.adapters[adapter.key].granularLoad) {
107
- this.#server.ws.send(adapter.virtModEvent(loc, null), adapter.compiled[loc].items)
108
- return
109
- }
110
- for (const [loadID, state] of Object.entries(adapter.granularStateByID)) {
111
- const eventName = adapter.virtModEvent(loc, loadID)
112
- this.#server.ws.send(eventName, state.compiled[loc].items)
113
- }
114
- }
115
- }
116
-
117
- handleHotUpdate = async (ctx: {file: string}) => {
118
- if (!(ctx.file in this.#adaptersByCatalogPath)) {
119
- return
120
- }
121
- const adapter = this.#adaptersByCatalogPath[ctx.file]
122
- const loc = adapter.catalogPathsToLocales[ctx.file]
123
- await adapter.loadCatalogNCompile(loc)
124
- this.#sendUpdateToClient(adapter, [loc])
125
- }
126
-
127
- resolveId = (source: string, importer?: string) => {
128
- if (!source.startsWith(virtualPrefix)) {
129
- return null
130
- }
131
- return `${virtualResolvedPrefix}${source}?${importer}`
132
- }
133
-
134
- load = (id: string) => {
135
- const prefix = virtualResolvedPrefix + virtualPrefix
136
- if (!id.startsWith(prefix)) {
137
- return null
138
- }
139
- const [path, importer] = id.slice(prefix.length).split('?')
140
- const [part, ...rest] = path.split('/')
141
- if (part === 'catalog') {
142
- const [adapterKey, loadID, locale] = rest
143
- const adapter = this.#adapters[adapterKey]
144
- if (adapter == null) {
145
- this.#log.error(`Adapter not found for key: ${adapterKey}`)
146
- return null
147
- }
148
- return adapter.loadDataModule(locale, loadID)
149
- }
150
- if (part === 'locales') {
151
- return `export const locales = ['${this.#locales.join("', '")}']`
152
- }
153
- if (part !== 'proxy') {
154
- this.#log.error(`Unknown virtual request: ${id}`)
155
- return null
156
- }
157
- // loader proxy
158
- const adapter = this.#adaptersByLoaderPath[importer]
159
- if (adapter == null) {
160
- this.#log.error(`Adapter not found for filename: ${importer}`)
161
- return
162
- }
163
- if (rest[0] === 'sync') {
164
- return adapter.getProxySync()
165
- }
166
- return adapter.getProxy()
167
- }
168
-
169
- #transformHandler = async (code: string, id: string) => {
170
- if (!this.#config.hmr) {
171
- return {}
172
- }
173
- const filename = relative(this.#projectRoot, id)
174
- for (const adapter of Object.values(this.#adapters)) {
175
- if (adapter.fileMatches(filename)) {
176
- const {catalogChanged, ...output} = await adapter.transform(code, filename)
177
- if (catalogChanged) {
178
- this.#sendUpdateToClient(adapter, this.#locales)
179
- }
180
- return output
181
- }
182
- }
183
- return {}
184
- }
185
-
186
- transform = { order: <'pre'>'pre', handler: this.#transformHandler }
187
- }
188
-
189
- export const wuchale = (configPath?: string) => new Plugin(configPath)