@inlang/paraglide-js 2.0.0-beta.15 → 2.0.0-beta.17
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/bundler-plugins/unplugin.d.ts.map +1 -1
- package/dist/bundler-plugins/unplugin.js +10 -3
- package/dist/cli/steps/run-compiler.js +1 -1
- package/dist/compiler/compile-bundle.d.ts.map +1 -1
- package/dist/compiler/compile-bundle.js +9 -4
- package/dist/compiler/compile-bundle.test.js +11 -0
- package/dist/compiler/compile-message.d.ts +0 -3
- package/dist/compiler/compile-message.d.ts.map +1 -1
- package/dist/compiler/compile-message.js +14 -9
- package/dist/compiler/compile-message.test.js +25 -3
- package/dist/compiler/compile-project.d.ts.map +1 -1
- package/dist/compiler/compile-project.js +0 -3
- package/dist/compiler/compile-project.test.js +59 -66
- package/dist/compiler/compile.d.ts +41 -2
- package/dist/compiler/compile.d.ts.map +1 -1
- package/dist/compiler/compile.js +12 -4
- package/dist/compiler/compile.test.js +29 -7
- package/dist/compiler/jsdoc-types.d.ts +9 -3
- package/dist/compiler/jsdoc-types.d.ts.map +1 -1
- package/dist/compiler/jsdoc-types.js +15 -11
- package/dist/compiler/output-structure/locale-modules.d.ts.map +1 -1
- package/dist/compiler/output-structure/locale-modules.js +5 -8
- package/dist/compiler/runtime/assert-is-locale.js +1 -1
- package/dist/compiler/runtime/create-runtime.d.ts +3 -4
- package/dist/compiler/runtime/create-runtime.d.ts.map +1 -1
- package/dist/compiler/runtime/create-runtime.js +28 -11
- package/dist/compiler/runtime/de-localize-path.d.ts +2 -2
- package/dist/compiler/runtime/de-localize-path.d.ts.map +1 -1
- package/dist/compiler/runtime/de-localize-path.js +25 -6
- package/dist/compiler/runtime/de-localize-path.test.js +83 -21
- package/dist/compiler/runtime/de-localized-path.d.ts +27 -0
- package/dist/compiler/runtime/de-localized-path.d.ts.map +1 -0
- package/dist/compiler/runtime/de-localized-path.js +32 -0
- package/dist/compiler/runtime/de-localized-path.test.d.ts +2 -0
- package/dist/compiler/runtime/de-localized-path.test.d.ts.map +1 -0
- package/dist/compiler/runtime/de-localized-path.test.js +48 -0
- package/dist/compiler/runtime/detect-locale-from-request.d.ts +22 -0
- package/dist/compiler/runtime/detect-locale-from-request.d.ts.map +1 -0
- package/dist/compiler/runtime/detect-locale-from-request.js +44 -0
- package/dist/compiler/runtime/e2e.test.d.ts +2 -0
- package/dist/compiler/runtime/e2e.test.d.ts.map +1 -0
- package/dist/compiler/runtime/e2e.test.js +33 -0
- package/dist/compiler/runtime/extract-locale-from-cookie.js +1 -1
- package/dist/compiler/runtime/extract-locale-from-pathname.d.ts.map +1 -1
- package/dist/compiler/runtime/extract-locale-from-pathname.js +19 -3
- package/dist/compiler/runtime/extract-locale-from-pathname.test.js +83 -0
- package/dist/compiler/runtime/extract-locale-from-request.d.ts.map +1 -1
- package/dist/compiler/runtime/extract-locale-from-request.js +2 -4
- package/dist/compiler/runtime/extract-locale-from-request.test.js +5 -0
- package/dist/compiler/runtime/get-locale-from-path.d.ts +13 -0
- package/dist/compiler/runtime/get-locale-from-path.d.ts.map +1 -0
- package/dist/compiler/runtime/get-locale-from-path.js +17 -0
- package/dist/compiler/runtime/get-locale-from-path.test.d.ts +2 -0
- package/dist/compiler/runtime/get-locale-from-path.test.d.ts.map +1 -0
- package/dist/compiler/runtime/get-locale-from-path.test.js +22 -0
- package/dist/compiler/runtime/get-locale.d.ts.map +1 -1
- package/dist/compiler/runtime/get-locale.js +7 -5
- package/dist/compiler/runtime/get-locale.test.js +2 -2
- package/dist/compiler/runtime/is-locale.js +1 -1
- package/dist/compiler/runtime/jsdoc-runtime.d.ts +2 -0
- package/dist/compiler/runtime/jsdoc-runtime.d.ts.map +1 -0
- package/dist/compiler/runtime/jsdoc-runtime.js +131 -0
- package/dist/compiler/runtime/locale-in-path.d.ts +13 -0
- package/dist/compiler/runtime/locale-in-path.d.ts.map +1 -0
- package/dist/compiler/runtime/locale-in-path.js +17 -0
- package/dist/compiler/runtime/locale-in-path.test.d.ts +2 -0
- package/dist/compiler/runtime/locale-in-path.test.d.ts.map +1 -0
- package/dist/compiler/runtime/locale-in-path.test.js +22 -0
- package/dist/compiler/runtime/localize-path.d.ts +2 -2
- package/dist/compiler/runtime/localize-path.d.ts.map +1 -1
- package/dist/compiler/runtime/localize-path.js +61 -13
- package/dist/compiler/runtime/localize-path.test.js +192 -20
- package/dist/compiler/runtime/localized-path.d.ts +32 -0
- package/dist/compiler/runtime/localized-path.d.ts.map +1 -0
- package/dist/compiler/runtime/localized-path.js +44 -0
- package/dist/compiler/runtime/localized-path.test.d.ts +2 -0
- package/dist/compiler/runtime/localized-path.test.d.ts.map +1 -0
- package/dist/compiler/runtime/localized-path.test.js +42 -0
- package/dist/compiler/runtime/mock-runtime.d.ts +6 -0
- package/dist/compiler/runtime/mock-runtime.d.ts.map +1 -0
- package/dist/compiler/runtime/mock-runtime.js +31 -0
- package/dist/compiler/runtime/path-to-regexp.d.ts +2 -0
- package/dist/compiler/runtime/path-to-regexp.d.ts.map +1 -0
- package/dist/compiler/runtime/path-to-regexp.js +1 -0
- package/dist/compiler/runtime/pathname-pattern.d.ts +30 -0
- package/dist/compiler/runtime/pathname-pattern.d.ts.map +1 -0
- package/dist/compiler/runtime/pathname-pattern.js +99 -0
- package/dist/compiler/runtime/pathname-pattern.test.d.ts +2 -0
- package/dist/compiler/runtime/pathname-pattern.test.d.ts.map +1 -0
- package/dist/compiler/runtime/pathname-pattern.test.js +103 -0
- package/dist/compiler/runtime/set-locale.d.ts.map +1 -1
- package/dist/compiler/runtime/set-locale.js +5 -5
- package/dist/compiler/runtime/set-locale.test.js +1 -1
- package/dist/compiler/runtime/ts-runtime.d.ts +2 -0
- package/dist/compiler/runtime/ts-runtime.d.ts.map +1 -0
- package/dist/compiler/runtime/ts-runtime.js +119 -0
- package/dist/compiler/runtime/type.d.ts +2 -2
- package/dist/compiler/runtime/type.d.ts.map +1 -1
- package/dist/compiler/runtime/type.test.js +48 -11
- package/dist/compiler/runtime/variables.d.ts +46 -0
- package/dist/compiler/runtime/variables.d.ts.map +1 -0
- package/dist/compiler/runtime/variables.js +45 -0
- package/dist/compiler/strategy.d.ts +13 -0
- package/dist/compiler/strategy.d.ts.map +1 -0
- package/dist/compiler/strategy.js +12 -0
- package/dist/compiler/strategy.test.d.ts +2 -0
- package/dist/compiler/strategy.test.d.ts.map +1 -0
- package/dist/compiler/strategy.test.js +9 -0
- package/dist/path-to-regexp/index.d.ts +12 -0
- package/dist/path-to-regexp/index.d.ts.map +1 -0
- package/dist/path-to-regexp/index.js +11 -0
- package/dist/services/env-variables/index.js +1 -1
- package/dist/services/file-handling/write-output.d.ts +6 -1
- package/dist/services/file-handling/write-output.d.ts.map +1 -1
- package/dist/services/file-handling/write-output.js +33 -19
- package/dist/services/file-handling/write-output.test.js +60 -11
- package/dist/urlpattern-polyfill/index.d.ts +2 -0
- package/dist/urlpattern-polyfill/index.d.ts.map +1 -0
- package/dist/urlpattern-polyfill/index.js +1 -0
- package/package.json +12 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unplugin.d.ts","sourceRoot":"","sources":["../../src/bundler-plugins/unplugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAW,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"unplugin.d.ts","sourceRoot":"","sources":["../../src/bundler-plugins/unplugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAW,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAYvE,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,eAAe,CAwC3D,CAAC"}
|
|
@@ -2,15 +2,20 @@ import { compile } from "../compiler/compile.js";
|
|
|
2
2
|
import fs from "node:fs";
|
|
3
3
|
import { resolve } from "node:path";
|
|
4
4
|
import { nodeNormalizePath } from "../utilities/node-normalize-path.js";
|
|
5
|
+
import { Logger } from "../cli/index.js";
|
|
5
6
|
const PLUGIN_NAME = "unplugin-paraglide-js";
|
|
7
|
+
const logger = new Logger();
|
|
8
|
+
let compilationResult;
|
|
6
9
|
export const unpluginFactory = (args) => ({
|
|
7
10
|
name: PLUGIN_NAME,
|
|
8
11
|
enforce: "pre",
|
|
9
12
|
async buildStart() {
|
|
10
|
-
|
|
13
|
+
logger.info("Compiling inlang project...");
|
|
14
|
+
compilationResult = await compile({
|
|
11
15
|
fs: wrappedFs,
|
|
12
16
|
...args,
|
|
13
17
|
});
|
|
18
|
+
logger.success("Compilation complete");
|
|
14
19
|
for (const path of Array.from(readFiles)) {
|
|
15
20
|
this.addWatchFile(path);
|
|
16
21
|
}
|
|
@@ -19,10 +24,12 @@ export const unpluginFactory = (args) => ({
|
|
|
19
24
|
const shouldCompile = readFiles.has(path) && !path.includes("cache");
|
|
20
25
|
if (shouldCompile) {
|
|
21
26
|
readFiles.clear();
|
|
22
|
-
|
|
27
|
+
logger.info(`Re-compiling inlang project... File "${path}" has changed.`);
|
|
28
|
+
compilationResult = await compile({
|
|
23
29
|
fs: wrappedFs,
|
|
24
30
|
...args,
|
|
25
|
-
});
|
|
31
|
+
}, compilationResult?.outputHashes);
|
|
32
|
+
logger.success("Compilation complete");
|
|
26
33
|
}
|
|
27
34
|
},
|
|
28
35
|
webpack(compiler) {
|
|
@@ -8,6 +8,6 @@ export const runCompiler = async (ctx) => {
|
|
|
8
8
|
const output = await compileProject({
|
|
9
9
|
project: ctx.project,
|
|
10
10
|
});
|
|
11
|
-
await writeOutput(absoluteOutdir, output, ctx.fs);
|
|
11
|
+
await writeOutput({ directory: absoluteOutdir, output, fs: ctx.fs });
|
|
12
12
|
return { ...ctx };
|
|
13
13
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile-bundle.d.ts","sourceRoot":"","sources":["../../src/compiler/compile-bundle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"compile-bundle.d.ts","sourceRoot":"","sources":["../../src/compiler/compile-bundle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,MAAM,MAAM,0BAA0B,GAAG;IACxC,kDAAkD;IAClD,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,gDAAgD;IAChD,QAAQ,EAAE;QACT,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;KACpC,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,SAAU;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAChD,QAAQ,EAAE,QAAQ,CAAC;CACnB,KAAG,0BAoCH,CAAC"}
|
|
@@ -2,20 +2,25 @@ import { compileMessage } from "./compile-message.js";
|
|
|
2
2
|
import { jsIdentifier } from "../services/codegen/identifier.js";
|
|
3
3
|
import { isValidJSIdentifier } from "../services/valid-js-identifier/index.js";
|
|
4
4
|
import { escapeForDoubleQuoteString } from "../services/codegen/escape.js";
|
|
5
|
-
import { jsDocBundleFunctionTypes
|
|
5
|
+
import { jsDocBundleFunctionTypes } from "./jsdoc-types.js";
|
|
6
|
+
import { KEYWORDS } from "../services/valid-js-identifier/reserved-words.js";
|
|
6
7
|
/**
|
|
7
8
|
* Compiles all the messages in the bundle and returns an index-function + each compiled message
|
|
8
9
|
*/
|
|
9
10
|
export const compileBundle = (args) => {
|
|
10
11
|
const compiledMessages = {};
|
|
12
|
+
if (KEYWORDS.includes(args.bundle.id) || args.bundle.id === "then") {
|
|
13
|
+
throw new Error([
|
|
14
|
+
`You are using a reserved JS keyword as id "${args.bundle.id}".`,
|
|
15
|
+
"Rename the message bundle id to something else.",
|
|
16
|
+
"See https://github.com/opral/inlang-paraglide-js/issues/331",
|
|
17
|
+
].join("\n"));
|
|
18
|
+
}
|
|
11
19
|
for (const message of args.bundle.messages) {
|
|
12
20
|
if (compiledMessages[message.locale]) {
|
|
13
21
|
throw new Error(`Duplicate locale: ${message.locale}`);
|
|
14
22
|
}
|
|
15
23
|
const compiledMessage = compileMessage(args.bundle.declarations, message, message.variants, args.registry);
|
|
16
|
-
// add types to the compiled message function
|
|
17
|
-
const inputs = args.bundle.declarations.filter((decl) => decl.type === "input-variable");
|
|
18
|
-
compiledMessage.code = `${jsDocMessageFunctionTypes({ inputs })}\n${compiledMessage.code}`;
|
|
19
24
|
// set the pattern for the language tag
|
|
20
25
|
compiledMessages[message.locale] = compiledMessage;
|
|
21
26
|
}
|
|
@@ -57,3 +57,14 @@ const mockBundle = {
|
|
|
57
57
|
},
|
|
58
58
|
],
|
|
59
59
|
};
|
|
60
|
+
test("throws if a JS keyword is used as an identifier", async () => {
|
|
61
|
+
expect(() => compileBundle({
|
|
62
|
+
fallbackMap: {},
|
|
63
|
+
registry: {},
|
|
64
|
+
bundle: {
|
|
65
|
+
id: "then",
|
|
66
|
+
declarations: [],
|
|
67
|
+
messages: [],
|
|
68
|
+
},
|
|
69
|
+
})).toThrow();
|
|
70
|
+
});
|
|
@@ -4,9 +4,6 @@ import type { Compiled } from "./types.js";
|
|
|
4
4
|
/**
|
|
5
5
|
* Returns the compiled message as a string
|
|
6
6
|
*
|
|
7
|
-
* @example
|
|
8
|
-
* @param message The message to compile
|
|
9
|
-
* @returns (inputs) => string
|
|
10
7
|
*/
|
|
11
8
|
export declare const compileMessage: (declarations: Declaration[], message: Message, variants: Variant[], registry: Registry) => Compiled<Message>;
|
|
12
9
|
//# sourceMappingURL=compile-message.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile-message.d.ts","sourceRoot":"","sources":["../../src/compiler/compile-message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"compile-message.d.ts","sourceRoot":"","sources":["../../src/compiler/compile-message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C;;;GAGG;AACH,eAAO,MAAM,cAAc,iBACZ,WAAW,EAAE,WAClB,OAAO,YACN,OAAO,EAAE,YACT,QAAQ,KAChB,QAAQ,CAAC,OAAO,CAelB,CAAC"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { compilePattern } from "./compile-pattern.js";
|
|
2
2
|
import { doubleQuote } from "../services/codegen/quotes.js";
|
|
3
|
+
import { inputsType } from "./jsdoc-types.js";
|
|
3
4
|
/**
|
|
4
5
|
* Returns the compiled message as a string
|
|
5
6
|
*
|
|
6
|
-
* @example
|
|
7
|
-
* @param message The message to compile
|
|
8
|
-
* @returns (inputs) => string
|
|
9
7
|
*/
|
|
10
8
|
export const compileMessage = (declarations, message, variants, registry) => {
|
|
11
9
|
// return empty string instead?
|
|
@@ -15,20 +13,26 @@ export const compileMessage = (declarations, message, variants, registry) => {
|
|
|
15
13
|
const hasMultipleVariants = variants.length > 1;
|
|
16
14
|
return hasMultipleVariants
|
|
17
15
|
? compileMessageWithMultipleVariants(declarations, message, variants, registry)
|
|
18
|
-
: compileMessageWithOneVariant(message, variants, registry);
|
|
16
|
+
: compileMessageWithOneVariant(declarations, message, variants, registry);
|
|
19
17
|
};
|
|
20
|
-
function compileMessageWithOneVariant(message, variants, registry) {
|
|
18
|
+
function compileMessageWithOneVariant(declarations, message, variants, registry) {
|
|
21
19
|
const variant = variants[0];
|
|
22
20
|
if (!variant || variants.length !== 1) {
|
|
23
21
|
throw new Error("Message must have exactly one variant");
|
|
24
22
|
}
|
|
23
|
+
const inputs = declarations.filter((decl) => decl.type === "input-variable");
|
|
24
|
+
const hasInputs = inputs.length > 0;
|
|
25
25
|
const compiledPattern = compilePattern(message.locale, variant.pattern, registry);
|
|
26
|
-
const code =
|
|
26
|
+
const code = `/** @type {(inputs: ${inputsType(inputs)}) => string} */
|
|
27
|
+
export const ${message.bundleId} = (${hasInputs ? "i" : ""}) => ${compiledPattern.code};`;
|
|
27
28
|
return { code, node: message };
|
|
28
29
|
}
|
|
29
30
|
function compileMessageWithMultipleVariants(declarations, message, variants, registry) {
|
|
30
|
-
if (variants.length <= 1)
|
|
31
|
+
if (variants.length <= 1) {
|
|
31
32
|
throw new Error("Message must have more than one variant");
|
|
33
|
+
}
|
|
34
|
+
const inputs = declarations.filter((decl) => decl.type === "input-variable");
|
|
35
|
+
const hasInputs = inputs.length > 0;
|
|
32
36
|
// TODO make sure that matchers use keys instead of indexes
|
|
33
37
|
const compiledVariants = [];
|
|
34
38
|
for (const variant of variants) {
|
|
@@ -56,8 +60,9 @@ function compileMessageWithMultipleVariants(declarations, message, variants, reg
|
|
|
56
60
|
continue;
|
|
57
61
|
compiledVariants.push(`if (${conditions.join(" && ")}) return ${compiledPattern.code};`);
|
|
58
62
|
}
|
|
59
|
-
const code =
|
|
63
|
+
const code = `/** @type {(inputs: ${inputsType(inputs)}) => string} */
|
|
64
|
+
export const ${message.bundleId} = (${hasInputs ? "i" : ""}) => {
|
|
60
65
|
${compiledVariants.join("\n\t")}
|
|
61
|
-
}
|
|
66
|
+
};`;
|
|
62
67
|
return { code, node: message };
|
|
63
68
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { test, expect } from "vitest";
|
|
2
2
|
import { compileMessage } from "./compile-message.js";
|
|
3
3
|
import { DEFAULT_REGISTRY } from "./registry.js";
|
|
4
|
-
|
|
4
|
+
test("compiles a message with a single variant", async () => {
|
|
5
5
|
const declarations = [];
|
|
6
6
|
const message = {
|
|
7
7
|
locale: "en",
|
|
@@ -21,7 +21,7 @@ it("compiles a message with a single variant", async () => {
|
|
|
21
21
|
const { some_message } = await import("data:text/javascript;base64," + btoa(compiled.code));
|
|
22
22
|
expect(some_message()).toBe("Hello");
|
|
23
23
|
});
|
|
24
|
-
|
|
24
|
+
test("compiles a message with variants", async () => {
|
|
25
25
|
const declarations = [
|
|
26
26
|
{ type: "input-variable", name: "fistInput" },
|
|
27
27
|
{ type: "input-variable", name: "secondInput" },
|
|
@@ -72,3 +72,25 @@ it("compiles a message with variants", async () => {
|
|
|
72
72
|
expect(some_message({ fistInput: 3, secondInput: 4 })).toBe("Catch all");
|
|
73
73
|
expect(some_message({ fistInput: 1, secondInput: 5 })).toBe("Catch all");
|
|
74
74
|
});
|
|
75
|
+
test("only emits input arguments when inputs exist", async () => {
|
|
76
|
+
const declarations = [];
|
|
77
|
+
const message = {
|
|
78
|
+
locale: "en",
|
|
79
|
+
bundleId: "some_message",
|
|
80
|
+
id: "message-id",
|
|
81
|
+
selectors: [],
|
|
82
|
+
};
|
|
83
|
+
const variants = [
|
|
84
|
+
{
|
|
85
|
+
id: "1",
|
|
86
|
+
messageId: "message-id",
|
|
87
|
+
matches: [],
|
|
88
|
+
pattern: [{ type: "text", value: "Hello" }],
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
const compiled = compileMessage(declarations, message, variants, DEFAULT_REGISTRY);
|
|
92
|
+
expect(compiled.code, "single variant").toBe([
|
|
93
|
+
"/** @type {(inputs: {}) => string} */",
|
|
94
|
+
"export const some_message = () => `Hello`;",
|
|
95
|
+
].join("\n"));
|
|
96
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile-project.d.ts","sourceRoot":"","sources":["../../src/compiler/compile-project.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAIrE,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAE5E;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,SAAgB;IAC1C,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;CACrE,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"compile-project.d.ts","sourceRoot":"","sources":["../../src/compiler/compile-project.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAIrE,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAE5E;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,SAAgB;IAC1C,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;CACrE,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiEjC,CAAC;AAEF,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAC9C,OAAO,EAAE,CAAC,EAAE,EACZ,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,GACpB,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAY1B"}
|
|
@@ -49,9 +49,6 @@ export const compileProject = async (args) => {
|
|
|
49
49
|
output[filename] = content;
|
|
50
50
|
}
|
|
51
51
|
for (const [filename, content] of Object.entries(output)) {
|
|
52
|
-
if (filename.endsWith(".js") || filename.endsWith(".ts")) {
|
|
53
|
-
output[filename] = `// @ts-nocheck\n${output[filename]}`;
|
|
54
|
-
}
|
|
55
52
|
if (optionsWithDefaults.includeEslintDisableComment) {
|
|
56
53
|
if (filename.endsWith(".js")) {
|
|
57
54
|
output[filename] = `// eslint-disable\n${content}`;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { expect, test, describe, vi, beforeEach } from "vitest";
|
|
2
|
-
import { createProject as typescriptProject, ts } from "@ts-morph/bootstrap";
|
|
2
|
+
import { createProject as typescriptProject, ts, } from "@ts-morph/bootstrap";
|
|
3
3
|
import { Declaration, insertBundleNested, loadProjectInMemory, newProject, Pattern, VariableReference, } from "@inlang/sdk";
|
|
4
4
|
import { compileProject } from "./compile-project.js";
|
|
5
5
|
import virtual from "@rollup/plugin-virtual";
|
|
@@ -63,15 +63,47 @@ test("emitPrettierIgnore", async () => {
|
|
|
63
63
|
expect(_true).toHaveProperty(".prettierignore");
|
|
64
64
|
expect(_false).not.toHaveProperty(".prettierignore");
|
|
65
65
|
});
|
|
66
|
+
// https://github.com/opral/inlang-paraglide-js/issues/347
|
|
67
|
+
test("can emit message bundles with more than 255 characters", async () => {
|
|
68
|
+
const project = await loadProjectInMemory({
|
|
69
|
+
blob: await newProject({
|
|
70
|
+
settings: {
|
|
71
|
+
baseLocale: "en",
|
|
72
|
+
locales: ["en", "de"],
|
|
73
|
+
},
|
|
74
|
+
}),
|
|
75
|
+
});
|
|
76
|
+
await insertBundleNested(project.db, createBundleNested({
|
|
77
|
+
// 300 characters long id
|
|
78
|
+
id: "a".repeat(300),
|
|
79
|
+
messages: [
|
|
80
|
+
{
|
|
81
|
+
locale: "en",
|
|
82
|
+
variants: [
|
|
83
|
+
{
|
|
84
|
+
pattern: [{ type: "text", value: "Hello" }],
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
}));
|
|
90
|
+
const output = await compileProject({
|
|
91
|
+
project,
|
|
92
|
+
});
|
|
93
|
+
const code = await bundleCode(output, `export * as m from "./paraglide/messages.js"
|
|
94
|
+
export * as runtime from "./paraglide/runtime.js"`);
|
|
95
|
+
const { m } = await importCode(code);
|
|
96
|
+
expect(m["a".repeat(300)]()).toBe("Hello");
|
|
97
|
+
});
|
|
66
98
|
describe.each([
|
|
67
99
|
// useTsImports must be true to test emitTs. Otherwise, rolldown can't resolve the imports
|
|
68
100
|
{
|
|
69
101
|
outputStructure: "locale-modules",
|
|
70
|
-
strategy: ["
|
|
102
|
+
strategy: ["globalVariable", "baseLocale"],
|
|
71
103
|
},
|
|
72
104
|
{
|
|
73
105
|
outputStructure: "message-modules",
|
|
74
|
-
strategy: ["
|
|
106
|
+
strategy: ["globalVariable", "baseLocale"],
|
|
75
107
|
},
|
|
76
108
|
])("options", async (compilerOptions) => {
|
|
77
109
|
const output = await compileProject({ project, compilerOptions });
|
|
@@ -79,7 +111,7 @@ describe.each([
|
|
|
79
111
|
test("should tree-shake unused messages", async () => {
|
|
80
112
|
const code = await bundleCode(output, `import * as m from "./paraglide/messages.js"
|
|
81
113
|
|
|
82
|
-
|
|
114
|
+
console.log(m.sad_penguin_bundle())`);
|
|
83
115
|
const log = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
84
116
|
// all required code for the message to be rendered is included like sourceLanguageTag.
|
|
85
117
|
// but, all other messages except of 'sad_penguin_bundle' are tree-shaken away.
|
|
@@ -275,70 +307,27 @@ describe.each([
|
|
|
275
307
|
expect(m.missing_in_en_US()).toBe("Fallback message.");
|
|
276
308
|
});
|
|
277
309
|
});
|
|
278
|
-
//
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
project.createSourceFile("test.ts", `
|
|
298
|
-
import * as runtime from "./runtime.js"
|
|
299
|
-
|
|
300
|
-
// --------- RUNTIME ---------
|
|
301
|
-
|
|
302
|
-
// getLocale() should return type should be a union of language tags, not a generic string
|
|
303
|
-
runtime.getLocale() satisfies "de" | "en" | "en-US"
|
|
304
|
-
|
|
305
|
-
// locales should have a narrow type, not a generic string
|
|
306
|
-
runtime.locales satisfies Readonly<Array<"de" | "en" | "en-US">>
|
|
307
|
-
|
|
308
|
-
// setLocale() should fail if the given language tag is not included in locales
|
|
309
|
-
// @ts-expect-error - invalid locale
|
|
310
|
-
runtime.setLocale("fr")
|
|
311
|
-
|
|
312
|
-
// setLocale() should not fail if the given language tag is included in locales
|
|
313
|
-
runtime.setLocale("de")
|
|
314
|
-
|
|
315
|
-
// isLocale should narrow the type of it's argument
|
|
316
|
-
const thing = 5;
|
|
317
|
-
if(runtime.isLocale(thing)) {
|
|
318
|
-
const a : "de" | "en" | "en-US" = thing
|
|
319
|
-
} else {
|
|
320
|
-
// @ts-expect-error - thing is not a language tag
|
|
321
|
-
const a : "de" | "en" | "en-US" = thing
|
|
322
|
-
}
|
|
323
|
-
`);
|
|
324
|
-
const program = project.createProgram();
|
|
325
|
-
const diagnostics = ts.getPreEmitDiagnostics(program);
|
|
326
|
-
for (const diagnostic of diagnostics) {
|
|
327
|
-
console.error(diagnostic.messageText, diagnostic.file?.fileName);
|
|
328
|
-
}
|
|
329
|
-
expect(diagnostics.length).toEqual(0);
|
|
330
|
-
});
|
|
310
|
+
// whatever the strictest users use, this is the ultimate nothing gets stricter than this
|
|
311
|
+
// (to avoid developers opening issues "i get a ts warning in my code")
|
|
312
|
+
const superStrictRuleOutAnyErrorTsSettings = {
|
|
313
|
+
outDir: "dist",
|
|
314
|
+
declaration: true,
|
|
315
|
+
allowJs: true,
|
|
316
|
+
checkJs: true,
|
|
317
|
+
noImplicitAny: true,
|
|
318
|
+
noUnusedLocals: true,
|
|
319
|
+
noUnusedParameters: true,
|
|
320
|
+
noImplicitReturns: true,
|
|
321
|
+
noImplicitThis: true,
|
|
322
|
+
noUncheckedIndexedAccess: true,
|
|
323
|
+
noPropertyAccessFromIndexSignature: true,
|
|
324
|
+
module: ts.ModuleKind.Node16,
|
|
325
|
+
strict: true,
|
|
326
|
+
};
|
|
331
327
|
test("./messages.js types", async () => {
|
|
332
328
|
const project = await typescriptProject({
|
|
333
329
|
useInMemoryFileSystem: true,
|
|
334
|
-
compilerOptions:
|
|
335
|
-
outDir: "dist",
|
|
336
|
-
declaration: true,
|
|
337
|
-
allowJs: true,
|
|
338
|
-
checkJs: true,
|
|
339
|
-
module: ts.ModuleKind.Node16,
|
|
340
|
-
strict: true,
|
|
341
|
-
},
|
|
330
|
+
compilerOptions: superStrictRuleOutAnyErrorTsSettings,
|
|
342
331
|
});
|
|
343
332
|
for (const [fileName, code] of Object.entries(output)) {
|
|
344
333
|
if (fileName.endsWith(".js") || fileName.endsWith(".ts")) {
|
|
@@ -374,7 +363,10 @@ describe.each([
|
|
|
374
363
|
m.sad_penguin_bundle({}, { locale: "---" })
|
|
375
364
|
`);
|
|
376
365
|
const program = project.createProgram();
|
|
377
|
-
const diagnostics = ts
|
|
366
|
+
const diagnostics = ts
|
|
367
|
+
.getPreEmitDiagnostics(program)
|
|
368
|
+
// runtime type here makes issues because of the path-to-regexp import
|
|
369
|
+
.filter((d) => !d.file?.fileName.includes("runtime.js"));
|
|
378
370
|
for (const diagnostic of diagnostics) {
|
|
379
371
|
console.error(diagnostic.messageText, diagnostic.file?.fileName);
|
|
380
372
|
}
|
|
@@ -382,6 +374,7 @@ describe.each([
|
|
|
382
374
|
});
|
|
383
375
|
});
|
|
384
376
|
async function bundleCode(output, file) {
|
|
377
|
+
output["runtime.js"] = output["runtime.js"].replace('import * as pathToRegexp from "@inlang/paraglide-js/path-to-regexp";', "/** @type {any} */const pathToRegexp = {};");
|
|
385
378
|
const bundle = await rolldown({
|
|
386
379
|
input: ["main.js"],
|
|
387
380
|
plugins: [
|
|
@@ -4,7 +4,8 @@ export declare const defaultCompilerOptions: {
|
|
|
4
4
|
readonly emitGitIgnore: true;
|
|
5
5
|
readonly includeEslintDisableComment: true;
|
|
6
6
|
readonly emitPrettierIgnore: true;
|
|
7
|
-
readonly
|
|
7
|
+
readonly pathnameBase: undefined;
|
|
8
|
+
readonly strategy: ["cookie", "globalVariable", "baseLocale"];
|
|
8
9
|
readonly cookieName: "PARAGLIDE_LOCALE";
|
|
9
10
|
};
|
|
10
11
|
export type CompilerOptions = {
|
|
@@ -59,6 +60,42 @@ export type CompilerOptions = {
|
|
|
59
60
|
* @default true
|
|
60
61
|
*/
|
|
61
62
|
emitPrettierIgnore?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* The localized pathname patterns.
|
|
65
|
+
*
|
|
66
|
+
* The syntax is based on path-to-regexp v8
|
|
67
|
+
* https://github.com/pillarjs/path-to-regexp.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* pathnames: {
|
|
71
|
+
* "/about": {
|
|
72
|
+
* "en": "/about",
|
|
73
|
+
* "de": "/ueber-uns",
|
|
74
|
+
* },
|
|
75
|
+
* // catch all
|
|
76
|
+
* "/{*path}": {
|
|
77
|
+
* "de": "/de/{*path}",
|
|
78
|
+
* "en": "/{*path}",
|
|
79
|
+
* }
|
|
80
|
+
* }
|
|
81
|
+
*/
|
|
82
|
+
pathnames?: Record<string, Record<string, string>>;
|
|
83
|
+
/**
|
|
84
|
+
* The base path for the pathname strategy.
|
|
85
|
+
*
|
|
86
|
+
* If the pathnameBase is set, `localizePath()` and `deLocalizePath()` will
|
|
87
|
+
* automatically add or remove the base path from the pathname.
|
|
88
|
+
*
|
|
89
|
+
* Don't forget to set your server's or frameworks "base path" to the same value.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* pathnameBase: "/base"
|
|
93
|
+
*
|
|
94
|
+
* localizePath("/about") // -> "/base/about"
|
|
95
|
+
*
|
|
96
|
+
* @default undefined
|
|
97
|
+
*/
|
|
98
|
+
pathnameBase?: string;
|
|
62
99
|
/**
|
|
63
100
|
* Whether to include an eslint-disable comment at the top of each .js file.
|
|
64
101
|
*
|
|
@@ -97,5 +134,7 @@ export type CompilerOptions = {
|
|
|
97
134
|
* outdir: 'path/to/output',
|
|
98
135
|
* })
|
|
99
136
|
*/
|
|
100
|
-
export declare function compile(options: CompilerOptions): Promise<
|
|
137
|
+
export declare function compile(options: CompilerOptions, previousOutputHashes?: Record<string, string>): Promise<{
|
|
138
|
+
outputHashes: Record<string, string> | undefined;
|
|
139
|
+
}>;
|
|
101
140
|
//# sourceMappingURL=compile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compiler/compile.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,eAAO,MAAM,sBAAsB
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compiler/compile.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,eAAO,MAAM,sBAAsB;;;;;;;;CAQU,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG;IAC7B;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD;;;;;;;;;;;;;;OAcG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,eAAe,CAAC,EAAE,gBAAgB,GAAG,iBAAiB,CAAC;IACvD;;;;OAIG;IACH,EAAE,CAAC,EAAE,cAAc,SAAS,CAAC,CAAC;CAC9B,CAAC;AAQF;;;;;;;;;;;;GAYG;AACH,wBAAsB,OAAO,CAC5B,OAAO,EAAE,eAAe,EACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3C,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;CAAE,CAAC,CAwD/D"}
|
package/dist/compiler/compile.js
CHANGED
|
@@ -9,7 +9,8 @@ export const defaultCompilerOptions = {
|
|
|
9
9
|
emitGitIgnore: true,
|
|
10
10
|
includeEslintDisableComment: true,
|
|
11
11
|
emitPrettierIgnore: true,
|
|
12
|
-
|
|
12
|
+
pathnameBase: undefined,
|
|
13
|
+
strategy: ["cookie", "globalVariable", "baseLocale"],
|
|
13
14
|
cookieName: "PARAGLIDE_LOCALE",
|
|
14
15
|
};
|
|
15
16
|
// This is a workaround to prevent multiple compilations from running at the same time.
|
|
@@ -28,7 +29,7 @@ let compilationInProgress = null;
|
|
|
28
29
|
* outdir: 'path/to/output',
|
|
29
30
|
* })
|
|
30
31
|
*/
|
|
31
|
-
export async function compile(options) {
|
|
32
|
+
export async function compile(options, previousOutputHashes) {
|
|
32
33
|
const withDefaultOptions = {
|
|
33
34
|
...defaultCompilerOptions,
|
|
34
35
|
...options,
|
|
@@ -50,7 +51,12 @@ export async function compile(options) {
|
|
|
50
51
|
compilerOptions: withDefaultOptions,
|
|
51
52
|
project,
|
|
52
53
|
});
|
|
53
|
-
await writeOutput(
|
|
54
|
+
const outputHashes = await writeOutput({
|
|
55
|
+
directory: absoluteOutdir,
|
|
56
|
+
output,
|
|
57
|
+
fs: fs.promises,
|
|
58
|
+
previousOutputHashes,
|
|
59
|
+
});
|
|
54
60
|
if (!localAccount) {
|
|
55
61
|
const activeAccount = await project.lix.db
|
|
56
62
|
.selectFrom("active_account")
|
|
@@ -59,7 +65,9 @@ export async function compile(options) {
|
|
|
59
65
|
saveLocalAccount({ fs, account: activeAccount });
|
|
60
66
|
}
|
|
61
67
|
await project.close();
|
|
68
|
+
return { outputHashes };
|
|
62
69
|
})();
|
|
63
|
-
await compilationInProgress;
|
|
70
|
+
const result = structuredClone(await compilationInProgress);
|
|
64
71
|
compilationInProgress = null;
|
|
72
|
+
return result;
|
|
65
73
|
}
|
|
@@ -79,7 +79,7 @@ test("saves the local account to app data if not exists", async () => {
|
|
|
79
79
|
expect(account).toHaveProperty("id");
|
|
80
80
|
expect(account).toHaveProperty("name");
|
|
81
81
|
});
|
|
82
|
-
test("cleans the output directory", async () => {
|
|
82
|
+
test.skip("cleans the output directory", async () => {
|
|
83
83
|
const fs = memfs().fs;
|
|
84
84
|
const project = await loadProjectInMemory({
|
|
85
85
|
blob: await newProject({}),
|
|
@@ -106,28 +106,50 @@ test("cleans the output directory", async () => {
|
|
|
106
106
|
test("multiple compile calls do not interfere with each other", async () => {
|
|
107
107
|
const fs = memfs().fs;
|
|
108
108
|
const project = await loadProjectInMemory({
|
|
109
|
-
blob: await newProject({
|
|
109
|
+
blob: await newProject({
|
|
110
|
+
settings: {
|
|
111
|
+
baseLocale: "en",
|
|
112
|
+
locales: ["en", "de", "fr"],
|
|
113
|
+
},
|
|
114
|
+
}),
|
|
110
115
|
});
|
|
111
116
|
await saveProjectToDirectory({
|
|
112
117
|
project,
|
|
113
118
|
path: "/project.inlang",
|
|
114
119
|
fs: fs.promises,
|
|
115
120
|
});
|
|
121
|
+
// different project settings to test compile output
|
|
122
|
+
await project.settings.set({
|
|
123
|
+
...(await project.settings.get()),
|
|
124
|
+
baseLocale: "de",
|
|
125
|
+
locales: ["de"],
|
|
126
|
+
});
|
|
127
|
+
await saveProjectToDirectory({
|
|
128
|
+
project,
|
|
129
|
+
path: "/project2.inlang",
|
|
130
|
+
fs: fs.promises,
|
|
131
|
+
});
|
|
116
132
|
const compilations = [
|
|
117
133
|
compile({
|
|
118
134
|
project: "/project.inlang",
|
|
119
|
-
outdir: "/output
|
|
135
|
+
outdir: "/output",
|
|
120
136
|
fs: fs,
|
|
121
137
|
}),
|
|
122
138
|
compile({
|
|
123
|
-
project: "/
|
|
139
|
+
project: "/project2.inlang",
|
|
124
140
|
outdir: "/output",
|
|
125
141
|
fs: fs,
|
|
126
142
|
}),
|
|
127
143
|
];
|
|
128
144
|
await Promise.all(compilations);
|
|
129
|
-
const
|
|
130
|
-
|
|
145
|
+
const runtimeFile = await fs.promises.readFile("/output/runtime.js", "utf8");
|
|
146
|
+
const runtime = (await import("data:text/javascript;base64," +
|
|
147
|
+
Buffer.from(
|
|
148
|
+
// replace the
|
|
149
|
+
runtimeFile.replace(`import * as pathToRegexp from "@inlang/paraglide-js/path-to-regexp";`, ""), "utf-8").toString("base64")));
|
|
150
|
+
// expecting the second compile step to overwrite the first
|
|
151
|
+
expect(runtime.baseLocale).toBe("de");
|
|
152
|
+
expect(runtime.locales).toEqual(["de"]);
|
|
131
153
|
});
|
|
132
154
|
test("emits additional files", async () => {
|
|
133
155
|
const additionalFiles = {
|
|
@@ -199,5 +221,5 @@ test("default compiler options should include variable and baseLocale to ensure
|
|
|
199
221
|
//
|
|
200
222
|
// instead, make the apis work out of the box and once the developer is convinced that
|
|
201
223
|
// paraglide js is the right tool for them, they can then define their own strategy.
|
|
202
|
-
expect(defaultCompilerOptions.strategy).toEqual(expect.arrayContaining(["
|
|
224
|
+
expect(defaultCompilerOptions.strategy).toEqual(expect.arrayContaining(["globalVariable", "baseLocale"]));
|
|
203
225
|
});
|
|
@@ -3,7 +3,13 @@ export declare function jsDocBundleFunctionTypes(args: {
|
|
|
3
3
|
inputs: InputVariable[];
|
|
4
4
|
locales: string[];
|
|
5
5
|
}): string;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Returns the types for the input variables.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const inputs = [{ name: "age" }]
|
|
11
|
+
* inputsType(inputs)
|
|
12
|
+
* >> "{ age: NonNullable<unknown> }"
|
|
13
|
+
*/
|
|
14
|
+
export declare function inputsType(inputs: InputVariable[]): string;
|
|
9
15
|
//# sourceMappingURL=jsdoc-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsdoc-types.d.ts","sourceRoot":"","sources":["../../src/compiler/jsdoc-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC9C,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"jsdoc-types.d.ts","sourceRoot":"","sources":["../../src/compiler/jsdoc-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC9C,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB,GAAG,MAAM,CAOT;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAU1D"}
|