@jigx/sdk-tools 1.1.0-rc → 1.1.0-rc.4
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 +30 -51
- package/dist/auth/cognito-auth.d.ts +26 -0
- package/dist/auth/cognito-auth.d.ts.map +1 -0
- package/dist/auth/cognito-auth.js +150 -0
- package/dist/auth/cognito-auth.js.map +1 -0
- package/dist/auth/cognito-config.d.ts +10 -0
- package/dist/auth/cognito-config.d.ts.map +1 -0
- package/dist/auth/cognito-config.js +17 -0
- package/dist/auth/cognito-config.js.map +1 -0
- package/dist/auth/credentials-store.d.ts +34 -0
- package/dist/auth/credentials-store.d.ts.map +1 -0
- package/dist/auth/credentials-store.js +116 -0
- package/dist/auth/credentials-store.js.map +1 -0
- package/dist/auth/errors.d.ts +23 -0
- package/dist/auth/errors.d.ts.map +1 -0
- package/dist/auth/errors.js +39 -0
- package/dist/auth/errors.js.map +1 -0
- package/dist/auth/identity-client.d.ts +19 -0
- package/dist/auth/identity-client.d.ts.map +1 -0
- package/dist/auth/identity-client.js +70 -0
- package/dist/auth/identity-client.js.map +1 -0
- package/dist/auth/index.d.ts +12 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +7 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/jigx-config-store.d.ts +27 -0
- package/dist/auth/jigx-config-store.d.ts.map +1 -0
- package/dist/auth/jigx-config-store.js +76 -0
- package/dist/auth/jigx-config-store.js.map +1 -0
- package/dist/cli.js +138 -14
- package/dist/cli.js.map +1 -1
- package/dist/deployer/deploy-to-strata.js +2 -2
- package/dist/deployer/deploy-to-strata.js.map +1 -1
- package/dist/deployer/deploy.d.ts +17 -0
- package/dist/deployer/deploy.d.ts.map +1 -1
- package/dist/deployer/deploy.js +90 -4
- package/dist/deployer/deploy.js.map +1 -1
- package/dist/deployer/index.d.ts +1 -1
- package/dist/deployer/index.d.ts.map +1 -1
- package/dist/deployer/index.js +1 -1
- package/dist/deployer/index.js.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/init/index.d.ts +2 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/index.js +2 -0
- package/dist/init/index.js.map +1 -0
- package/dist/init/init.d.ts +45 -0
- package/dist/init/init.d.ts.map +1 -0
- package/dist/init/init.js +125 -0
- package/dist/init/init.js.map +1 -0
- package/dist/login/index.d.ts +3 -0
- package/dist/login/index.d.ts.map +1 -0
- package/dist/login/index.js +2 -0
- package/dist/login/index.js.map +1 -0
- package/dist/login/login.d.ts +19 -0
- package/dist/login/login.d.ts.map +1 -0
- package/dist/login/login.js +58 -0
- package/dist/login/login.js.map +1 -0
- package/dist/logout/index.d.ts +3 -0
- package/dist/logout/index.d.ts.map +1 -0
- package/dist/logout/index.js +2 -0
- package/dist/logout/index.js.map +1 -0
- package/dist/logout/logout.d.ts +26 -0
- package/dist/logout/logout.d.ts.map +1 -0
- package/dist/logout/logout.js +100 -0
- package/dist/logout/logout.js.map +1 -0
- package/dist/scaffolder/scaffold.d.ts.map +1 -1
- package/dist/scaffolder/scaffold.js +1 -4
- package/dist/scaffolder/scaffold.js.map +1 -1
- package/dist/scaffolder/templates.d.ts +0 -1
- package/dist/scaffolder/templates.d.ts.map +1 -1
- package/dist/scaffolder/templates.js +23 -47
- package/dist/scaffolder/templates.js.map +1 -1
- package/dist/whoami/index.d.ts +3 -0
- package/dist/whoami/index.d.ts.map +1 -0
- package/dist/whoami/index.js +2 -0
- package/dist/whoami/index.js.map +1 -0
- package/dist/whoami/whoami.d.ts +27 -0
- package/dist/whoami/whoami.d.ts.map +1 -0
- package/dist/whoami/whoami.js +52 -0
- package/dist/whoami/whoami.js.map +1 -0
- package/package.json +19 -3
- package/CHANGELOG.md +0 -15
- package/dist/builder/__tests__/build.test.d.ts +0 -2
- package/dist/builder/__tests__/build.test.d.ts.map +0 -1
- package/dist/builder/__tests__/build.test.js +0 -88
- package/dist/builder/__tests__/build.test.js.map +0 -1
- package/dist/builder/__tests__/extract-to-folder.test.d.ts +0 -2
- package/dist/builder/__tests__/extract-to-folder.test.d.ts.map +0 -1
- package/dist/builder/__tests__/extract-to-folder.test.js +0 -198
- package/dist/builder/__tests__/extract-to-folder.test.js.map +0 -1
- package/dist/builder/__tests__/fixtures/sample-application.d.ts +0 -2
- package/dist/builder/__tests__/fixtures/sample-application.d.ts.map +0 -1
- package/dist/builder/__tests__/fixtures/sample-application.js +0 -56
- package/dist/builder/__tests__/fixtures/sample-application.js.map +0 -1
- package/dist/creator/__tests__/create.test.d.ts +0 -2
- package/dist/creator/__tests__/create.test.d.ts.map +0 -1
- package/dist/creator/__tests__/create.test.js +0 -93
- package/dist/creator/__tests__/create.test.js.map +0 -1
- package/dist/deployer/__tests__/deploy-to-strata.test.d.ts +0 -2
- package/dist/deployer/__tests__/deploy-to-strata.test.d.ts.map +0 -1
- package/dist/deployer/__tests__/deploy-to-strata.test.js +0 -174
- package/dist/deployer/__tests__/deploy-to-strata.test.js.map +0 -1
- package/dist/deployer/__tests__/deploy.test.d.ts +0 -2
- package/dist/deployer/__tests__/deploy.test.d.ts.map +0 -1
- package/dist/deployer/__tests__/deploy.test.js +0 -116
- package/dist/deployer/__tests__/deploy.test.js.map +0 -1
- package/dist/env-loader/__tests__/load-env.test.d.ts +0 -2
- package/dist/env-loader/__tests__/load-env.test.d.ts.map +0 -1
- package/dist/env-loader/__tests__/load-env.test.js +0 -46
- package/dist/env-loader/__tests__/load-env.test.js.map +0 -1
- package/dist/env-loader/index.d.ts +0 -3
- package/dist/env-loader/index.d.ts.map +0 -1
- package/dist/env-loader/index.js +0 -2
- package/dist/env-loader/index.js.map +0 -1
- package/dist/env-loader/load-env.d.ts +0 -12
- package/dist/env-loader/load-env.d.ts.map +0 -1
- package/dist/env-loader/load-env.js +0 -50
- package/dist/env-loader/load-env.js.map +0 -1
- package/dist/scaffolder/__tests__/scaffold.test.d.ts +0 -2
- package/dist/scaffolder/__tests__/scaffold.test.d.ts.map +0 -1
- package/dist/scaffolder/__tests__/scaffold.test.js +0 -124
- package/dist/scaffolder/__tests__/scaffold.test.js.map +0 -1
- package/dist/slug/__tests__/validate.test.d.ts +0 -2
- package/dist/slug/__tests__/validate.test.d.ts.map +0 -1
- package/dist/slug/__tests__/validate.test.js +0 -51
- package/dist/slug/__tests__/validate.test.js.map +0 -1
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { tmpdir } from 'node:os';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { afterEach, beforeEach, describe, expect, test } from 'vitest';
|
|
5
|
-
import { EnvMissingError } from '../../env-loader/index.js';
|
|
6
|
-
import { deploy } from '../deploy.js';
|
|
7
|
-
function jsonResponse(status, body) {
|
|
8
|
-
return new Response(JSON.stringify(body), {
|
|
9
|
-
status,
|
|
10
|
-
headers: { 'Content-Type': 'application/json' },
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
async function createFixture(options) {
|
|
14
|
-
const { env } = options;
|
|
15
|
-
const projectRoot = await mkdtemp(path.join(tmpdir(), 'jigx-sdk-tools-deploy-test-'));
|
|
16
|
-
await writeFile(path.join(projectRoot, 'package.json'), JSON.stringify({ name: 'fixture', private: true, type: 'module' }), 'utf8');
|
|
17
|
-
await mkdir(path.join(projectRoot, 'src'), { recursive: true });
|
|
18
|
-
await writeFile(path.join(projectRoot, 'src', 'app.ts'), `export const app = {
|
|
19
|
-
build: () => ({
|
|
20
|
-
name: 'fixture-app',
|
|
21
|
-
title: 'Fixture Application',
|
|
22
|
-
category: 'business',
|
|
23
|
-
description: 'A fixture',
|
|
24
|
-
type: 'app',
|
|
25
|
-
}),
|
|
26
|
-
}`, 'utf8');
|
|
27
|
-
if (env !== undefined) {
|
|
28
|
-
await writeFile(path.join(projectRoot, '.env'), env, 'utf8');
|
|
29
|
-
}
|
|
30
|
-
return projectRoot;
|
|
31
|
-
}
|
|
32
|
-
describe('deploy (e2e smoke)', () => {
|
|
33
|
-
let projectRoot;
|
|
34
|
-
let originalFetch;
|
|
35
|
-
beforeEach(() => {
|
|
36
|
-
projectRoot = undefined;
|
|
37
|
-
originalFetch = globalThis.fetch;
|
|
38
|
-
});
|
|
39
|
-
afterEach(async () => {
|
|
40
|
-
globalThis.fetch = originalFetch;
|
|
41
|
-
if (projectRoot)
|
|
42
|
-
await rm(projectRoot, { recursive: true, force: true });
|
|
43
|
-
});
|
|
44
|
-
test('builds, loads env, and issues GET → POST → PUT for a new Application against prod URLs', async () => {
|
|
45
|
-
projectRoot = await createFixture({
|
|
46
|
-
env: 'JIGX_API_KEY=test-token\nJIGX_ORGANIZATION_ID=00000000-0000-4000-8000-000000000002\n',
|
|
47
|
-
});
|
|
48
|
-
const calls = [];
|
|
49
|
-
globalThis.fetch = (async (input, init) => {
|
|
50
|
-
const url = typeof input === 'string' ? input : input.toString();
|
|
51
|
-
const method = init?.method ?? 'GET';
|
|
52
|
-
const rawBody = typeof init?.body === 'string' ? init.body : undefined;
|
|
53
|
-
calls.push({ url, method, body: rawBody ? JSON.parse(rawBody) : undefined });
|
|
54
|
-
if (method === 'GET' && url.endsWith('/solutions/fixture-app')) {
|
|
55
|
-
return jsonResponse(404, { error: 'not found' });
|
|
56
|
-
}
|
|
57
|
-
if (method === 'POST' && url.endsWith('/solutions/')) {
|
|
58
|
-
return jsonResponse(201, { solutionId: '00000000-0000-4000-8000-00000000cccc' });
|
|
59
|
-
}
|
|
60
|
-
if (method === 'PUT' &&
|
|
61
|
-
url.endsWith('/solutions/00000000-0000-4000-8000-00000000cccc/content')) {
|
|
62
|
-
return jsonResponse(200, {});
|
|
63
|
-
}
|
|
64
|
-
throw new Error(`unexpected ${method} ${url}`);
|
|
65
|
-
});
|
|
66
|
-
const result = await deploy({ projectRoot, environment: 'prod' });
|
|
67
|
-
expect(result).toEqual({
|
|
68
|
-
applicationName: 'fixture-app',
|
|
69
|
-
solutionId: '00000000-0000-4000-8000-00000000cccc',
|
|
70
|
-
isNewApplication: true,
|
|
71
|
-
manageUrl: 'https://manage.jigx.com/org/00000000-0000-4000-8000-000000000002/solution/00000000-0000-4000-8000-00000000cccc',
|
|
72
|
-
});
|
|
73
|
-
expect(calls.map((c) => `${c.method} ${c.url}`)).toEqual([
|
|
74
|
-
'GET https://us-east-1.api.jigx.com/v2.0/strata/organizations/00000000-0000-4000-8000-000000000002/solutions/fixture-app',
|
|
75
|
-
'POST https://us-east-1.api.jigx.com/v2.0/strata/organizations/00000000-0000-4000-8000-000000000002/solutions/',
|
|
76
|
-
'PUT https://us-east-1.api.jigx.com/v2.0/strata/organizations/00000000-0000-4000-8000-000000000002/solutions/00000000-0000-4000-8000-00000000cccc/content',
|
|
77
|
-
]);
|
|
78
|
-
});
|
|
79
|
-
test('hits dev URLs when environment is "dev"', async () => {
|
|
80
|
-
projectRoot = await createFixture({
|
|
81
|
-
env: 'JIGX_API_KEY=test-token\nJIGX_ORGANIZATION_ID=00000000-0000-4000-8000-000000000002\n',
|
|
82
|
-
});
|
|
83
|
-
const calls = [];
|
|
84
|
-
globalThis.fetch = (async (input, init) => {
|
|
85
|
-
const url = typeof input === 'string' ? input : input.toString();
|
|
86
|
-
const method = init?.method ?? 'GET';
|
|
87
|
-
calls.push({ url, method });
|
|
88
|
-
if (method === 'GET' && url.endsWith('/solutions/fixture-app')) {
|
|
89
|
-
return jsonResponse(404, { error: 'not found' });
|
|
90
|
-
}
|
|
91
|
-
if (method === 'POST' && url.endsWith('/solutions/')) {
|
|
92
|
-
return jsonResponse(201, { solutionId: '00000000-0000-4000-8000-00000000cccc' });
|
|
93
|
-
}
|
|
94
|
-
if (method === 'PUT' &&
|
|
95
|
-
url.endsWith('/solutions/00000000-0000-4000-8000-00000000cccc/content')) {
|
|
96
|
-
return jsonResponse(200, {});
|
|
97
|
-
}
|
|
98
|
-
throw new Error(`unexpected ${method} ${url}`);
|
|
99
|
-
});
|
|
100
|
-
const result = await deploy({ projectRoot, environment: 'dev' });
|
|
101
|
-
expect(result.manageUrl).toBe('https://manage-dev.jigx.com/org/00000000-0000-4000-8000-000000000002/solution/00000000-0000-4000-8000-00000000cccc');
|
|
102
|
-
expect(calls.every((c) => c.url.startsWith('https://us-west-2.dev-api.jigx.com'))).toBe(true);
|
|
103
|
-
});
|
|
104
|
-
test('throws EnvMissingError before any fetch when .env is absent', async () => {
|
|
105
|
-
projectRoot = await createFixture({});
|
|
106
|
-
let fetchCount = 0;
|
|
107
|
-
globalThis.fetch = (async () => {
|
|
108
|
-
fetchCount++;
|
|
109
|
-
return jsonResponse(200, {});
|
|
110
|
-
});
|
|
111
|
-
const error = await deploy({ projectRoot, environment: 'prod' }).catch((e) => e);
|
|
112
|
-
expect(error).toBeInstanceOf(EnvMissingError);
|
|
113
|
-
expect(fetchCount).toBe(0);
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
//# sourceMappingURL=deploy.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.test.js","sourceRoot":"","sources":["../../../src/deployer/__tests__/deploy.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-env.test.d.ts","sourceRoot":"","sources":["../../../src/env-loader/__tests__/load-env.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { mkdtemp, rm, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { tmpdir } from 'node:os';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { afterEach, beforeEach, describe, expect, test } from 'vitest';
|
|
5
|
-
import { EnvMissingError, loadEnv } from '../load-env.js';
|
|
6
|
-
describe('EnvLoader.loadEnv', () => {
|
|
7
|
-
let projectRoot;
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
projectRoot = undefined;
|
|
10
|
-
});
|
|
11
|
-
afterEach(async () => {
|
|
12
|
-
if (projectRoot)
|
|
13
|
-
await rm(projectRoot, { recursive: true, force: true });
|
|
14
|
-
});
|
|
15
|
-
test('returns apiKey + organizationId when both vars are present in .env', async () => {
|
|
16
|
-
projectRoot = await mkdtemp(path.join(tmpdir(), 'jigx-env-loader-test-'));
|
|
17
|
-
await writeFile(path.join(projectRoot, '.env'), 'JIGX_API_KEY=secret-token\nJIGX_ORGANIZATION_ID=org-abc\n', 'utf8');
|
|
18
|
-
const result = await loadEnv({ projectRoot });
|
|
19
|
-
expect(result).toEqual({ apiKey: 'secret-token', organizationId: 'org-abc' });
|
|
20
|
-
});
|
|
21
|
-
test('throws EnvMissingError naming missing vars when .env omits them', async () => {
|
|
22
|
-
projectRoot = await mkdtemp(path.join(tmpdir(), 'jigx-env-loader-test-'));
|
|
23
|
-
await writeFile(path.join(projectRoot, '.env'), 'JIGX_API_KEY=secret-token\n', 'utf8');
|
|
24
|
-
const error = await loadEnv({ projectRoot }).catch((e) => e);
|
|
25
|
-
expect(error).toBeInstanceOf(EnvMissingError);
|
|
26
|
-
expect(error.message).toMatch(/JIGX_ORGANIZATION_ID/);
|
|
27
|
-
expect(error.message).toMatch(/\.env/);
|
|
28
|
-
});
|
|
29
|
-
test('throws EnvMissingError when .env file does not exist', async () => {
|
|
30
|
-
projectRoot = await mkdtemp(path.join(tmpdir(), 'jigx-env-loader-test-'));
|
|
31
|
-
const error = await loadEnv({ projectRoot }).catch((e) => e);
|
|
32
|
-
expect(error).toBeInstanceOf(EnvMissingError);
|
|
33
|
-
expect(error.message).toMatch(/\.env/);
|
|
34
|
-
expect(error.message).toMatch(/JIGX_API_KEY/);
|
|
35
|
-
expect(error.message).toMatch(/JIGX_ORGANIZATION_ID/);
|
|
36
|
-
});
|
|
37
|
-
test('treats empty values as missing', async () => {
|
|
38
|
-
projectRoot = await mkdtemp(path.join(tmpdir(), 'jigx-env-loader-test-'));
|
|
39
|
-
await writeFile(path.join(projectRoot, '.env'), 'JIGX_API_KEY=\nJIGX_ORGANIZATION_ID=\n', 'utf8');
|
|
40
|
-
const error = await loadEnv({ projectRoot }).catch((e) => e);
|
|
41
|
-
expect(error).toBeInstanceOf(EnvMissingError);
|
|
42
|
-
expect(error.message).toMatch(/JIGX_API_KEY/);
|
|
43
|
-
expect(error.message).toMatch(/JIGX_ORGANIZATION_ID/);
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
//# sourceMappingURL=load-env.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-env.test.js","sourceRoot":"","sources":["../../../src/env-loader/__tests__/load-env.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAEzD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC;IAClC,IAAI,WAA+B,CAAA;IAEnC,UAAU,CAAC,GAAG,EAAE,CAAC;QACf,WAAW,GAAG,SAAS,CAAA;IAAA,CACxB,CAAC,CAAA;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;QACpB,IAAI,WAAW;YAAE,MAAM,EAAE,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAAA,CACzE,CAAC,CAAA;IAEF,IAAI,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE,CAAC;QACrF,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAA;QACzE,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAC9B,2DAA2D,EAC3D,MAAM,CACP,CAAA;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,CAAA;QAE7C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAA;IAAA,CAC9E,CAAC,CAAA;IAEF,IAAI,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE,CAAC;QAClF,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAA;QACzE,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,6BAA6B,EAAE,MAAM,CAAC,CAAA;QAEtF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QAErE,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;QAC7C,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;QAChE,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAAA,CAClD,CAAC,CAAA;IAEF,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE,CAAC;QACvE,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAA;QAEzE,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QAErE,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;QAC7C,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACjD,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QACxD,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;IAAA,CACjE,CAAC,CAAA;IAEF,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE,CAAC;QACjD,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAA;QACzE,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAC9B,wCAAwC,EACxC,MAAM,CACP,CAAA;QAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QAErE,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;QAC7C,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QACxD,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;IAAA,CACjE,CAAC,CAAA;AAAA,CACH,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/env-loader/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACxD,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/env-loader/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/env-loader/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export interface LoadEnvOptions {
|
|
2
|
-
readonly projectRoot: string;
|
|
3
|
-
}
|
|
4
|
-
export interface LoadedEnv {
|
|
5
|
-
readonly apiKey: string;
|
|
6
|
-
readonly organizationId: string;
|
|
7
|
-
}
|
|
8
|
-
export declare class EnvMissingError extends Error {
|
|
9
|
-
constructor(message: string);
|
|
10
|
-
}
|
|
11
|
-
export declare function loadEnv(options: LoadEnvOptions): Promise<LoadedEnv>;
|
|
12
|
-
//# sourceMappingURL=load-env.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-env.d.ts","sourceRoot":"","sources":["../../src/env-loader/load-env.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAE7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAChC;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAgCD,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CA4BzE"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { readFile } from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { parseEnv } from 'node:util';
|
|
4
|
-
export class EnvMissingError extends Error {
|
|
5
|
-
constructor(message) {
|
|
6
|
-
super(message);
|
|
7
|
-
this.name = 'EnvMissingError';
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
const REQUIRED_VARS = ['JIGX_API_KEY', 'JIGX_ORGANIZATION_ID'];
|
|
11
|
-
function isFileNotFoundError(error) {
|
|
12
|
-
return (error instanceof Error && 'code' in error && error.code === 'ENOENT');
|
|
13
|
-
}
|
|
14
|
-
function missingVarsMessage(options) {
|
|
15
|
-
const { missing, envPath, fileExists } = options;
|
|
16
|
-
const lead = fileExists
|
|
17
|
-
? `Missing required environment variables in ${envPath}: ${missing.join(', ')}.`
|
|
18
|
-
: `No .env file found at ${envPath}.`;
|
|
19
|
-
const instruction = fileExists
|
|
20
|
-
? `Add the variable${missing.length > 1 ? 's' : ''} to .env:`
|
|
21
|
-
: `Create .env with:`;
|
|
22
|
-
const lines = REQUIRED_VARS.map((name) => ` ${name}=<your-${name.toLowerCase()}>`);
|
|
23
|
-
return [lead, instruction, ...lines].join('\n');
|
|
24
|
-
}
|
|
25
|
-
export async function loadEnv(options) {
|
|
26
|
-
const { projectRoot } = options;
|
|
27
|
-
const envPath = path.join(projectRoot, '.env');
|
|
28
|
-
let parsed = {};
|
|
29
|
-
let fileExists = true;
|
|
30
|
-
try {
|
|
31
|
-
parsed = parseEnv(await readFile(envPath, 'utf8'));
|
|
32
|
-
}
|
|
33
|
-
catch (error) {
|
|
34
|
-
if (!isFileNotFoundError(error))
|
|
35
|
-
throw error;
|
|
36
|
-
fileExists = false;
|
|
37
|
-
}
|
|
38
|
-
const apiKey = parsed.JIGX_API_KEY;
|
|
39
|
-
const organizationId = parsed.JIGX_ORGANIZATION_ID;
|
|
40
|
-
const missing = [];
|
|
41
|
-
if (!apiKey)
|
|
42
|
-
missing.push('JIGX_API_KEY');
|
|
43
|
-
if (!organizationId)
|
|
44
|
-
missing.push('JIGX_ORGANIZATION_ID');
|
|
45
|
-
if (missing.length > 0 || !apiKey || !organizationId) {
|
|
46
|
-
throw new EnvMissingError(missingVarsMessage({ missing, envPath, fileExists }));
|
|
47
|
-
}
|
|
48
|
-
return { apiKey, organizationId };
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=load-env.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-env.js","sourceRoot":"","sources":["../../src/env-loader/load-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAYpC,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAe,EAAE;QAC3B,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;IAAA,CAC9B;CACF;AAED,MAAM,aAAa,GAAG,CAAC,cAAc,EAAE,sBAAsB,CAAU,CAAA;AAEvE,SAAS,mBAAmB,CAAC,KAAc,EAAW;IACpD,OAAO,CACL,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,CAChG,CAAA;AAAA,CACF;AAED,SAAS,kBAAkB,CAAC,OAI3B,EAAU;IACT,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IAChD,MAAM,IAAI,GAAG,UAAU;QACrB,CAAC,CAAC,6CAA6C,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAChF,CAAC,CAAC,yBAAyB,OAAO,GAAG,CAAA;IACvC,MAAM,WAAW,GAAG,UAAU;QAC5B,CAAC,CAAC,mBAAmB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW;QAC7D,CAAC,CAAC,mBAAmB,CAAA;IACvB,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,UAAU,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;IACnF,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAAA,CAChD;AAQD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAuB,EAAsB;IACzE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAA;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IAE9C,IAAI,MAAM,GAAwB,EAAE,CAAA;IACpC,IAAI,UAAU,GAAG,IAAI,CAAA;IACrB,IAAI,CAAC;QACH,MAAM,GAAG,QAAQ,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAA;QAC5C,UAAU,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAA;IAClC,MAAM,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAA;IAElD,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IACzC,IAAI,CAAC,cAAc;QAAE,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;IAKzD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QACrD,MAAM,IAAI,eAAe,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;IACjF,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;AAAA,CAClC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.test.d.ts","sourceRoot":"","sources":["../../../src/scaffolder/__tests__/scaffold.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import { mkdtemp, readFile, rm } from 'node:fs/promises';
|
|
2
|
-
import { tmpdir } from 'node:os';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { afterEach, beforeEach, describe, expect, test } from 'vitest';
|
|
5
|
-
import { scaffold, ScaffoldError } from '../scaffold.js';
|
|
6
|
-
describe('Scaffolder.scaffold', () => {
|
|
7
|
-
let workdir;
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
workdir = undefined;
|
|
10
|
-
});
|
|
11
|
-
afterEach(async () => {
|
|
12
|
-
if (workdir)
|
|
13
|
-
await rm(workdir, { recursive: true, force: true });
|
|
14
|
-
});
|
|
15
|
-
test('writes the canonical file tree with prompt values substituted', async () => {
|
|
16
|
-
workdir = await mkdtemp(path.join(tmpdir(), 'jigx-scaffold-test-'));
|
|
17
|
-
const destinationPath = path.join(workdir, 'customer-selection');
|
|
18
|
-
const result = await scaffold({
|
|
19
|
-
title: 'Customer Selection',
|
|
20
|
-
applicationName: 'customer-selection',
|
|
21
|
-
type: 'app',
|
|
22
|
-
destinationPath,
|
|
23
|
-
});
|
|
24
|
-
expect(result.destinationPath).toBe(destinationPath);
|
|
25
|
-
expect(result.filesWritten.map((p) => path.relative(destinationPath, p)).sort()).toEqual([
|
|
26
|
-
'.env',
|
|
27
|
-
'.env.example',
|
|
28
|
-
'.gitignore',
|
|
29
|
-
'.npmrc',
|
|
30
|
-
'.yarnrc.yml',
|
|
31
|
-
'README.md',
|
|
32
|
-
'package.json',
|
|
33
|
-
'src/app.ts',
|
|
34
|
-
'tsconfig.json',
|
|
35
|
-
].sort());
|
|
36
|
-
const pkg = JSON.parse(await readFile(path.join(destinationPath, 'package.json'), 'utf8'));
|
|
37
|
-
expect(pkg).toMatchObject({
|
|
38
|
-
name: 'customer-selection',
|
|
39
|
-
private: true,
|
|
40
|
-
type: 'module',
|
|
41
|
-
engines: { node: '>=22' },
|
|
42
|
-
scripts: { build: 'jigx build', deploy: 'jigx deploy', typecheck: 'tsc --build' },
|
|
43
|
-
dependencies: { '@jigx/core-sdk': '^1.0.0' },
|
|
44
|
-
devDependencies: {
|
|
45
|
-
'@jigx/sdk-tools': expect.any(String),
|
|
46
|
-
tsx: expect.any(String),
|
|
47
|
-
typescript: expect.any(String),
|
|
48
|
-
},
|
|
49
|
-
});
|
|
50
|
-
expect(pkg.packageManager).toBeUndefined();
|
|
51
|
-
const gitignoreContent = await readFile(path.join(destinationPath, '.gitignore'), 'utf8');
|
|
52
|
-
expect(gitignoreContent).toContain('.env');
|
|
53
|
-
expect(gitignoreContent).toContain('node_modules/');
|
|
54
|
-
expect(gitignoreContent).toContain('build/');
|
|
55
|
-
const envExampleContent = await readFile(path.join(destinationPath, '.env.example'), 'utf8');
|
|
56
|
-
expect(envExampleContent).toContain('JIGX_API_KEY');
|
|
57
|
-
expect(envExampleContent).toContain('JIGX_ORGANIZATION_ID');
|
|
58
|
-
const envContent = await readFile(path.join(destinationPath, '.env'), 'utf8');
|
|
59
|
-
expect(envContent).toBe(envExampleContent);
|
|
60
|
-
const npmrcContent = await readFile(path.join(destinationPath, '.npmrc'), 'utf8');
|
|
61
|
-
expect(npmrcContent).toContain('@jigx:registry=https://registry.npmjs.org/');
|
|
62
|
-
expect(npmrcContent).toContain('//registry.npmjs.org/:_authToken=${NPM_TOKEN}');
|
|
63
|
-
const yarnrcContent = await readFile(path.join(destinationPath, '.yarnrc.yml'), 'utf8');
|
|
64
|
-
expect(yarnrcContent).toContain('nodeLinker: node-modules');
|
|
65
|
-
const readmeContent = await readFile(path.join(destinationPath, 'README.md'), 'utf8');
|
|
66
|
-
expect(readmeContent).toContain('Customer Selection');
|
|
67
|
-
expect(readmeContent).toContain('customer-selection');
|
|
68
|
-
expect(readmeContent).toContain('NPM_TOKEN');
|
|
69
|
-
expect(readmeContent).toContain('JIGX_API_KEY');
|
|
70
|
-
expect(readmeContent).toContain('JIGX_ORGANIZATION_ID');
|
|
71
|
-
expect(readmeContent).toContain('jigx build');
|
|
72
|
-
expect(readmeContent).toContain('jigx deploy');
|
|
73
|
-
const appTsContent = await readFile(path.join(destinationPath, 'src', 'app.ts'), 'utf8');
|
|
74
|
-
expect(appTsContent).toContain("name: 'customer-selection'");
|
|
75
|
-
expect(appTsContent).toContain('title: "Customer Selection"');
|
|
76
|
-
expect(appTsContent).toContain("type: 'app'");
|
|
77
|
-
expect(appTsContent).toContain('ApplicationBuilder');
|
|
78
|
-
expect(appTsContent).toContain('export const app');
|
|
79
|
-
expect(appTsContent).toContain("screenId: 'home'");
|
|
80
|
-
});
|
|
81
|
-
test('aborts when destination already exists', async () => {
|
|
82
|
-
workdir = await mkdtemp(path.join(tmpdir(), 'jigx-scaffold-test-'));
|
|
83
|
-
const destinationPath = path.join(workdir, 'taken');
|
|
84
|
-
await scaffold({
|
|
85
|
-
title: 'Taken',
|
|
86
|
-
applicationName: 'taken',
|
|
87
|
-
type: 'app',
|
|
88
|
-
destinationPath,
|
|
89
|
-
});
|
|
90
|
-
await expect(scaffold({
|
|
91
|
-
title: 'Taken Again',
|
|
92
|
-
applicationName: 'taken',
|
|
93
|
-
type: 'data',
|
|
94
|
-
destinationPath,
|
|
95
|
-
})).rejects.toBeInstanceOf(ScaffoldError);
|
|
96
|
-
});
|
|
97
|
-
test('embeds the data type in app.ts when type === "data"', async () => {
|
|
98
|
-
workdir = await mkdtemp(path.join(tmpdir(), 'jigx-scaffold-test-'));
|
|
99
|
-
const destinationPath = path.join(workdir, 'data-app');
|
|
100
|
-
await scaffold({
|
|
101
|
-
title: 'Data App',
|
|
102
|
-
applicationName: 'data-app',
|
|
103
|
-
type: 'data',
|
|
104
|
-
destinationPath,
|
|
105
|
-
});
|
|
106
|
-
const appTsContent = await readFile(path.join(destinationPath, 'src', 'app.ts'), 'utf8');
|
|
107
|
-
expect(appTsContent).toContain("type: 'data'");
|
|
108
|
-
});
|
|
109
|
-
test('safely escapes titles containing quotes, backslashes, and newlines in src/app.ts', async () => {
|
|
110
|
-
workdir = await mkdtemp(path.join(tmpdir(), 'jigx-scaffold-test-'));
|
|
111
|
-
const destinationPath = path.join(workdir, 'tricky');
|
|
112
|
-
const trickyTitle = 'Bob\'s "weird" \\back\nline';
|
|
113
|
-
await scaffold({
|
|
114
|
-
title: trickyTitle,
|
|
115
|
-
applicationName: 'bobs-app',
|
|
116
|
-
type: 'app',
|
|
117
|
-
destinationPath,
|
|
118
|
-
});
|
|
119
|
-
const appTsContent = await readFile(path.join(destinationPath, 'src', 'app.ts'), 'utf8');
|
|
120
|
-
expect(appTsContent).toContain(`title: ${JSON.stringify(trickyTitle)}`);
|
|
121
|
-
expect(appTsContent).toContain(`title: ${JSON.stringify(`Welcome to ${trickyTitle}`)}`);
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
//# sourceMappingURL=scaffold.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.test.js","sourceRoot":"","sources":["../../../src/scaffolder/__tests__/scaffold.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.test.d.ts","sourceRoot":"","sources":["../../../src/slug/__tests__/validate.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from 'vitest';
|
|
2
|
-
import { slugifyTitle, validateApplicationName } from '../validate.js';
|
|
3
|
-
describe('slugifyTitle', () => {
|
|
4
|
-
const cases = [
|
|
5
|
-
['Customer Selection', 'customer-selection'],
|
|
6
|
-
[' Customer Selection ', 'customer-selection'],
|
|
7
|
-
['Café Crème!', 'cafe-creme'],
|
|
8
|
-
['Foo_Bar/Baz', 'foo-bar-baz'],
|
|
9
|
-
['---trim---', 'trim'],
|
|
10
|
-
['UPPER', 'upper'],
|
|
11
|
-
['mixed 123 thing', 'mixed-123-thing'],
|
|
12
|
-
['$$$', ''],
|
|
13
|
-
['', ''],
|
|
14
|
-
];
|
|
15
|
-
test.each(cases)('slugifyTitle(%j) === %j', (input, expected) => {
|
|
16
|
-
expect(slugifyTitle(input)).toBe(expected);
|
|
17
|
-
});
|
|
18
|
-
test('truncates to 50 characters', () => {
|
|
19
|
-
const longInput = 'a'.repeat(60);
|
|
20
|
-
expect(slugifyTitle(longInput).length).toBe(50);
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
describe('validateApplicationName', () => {
|
|
24
|
-
const valid = [
|
|
25
|
-
'a1',
|
|
26
|
-
'customer-selection',
|
|
27
|
-
'app',
|
|
28
|
-
'a'.repeat(50),
|
|
29
|
-
'0-9-abc',
|
|
30
|
-
'123',
|
|
31
|
-
];
|
|
32
|
-
const invalid = [
|
|
33
|
-
['', /2–50 characters/],
|
|
34
|
-
['a', /2–50 characters/],
|
|
35
|
-
['a'.repeat(51), /2–50 characters/],
|
|
36
|
-
['Customer-Selection', /\[a-z0-9-\]\+/],
|
|
37
|
-
['customer_selection', /\[a-z0-9-\]\+/],
|
|
38
|
-
['customer selection', /\[a-z0-9-\]\+/],
|
|
39
|
-
['hello!', /\[a-z0-9-\]\+/],
|
|
40
|
-
];
|
|
41
|
-
test.each(valid)('accepts %j', (name) => {
|
|
42
|
-
expect(validateApplicationName(name)).toEqual({ ok: true });
|
|
43
|
-
});
|
|
44
|
-
test.each(invalid)('rejects %j', (name, pattern) => {
|
|
45
|
-
const result = validateApplicationName(name);
|
|
46
|
-
expect(result.ok).toBe(false);
|
|
47
|
-
if (!result.ok)
|
|
48
|
-
expect(result.error).toMatch(pattern);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
//# sourceMappingURL=validate.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.test.js","sourceRoot":"","sources":["../../../src/slug/__tests__/validate.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAEtE,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC;IAC7B,MAAM,KAAK,GAA6C;QACtD,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;QAC5C,CAAC,yBAAyB,EAAE,oBAAoB,CAAC;QACjD,CAAC,eAAa,EAAE,YAAY,CAAC;QAC7B,CAAC,aAAa,EAAE,aAAa,CAAC;QAC9B,CAAC,YAAY,EAAE,MAAM,CAAC;QACtB,CAAC,OAAO,EAAE,OAAO,CAAC;QAClB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;QACtC,CAAC,KAAK,EAAE,EAAE,CAAC;QACX,CAAC,EAAE,EAAE,EAAE,CAAC;KACT,CAAA;IAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC;QAC/D,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAAA,CAC3C,CAAC,CAAA;IAEF,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAChC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAAA,CAChD,CAAC,CAAA;AAAA,CACH,CAAC,CAAA;AAEF,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC;IACxC,MAAM,KAAK,GAAsB;QAC/B,IAAI;QACJ,oBAAoB;QACpB,KAAK;QACL,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACd,SAAS;QACT,KAAK;KACN,CAAA;IAED,MAAM,OAAO,GAA6C;QACxD,CAAC,EAAE,EAAE,mBAAiB,CAAC;QACvB,CAAC,GAAG,EAAE,mBAAiB,CAAC;QACxB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,mBAAiB,CAAC;QACnC,CAAC,oBAAoB,EAAE,eAAe,CAAC;QACvC,CAAC,oBAAoB,EAAE,eAAe,CAAC;QACvC,CAAC,oBAAoB,EAAE,eAAe,CAAC;QACvC,CAAC,QAAQ,EAAE,eAAe,CAAC;KAC5B,CAAA;IAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IAAA,CAC5D,CAAC,CAAA;IAEF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAA;QAC5C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7B,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAAA,CACtD,CAAC,CAAA;AAAA,CACH,CAAC,CAAA"}
|