@linktr.ee/linkapp 0.0.48 → 0.0.49
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 +1 -1
- package/dev-server/components/form/array-field.tsx +115 -0
- package/dev-server/components/form/file-field.tsx +48 -0
- package/dev-server/components/form/form-element.tsx +304 -0
- package/dev-server/components/form/link-behavior-field.tsx +68 -0
- package/dev-server/components/form/location-field.tsx +60 -0
- package/dev-server/components/settings-preview.tsx +138 -302
- package/dev-server/components/ui/checkbox.tsx +29 -0
- package/dev-server/components/ui/dialog.tsx +2 -10
- package/dev-server/components/ui/field.tsx +24 -49
- package/dev-server/components/ui/input.tsx +20 -21
- package/dev-server/components/ui/label.tsx +4 -4
- package/dev-server/components/ui/radio-group.tsx +37 -0
- package/dev-server/components/ui/select.tsx +153 -0
- package/dev-server/components/ui/switch.tsx +31 -0
- package/dev-server/components/ui/tabs.tsx +1 -1
- package/dev-server/components/ui/textarea.tsx +18 -19
- package/dev-server/env.d.ts +4 -1
- package/dev-server/expanded/main.tsx +20 -22
- package/dev-server/expanded.html +0 -1
- package/dev-server/featured/main.tsx +29 -36
- package/dev-server/featured-carousel.html +0 -1
- package/dev-server/featured.html +0 -1
- package/dev-server/index.html +1 -7
- package/dev-server/lib/utils.ts +3 -3
- package/dev-server/package.json +3 -3
- package/dev-server/postcss/tailwind-source-fallback.js +2 -7
- package/dev-server/postcss.config.mjs +2 -2
- package/dev-server/preview/Preview.tsx +310 -350
- package/dev-server/preview/main.tsx +8 -8
- package/dev-server/preview/preview.css +0 -1
- package/dev-server/public/site.webmanifest +1 -1
- package/dev-server/rsbuild.config.ts +1 -1
- package/dev-server/shared/dev-parent-simulator.ts +219 -0
- package/dev-server/shared/theme-presets.ts +71 -75
- package/dev-server/shared/theme-utils.ts +11 -11
- package/dist/cli.js +18 -12
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +27 -42
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +26 -16
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/deploy.d.ts +1 -11
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +3 -13
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +132 -388
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +17 -29
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/logout.js +6 -11
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/rollback.d.ts +10 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +148 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/status.d.ts +8 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +96 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/test-url-match-rules.d.ts.map +1 -1
- package/dist/commands/test-url-match-rules.js +20 -26
- package/dist/commands/test-url-match-rules.js.map +1 -1
- package/dist/lib/auth/device-flow.d.ts +1 -1
- package/dist/lib/auth/device-flow.d.ts.map +1 -1
- package/dist/lib/auth/device-flow.js +3 -3
- package/dist/lib/auth/device-flow.js.map +1 -1
- package/dist/lib/auth/token-storage.d.ts.map +1 -1
- package/dist/lib/auth/token-storage.js +14 -37
- package/dist/lib/auth/token-storage.js.map +1 -1
- package/dist/lib/build/detect-layouts.d.ts.map +1 -1
- package/dist/lib/build/detect-layouts.js +27 -13
- package/dist/lib/build/detect-layouts.js.map +1 -1
- package/dist/lib/config/load-config.d.ts.map +1 -1
- package/dist/lib/config/load-config.js +0 -2
- package/dist/lib/config/load-config.js.map +1 -1
- package/dist/lib/deploy/deploy-output.d.ts +2 -1
- package/dist/lib/deploy/deploy-output.d.ts.map +1 -1
- package/dist/lib/deploy/deploy-output.js +9 -1
- package/dist/lib/deploy/deploy-output.js.map +1 -1
- package/dist/lib/deploy/deploy-phases.d.ts +2 -0
- package/dist/lib/deploy/deploy-phases.d.ts.map +1 -1
- package/dist/lib/deploy/deploy-phases.js +9 -23
- package/dist/lib/deploy/deploy-phases.js.map +1 -1
- package/dist/lib/deploy/deploy-utils.d.ts +15 -7
- package/dist/lib/deploy/deploy-utils.d.ts.map +1 -1
- package/dist/lib/deploy/deploy-utils.js +49 -36
- package/dist/lib/deploy/deploy-utils.js.map +1 -1
- package/dist/lib/deploy/generate-manifest-files.d.ts.map +1 -1
- package/dist/lib/deploy/generate-manifest-files.js +13 -39
- package/dist/lib/deploy/generate-manifest-files.js.map +1 -1
- package/dist/lib/deploy/pack-project.d.ts.map +1 -1
- package/dist/lib/deploy/pack-project.js +34 -20
- package/dist/lib/deploy/pack-project.js.map +1 -1
- package/dist/lib/deploy/slot-manager.d.ts +54 -0
- package/dist/lib/deploy/slot-manager.d.ts.map +1 -0
- package/dist/lib/deploy/slot-manager.js +72 -0
- package/dist/lib/deploy/slot-manager.js.map +1 -0
- package/dist/lib/deploy/test-url-match-rules.d.ts +10 -2
- package/dist/lib/deploy/test-url-match-rules.d.ts.map +1 -1
- package/dist/lib/deploy/test-url-match-rules.js +1 -1
- package/dist/lib/deploy/test-url-match-rules.js.map +1 -1
- package/dist/lib/deploy/upload.d.ts +1 -0
- package/dist/lib/deploy/upload.d.ts.map +1 -1
- package/dist/lib/deploy/upload.js +15 -24
- package/dist/lib/deploy/upload.js.map +1 -1
- package/dist/lib/deploy/validation.d.ts.map +1 -1
- package/dist/lib/deploy/validation.js +43 -48
- package/dist/lib/deploy/validation.js.map +1 -1
- package/dist/lib/rsbuild/config-factory.d.ts.map +1 -1
- package/dist/lib/rsbuild/config-factory.js +10 -17
- package/dist/lib/rsbuild/config-factory.js.map +1 -1
- package/dist/lib/rsbuild/plugins/asset-versioning.d.ts.map +1 -1
- package/dist/lib/rsbuild/plugins/asset-versioning.js +4 -14
- package/dist/lib/rsbuild/plugins/asset-versioning.js.map +1 -1
- package/dist/lib/rsbuild/plugins/brotli-compression.d.ts.map +1 -1
- package/dist/lib/rsbuild/plugins/brotli-compression.js +4 -4
- package/dist/lib/rsbuild/plugins/brotli-compression.js.map +1 -1
- package/dist/lib/rsbuild/plugins/copy-public.d.ts.map +1 -1
- package/dist/lib/rsbuild/plugins/copy-public.js.map +1 -1
- package/dist/lib/rsbuild/postcss/tailwind-source-fallback.d.ts.map +1 -1
- package/dist/lib/rsbuild/postcss/tailwind-source-fallback.js +1 -3
- package/dist/lib/rsbuild/postcss/tailwind-source-fallback.js.map +1 -1
- package/dist/lib/utils/console.d.ts +8 -0
- package/dist/lib/utils/console.d.ts.map +1 -0
- package/dist/lib/utils/console.js +10 -0
- package/dist/lib/utils/console.js.map +1 -0
- package/dist/lib/utils/filesystem.d.ts +9 -0
- package/dist/lib/utils/filesystem.d.ts.map +1 -0
- package/dist/lib/utils/filesystem.js +30 -0
- package/dist/lib/utils/filesystem.js.map +1 -0
- package/dist/lib/utils/formatters.d.ts +8 -0
- package/dist/lib/utils/formatters.d.ts.map +1 -0
- package/dist/lib/utils/formatters.js +22 -0
- package/dist/lib/utils/formatters.js.map +1 -0
- package/dist/lib/utils/index.d.ts +7 -0
- package/dist/lib/utils/index.d.ts.map +1 -0
- package/dist/lib/utils/index.js +7 -0
- package/dist/lib/utils/index.js.map +1 -0
- package/dist/lib/utils/setup-runtime.d.ts.map +1 -1
- package/dist/lib/utils/setup-runtime.js +22 -63
- package/dist/lib/utils/setup-runtime.js.map +1 -1
- package/dist/schema/config.schema.d.ts +9 -48
- package/dist/schema/config.schema.d.ts.map +1 -1
- package/dist/schema/config.schema.js +119 -120
- package/dist/schema/config.schema.js.map +1 -1
- package/dist/sdk/hooks/mocks.d.ts +9 -0
- package/dist/sdk/hooks/mocks.d.ts.map +1 -0
- package/dist/sdk/hooks/mocks.js +17 -0
- package/dist/sdk/hooks/mocks.js.map +1 -0
- package/dist/sdk/hooks/use-audience-manager.d.ts +44 -0
- package/dist/sdk/hooks/use-audience-manager.d.ts.map +1 -0
- package/dist/sdk/hooks/use-audience-manager.js +109 -0
- package/dist/sdk/hooks/use-audience-manager.js.map +1 -0
- package/dist/sdk/hooks/use-ip.d.ts +45 -0
- package/dist/sdk/hooks/use-ip.d.ts.map +1 -0
- package/dist/sdk/hooks/use-ip.js +46 -0
- package/dist/sdk/hooks/use-ip.js.map +1 -0
- package/dist/sdk/hooks/use-sdk-request.d.ts +46 -0
- package/dist/sdk/hooks/use-sdk-request.d.ts.map +1 -0
- package/dist/sdk/hooks/use-sdk-request.js +65 -0
- package/dist/sdk/hooks/use-sdk-request.js.map +1 -0
- package/dist/sdk/hooks/use-theme.d.ts +45 -0
- package/dist/sdk/hooks/use-theme.d.ts.map +1 -0
- package/dist/sdk/hooks/use-theme.js +97 -0
- package/dist/sdk/hooks/use-theme.js.map +1 -0
- package/dist/sdk/hooks/use-visitor.d.ts +41 -0
- package/dist/sdk/hooks/use-visitor.d.ts.map +1 -0
- package/dist/sdk/hooks/use-visitor.js +42 -0
- package/dist/sdk/hooks/use-visitor.js.map +1 -0
- package/dist/sdk/hooks/validation.d.ts +8 -0
- package/dist/sdk/hooks/validation.d.ts.map +1 -0
- package/dist/sdk/hooks/validation.js +13 -0
- package/dist/sdk/hooks/validation.js.map +1 -0
- package/dist/sdk/index.d.ts +17 -5
- package/dist/sdk/index.d.ts.map +1 -1
- package/dist/sdk/index.js +16 -5
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/message-bus.d.ts +59 -0
- package/dist/sdk/message-bus.d.ts.map +1 -0
- package/dist/sdk/message-bus.js +152 -0
- package/dist/sdk/message-bus.js.map +1 -0
- package/dist/sdk/messages.d.ts +121 -0
- package/dist/sdk/messages.d.ts.map +1 -0
- package/dist/sdk/messages.js +9 -0
- package/dist/sdk/messages.js.map +1 -0
- package/dist/sdk/send-message.d.ts +1 -1
- package/dist/sdk/send-message.js +18 -18
- package/dist/sdk/send-message.js.map +1 -1
- package/dist/sdk/use-expand-link-app.d.ts +3 -3
- package/dist/sdk/use-expand-link-app.d.ts.map +1 -1
- package/dist/sdk/use-expand-link-app.js +9 -5
- package/dist/sdk/use-expand-link-app.js.map +1 -1
- package/dist/types.d.ts +235 -55
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -3
- package/dist/types.js.map +1 -1
- package/package.json +3 -9
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import pc from 'picocolors';
|
|
2
1
|
import { existsSync } from 'node:fs';
|
|
3
2
|
import { join } from 'node:path';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
import pc from 'picocolors';
|
|
4
|
+
export function getDeployTarget(options) {
|
|
5
|
+
return options.canary ? 'canary' : 'stable';
|
|
6
|
+
}
|
|
7
|
+
export const KEBAB_CASE_ID_REGEX = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;
|
|
8
|
+
export const KEBAB_CASE_ID_ERROR_MESSAGE = 'ID must be kebab-case (lowercase letters, numbers, and hyphens, must start with a letter)';
|
|
9
|
+
export function isValidKebabCaseId(id) {
|
|
10
|
+
return KEBAB_CASE_ID_REGEX.test(id);
|
|
11
|
+
}
|
|
10
12
|
export function resolveConfigPath(projectPath) {
|
|
11
13
|
const rootConfigPath = join(projectPath, 'linkapp.config.ts');
|
|
12
14
|
const nestedConfigPath = join(projectPath, '.config', 'linkapp.config.ts');
|
|
@@ -16,9 +18,6 @@ export function resolveConfigPath(projectPath) {
|
|
|
16
18
|
return nestedConfigPath;
|
|
17
19
|
throw new Error('Configuration file not found. Expected linkapp.config.ts in project root or .config directory.');
|
|
18
20
|
}
|
|
19
|
-
/**
|
|
20
|
-
* Extracts the LinkApp ID from a configuration file.
|
|
21
|
-
*/
|
|
22
21
|
export async function getLinkAppIdFromConfig(configPath) {
|
|
23
22
|
const { createJiti } = await import('jiti');
|
|
24
23
|
const jiti = createJiti(import.meta.url, {
|
|
@@ -27,27 +26,35 @@ export async function getLinkAppIdFromConfig(configPath) {
|
|
|
27
26
|
});
|
|
28
27
|
try {
|
|
29
28
|
const config = jiti(configPath);
|
|
29
|
+
// Prioritize explicit id if provided
|
|
30
|
+
if (config?.manifest?.id) {
|
|
31
|
+
if (!isValidKebabCaseId(config.manifest.id)) {
|
|
32
|
+
throw new Error(`manifest.id: ${KEBAB_CASE_ID_ERROR_MESSAGE}`);
|
|
33
|
+
}
|
|
34
|
+
return config.manifest.id;
|
|
35
|
+
}
|
|
36
|
+
// Fall back to deriving from name
|
|
30
37
|
if (!config?.manifest?.name) {
|
|
31
|
-
throw new Error('manifest.name is required in linkapp.config.ts');
|
|
38
|
+
throw new Error('manifest.name is required in linkapp.config.ts when manifest.id is not specified');
|
|
32
39
|
}
|
|
33
|
-
return config.manifest.name
|
|
34
|
-
.toLowerCase()
|
|
35
|
-
.replace(/[^a-z0-9]+/g, '-')
|
|
36
|
-
.replace(/^-+|-+$/g, '');
|
|
40
|
+
return deriveIdFromName(config.manifest.name);
|
|
37
41
|
}
|
|
38
42
|
catch (error) {
|
|
39
|
-
if (error instanceof Error &&
|
|
43
|
+
if (error instanceof Error &&
|
|
44
|
+
(error.message.includes('manifest.name is required') || error.message.includes('manifest.id:'))) {
|
|
40
45
|
throw error;
|
|
41
46
|
}
|
|
42
47
|
throw new Error(`Failed to load linkapp.config.ts: ${error instanceof Error ? error.message : String(error)}`);
|
|
43
48
|
}
|
|
44
49
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
export function deriveIdFromName(name) {
|
|
51
|
+
return name
|
|
52
|
+
.toLowerCase()
|
|
53
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
54
|
+
.replace(/^-+|-+$/g, '');
|
|
50
55
|
}
|
|
56
|
+
import { writeLine } from '../utils/console.js';
|
|
57
|
+
export { writeLine };
|
|
51
58
|
export function writeSection(title, length = 50) {
|
|
52
59
|
writeLine(pc.bold(pc.cyan(`\n→ ${title}`)));
|
|
53
60
|
writeLine(pc.dim('─'.repeat(length)));
|
|
@@ -56,9 +63,6 @@ export function writeSection(title, length = 50) {
|
|
|
56
63
|
export function writeSeparator(length = 50) {
|
|
57
64
|
writeLine(pc.dim('─'.repeat(length)));
|
|
58
65
|
}
|
|
59
|
-
// ============================================================================
|
|
60
|
-
// CONSTANTS
|
|
61
|
-
// ============================================================================
|
|
62
66
|
export const DISPLAY = {
|
|
63
67
|
FILE_PREVIEW_LIMIT: 8,
|
|
64
68
|
SEPARATOR_LENGTH: 50,
|
|
@@ -73,9 +77,6 @@ export const URLS = {
|
|
|
73
77
|
qa: (linkTypeId) => `https://qa.linktr.ee/admin?action=create-link&linkType=${linkTypeId}`,
|
|
74
78
|
},
|
|
75
79
|
};
|
|
76
|
-
// ============================================================================
|
|
77
|
-
// FORMATTERS
|
|
78
|
-
// ============================================================================
|
|
79
80
|
export function formatTimestamp(timestamp) {
|
|
80
81
|
if (!timestamp)
|
|
81
82
|
return null;
|
|
@@ -97,12 +98,9 @@ export function displayFileList(files, title) {
|
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
100
|
export function pluralize(count, singular, plural) {
|
|
100
|
-
const word = count === 1 ? singular : plural ?? `${singular}s
|
|
101
|
+
const word = count === 1 ? singular : (plural ?? `${singular}s`);
|
|
101
102
|
return `${count} ${word}`;
|
|
102
103
|
}
|
|
103
|
-
// ============================================================================
|
|
104
|
-
// ERRORS
|
|
105
|
-
// ============================================================================
|
|
106
104
|
export class DeploymentError extends Error {
|
|
107
105
|
exitCode;
|
|
108
106
|
userMessage;
|
|
@@ -140,10 +138,25 @@ export class DeploymentCancelledError extends DeploymentError {
|
|
|
140
138
|
}
|
|
141
139
|
}
|
|
142
140
|
export function isAPIError(error) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
141
|
+
if (error === null || typeof error !== 'object') {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
const candidate = error;
|
|
145
|
+
return ('statusCode' in candidate &&
|
|
146
|
+
typeof candidate.statusCode === 'number' &&
|
|
147
|
+
'messages' in candidate &&
|
|
148
|
+
Array.isArray(candidate.messages));
|
|
149
|
+
}
|
|
150
|
+
export class APIUploadError extends DeploymentError {
|
|
151
|
+
statusCode;
|
|
152
|
+
responseData;
|
|
153
|
+
messages;
|
|
154
|
+
constructor(message, statusCode, responseData, messages = []) {
|
|
155
|
+
super(message, 1);
|
|
156
|
+
this.statusCode = statusCode;
|
|
157
|
+
this.responseData = responseData;
|
|
158
|
+
this.messages = messages;
|
|
159
|
+
this.name = 'APIUploadError';
|
|
160
|
+
}
|
|
148
161
|
}
|
|
149
162
|
//# sourceMappingURL=deploy-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-utils.js","sourceRoot":"","sources":["../../../src/lib/deploy/deploy-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"deploy-utils.js","sourceRoot":"","sources":["../../../src/lib/deploy/deploy-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-manifest-files.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/generate-manifest-files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate-manifest-files.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/generate-manifest-files.ts"],"names":[],"mappings":"AAKA,wBAAsB,qBAAqB,CAAC,WAAW,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyE9F"}
|
|
@@ -1,32 +1,25 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, writeFileSync } from
|
|
2
|
-
import { join } from
|
|
3
|
-
import { createJiti } from
|
|
4
|
-
import { detectLayouts } from "../build/detect-layouts.js";
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { createJiti } from 'jiti';
|
|
5
4
|
export async function generateManifestFiles(projectPath = process.cwd()) {
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const configPath = existsSync(rootConfigPath)
|
|
10
|
-
? rootConfigPath
|
|
11
|
-
: nestedConfigPath;
|
|
5
|
+
const rootConfigPath = join(projectPath, 'linkapp.config.ts');
|
|
6
|
+
const nestedConfigPath = join(projectPath, '.config', 'linkapp.config.ts');
|
|
7
|
+
const configPath = existsSync(rootConfigPath) ? rootConfigPath : nestedConfigPath;
|
|
12
8
|
if (!existsSync(configPath)) {
|
|
13
|
-
throw new Error(
|
|
9
|
+
throw new Error('Config file not found: linkapp.config.ts');
|
|
14
10
|
}
|
|
15
11
|
try {
|
|
16
|
-
|
|
17
|
-
const linkappDir = join(projectPath, ".linkapp");
|
|
12
|
+
const linkappDir = join(projectPath, '.linkapp');
|
|
18
13
|
if (!existsSync(linkappDir)) {
|
|
19
14
|
mkdirSync(linkappDir, { recursive: true });
|
|
20
15
|
}
|
|
21
|
-
// Load the TypeScript config using jiti
|
|
22
16
|
const jiti = createJiti(import.meta.url, {
|
|
23
17
|
interopDefault: true,
|
|
24
18
|
moduleCache: false,
|
|
25
19
|
});
|
|
26
20
|
const config = jiti(configPath);
|
|
27
|
-
// Generate manifest.json
|
|
28
|
-
// Note: The LinkApp ID is derived from kebab-case(name) by the backend
|
|
29
21
|
const manifest = {
|
|
22
|
+
...(config.manifest.id !== undefined && { id: config.manifest.id }),
|
|
30
23
|
name: config.manifest.name,
|
|
31
24
|
tagline: config.manifest.tagline,
|
|
32
25
|
description: config.manifest.description,
|
|
@@ -43,18 +36,12 @@ export async function generateManifestFiles(projectPath = process.cwd()) {
|
|
|
43
36
|
search_terms: config.manifest.search_terms,
|
|
44
37
|
author: config.manifest.author,
|
|
45
38
|
};
|
|
46
|
-
writeFileSync(join(linkappDir,
|
|
47
|
-
// Auto-detect featured layout support based on app/featured.tsx presence
|
|
48
|
-
const layoutDetection = detectLayouts(projectPath);
|
|
49
|
-
const hasFeaturedLayout = layoutDetection.layouts.some((layout) => layout.name === "featured");
|
|
50
|
-
// Generate settings.json
|
|
39
|
+
writeFileSync(join(linkappDir, 'manifest.json'), JSON.stringify(manifest, null, 2), 'utf-8');
|
|
51
40
|
const settings = {
|
|
52
41
|
title: config.settings.title,
|
|
53
42
|
overview: config.settings.overview,
|
|
54
43
|
elements: config.settings.elements,
|
|
55
|
-
|
|
56
|
-
supports_featured_layout: hasFeaturedLayout,
|
|
57
|
-
// Include optional fields if present
|
|
44
|
+
supports_featured_layout: config.settings.supports_featured_layout ?? false,
|
|
58
45
|
...(config.settings.uses_url !== undefined && {
|
|
59
46
|
uses_url: config.settings.uses_url,
|
|
60
47
|
}),
|
|
@@ -71,23 +58,10 @@ export async function generateManifestFiles(projectPath = process.cwd()) {
|
|
|
71
58
|
...(config.settings.has_settings !== undefined && {
|
|
72
59
|
has_settings: config.settings.has_settings,
|
|
73
60
|
}),
|
|
74
|
-
...(config.settings.featured_chin_position !== undefined && {
|
|
75
|
-
featured_chin_position: config.settings.featured_chin_position,
|
|
76
|
-
}),
|
|
77
|
-
...(config.settings.featured_head_allow_unlocked_aspect_ratio !== undefined && {
|
|
78
|
-
featured_head_allow_unlocked_aspect_ratio: config.settings.featured_head_allow_unlocked_aspect_ratio,
|
|
79
|
-
}),
|
|
80
|
-
...(config.settings.sheet_behavior !== undefined && {
|
|
81
|
-
sheet_behavior: config.settings.sheet_behavior,
|
|
82
|
-
}),
|
|
83
|
-
...(config.settings.featured_head_click_behavior !== undefined && {
|
|
84
|
-
featured_head_click_behavior: config.settings.featured_head_click_behavior,
|
|
85
|
-
}),
|
|
86
61
|
};
|
|
87
|
-
writeFileSync(join(linkappDir,
|
|
88
|
-
// Generate url_match_rules.json if present
|
|
62
|
+
writeFileSync(join(linkappDir, 'settings.json'), JSON.stringify(settings, null, 2), 'utf-8');
|
|
89
63
|
if (config.url_match_rules) {
|
|
90
|
-
writeFileSync(join(linkappDir,
|
|
64
|
+
writeFileSync(join(linkappDir, 'url_match_rules.json'), JSON.stringify(config.url_match_rules, null, 2), 'utf-8');
|
|
91
65
|
}
|
|
92
66
|
}
|
|
93
67
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-manifest-files.js","sourceRoot":"","sources":["../../../src/lib/deploy/generate-manifest-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"generate-manifest-files.js","sourceRoot":"","sources":["../../../src/lib/deploy/generate-manifest-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pack-project.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/pack-project.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pack-project.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/pack-project.ts"],"names":[],"mappings":"AAKA,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA4I9E"}
|
|
@@ -1,41 +1,61 @@
|
|
|
1
|
-
import archiver from 'archiver';
|
|
2
1
|
import { createWriteStream, existsSync, statSync } from 'node:fs';
|
|
3
2
|
import { join } from 'node:path';
|
|
3
|
+
import archiver from 'archiver';
|
|
4
|
+
import { detectLayouts } from '../build/detect-layouts.js';
|
|
4
5
|
export async function packProject(options = {}) {
|
|
5
6
|
const projectPath = options.projectPath || process.cwd();
|
|
6
7
|
const outputPath = options.outputPath || join(projectPath, 'package.tgz');
|
|
7
|
-
// Check for config file in both locations (root first, then .config for backward compatibility)
|
|
8
8
|
const rootConfigPath = join(projectPath, 'linkapp.config.ts');
|
|
9
9
|
const configPath = existsSync(rootConfigPath) ? 'linkapp.config.ts' : '.config/linkapp.config.ts';
|
|
10
|
+
const layoutDetection = detectLayouts(projectPath);
|
|
11
|
+
const isHeadless = layoutDetection.layouts.length === 0 && !layoutDetection.hasLayout;
|
|
10
12
|
const requiredFiles = [configPath];
|
|
11
|
-
const optionalFiles = [
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
const optionalFiles = [
|
|
14
|
+
'package.json',
|
|
15
|
+
'package-lock.json',
|
|
16
|
+
'README.md',
|
|
17
|
+
'tsconfig.json',
|
|
18
|
+
'yarn.lock',
|
|
19
|
+
'postcss.config.mjs',
|
|
20
|
+
'postcss.config.js',
|
|
21
|
+
'postcss.config.cjs',
|
|
22
|
+
];
|
|
23
|
+
const requiredDirs = isHeadless ? [] : ['app'];
|
|
24
|
+
const optionalDirs = isHeadless ? [] : ['components', 'hooks', 'lib', 'public'];
|
|
15
25
|
const linkappDir = join(projectPath, '.linkapp');
|
|
16
26
|
const manifestFiles = [
|
|
17
|
-
{
|
|
18
|
-
|
|
19
|
-
|
|
27
|
+
{
|
|
28
|
+
source: join(linkappDir, 'manifest.json'),
|
|
29
|
+
dest: 'manifest.json',
|
|
30
|
+
required: true,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
source: join(linkappDir, 'settings.json'),
|
|
34
|
+
dest: 'settings.json',
|
|
35
|
+
required: false,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
source: join(linkappDir, 'url_match_rules.json'),
|
|
39
|
+
dest: 'url_match_rules.json',
|
|
40
|
+
required: false,
|
|
41
|
+
},
|
|
20
42
|
];
|
|
21
|
-
|
|
22
|
-
|
|
43
|
+
const iconSource = isHeadless
|
|
44
|
+
? join(projectPath, 'icon.svg')
|
|
45
|
+
: join(projectPath, 'dist', 'icon.svg');
|
|
23
46
|
const packedFiles = [];
|
|
24
|
-
// Validate required files exist
|
|
25
47
|
for (const file of requiredFiles) {
|
|
26
48
|
const filePath = join(projectPath, file);
|
|
27
49
|
if (!existsSync(filePath)) {
|
|
28
50
|
throw new Error(`Required file missing: ${file}`);
|
|
29
51
|
}
|
|
30
52
|
}
|
|
31
|
-
// Validate required directories exist
|
|
32
53
|
for (const dir of requiredDirs) {
|
|
33
54
|
const dirPath = join(projectPath, dir);
|
|
34
55
|
if (!existsSync(dirPath) || !statSync(dirPath).isDirectory()) {
|
|
35
56
|
throw new Error(`Required directory missing: ${dir}`);
|
|
36
57
|
}
|
|
37
58
|
}
|
|
38
|
-
// Validate required manifest files exist
|
|
39
59
|
for (const manifest of manifestFiles) {
|
|
40
60
|
if (manifest.required && !existsSync(manifest.source)) {
|
|
41
61
|
throw new Error(`Required manifest file missing: ${manifest.dest}. Run manifest generation first.`);
|
|
@@ -62,19 +82,16 @@ export async function packProject(options = {}) {
|
|
|
62
82
|
}
|
|
63
83
|
});
|
|
64
84
|
archive.pipe(output);
|
|
65
|
-
// Add manifest files to package root
|
|
66
85
|
for (const manifest of manifestFiles) {
|
|
67
86
|
if (existsSync(manifest.source)) {
|
|
68
87
|
archive.file(manifest.source, { name: manifest.dest });
|
|
69
88
|
packedFiles.push(manifest.dest);
|
|
70
89
|
}
|
|
71
90
|
}
|
|
72
|
-
// Add icon.svg to package root if it exists
|
|
73
91
|
if (existsSync(iconSource)) {
|
|
74
92
|
archive.file(iconSource, { name: 'icon.svg' });
|
|
75
93
|
packedFiles.push('icon.svg');
|
|
76
94
|
}
|
|
77
|
-
// Add required files
|
|
78
95
|
for (const file of requiredFiles) {
|
|
79
96
|
const filePath = join(projectPath, file);
|
|
80
97
|
if (existsSync(filePath)) {
|
|
@@ -82,7 +99,6 @@ export async function packProject(options = {}) {
|
|
|
82
99
|
packedFiles.push(file);
|
|
83
100
|
}
|
|
84
101
|
}
|
|
85
|
-
// Add optional files
|
|
86
102
|
for (const file of optionalFiles) {
|
|
87
103
|
const filePath = join(projectPath, file);
|
|
88
104
|
if (existsSync(filePath)) {
|
|
@@ -90,7 +106,6 @@ export async function packProject(options = {}) {
|
|
|
90
106
|
packedFiles.push(file);
|
|
91
107
|
}
|
|
92
108
|
}
|
|
93
|
-
// Add required directories
|
|
94
109
|
for (const dir of requiredDirs) {
|
|
95
110
|
const dirPath = join(projectPath, dir);
|
|
96
111
|
if (existsSync(dirPath)) {
|
|
@@ -98,7 +113,6 @@ export async function packProject(options = {}) {
|
|
|
98
113
|
packedFiles.push(`${dir}/`);
|
|
99
114
|
}
|
|
100
115
|
}
|
|
101
|
-
// Add optional directories
|
|
102
116
|
for (const dir of optionalDirs) {
|
|
103
117
|
const dirPath = join(projectPath, dir);
|
|
104
118
|
if (existsSync(dirPath) && statSync(dirPath).isDirectory()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pack-project.js","sourceRoot":"","sources":["../../../src/lib/deploy/pack-project.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,
|
|
1
|
+
{"version":3,"file":"pack-project.js","sourceRoot":"","sources":["../../../src/lib/deploy/pack-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAO1D,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAuB,EAAE;IACzD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IACxD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;IAEzE,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAA;IAC7D,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,2BAA2B,CAAA;IAEjG,MAAM,eAAe,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;IAClD,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAA;IAErF,MAAM,aAAa,GAAG,CAAC,UAAU,CAAC,CAAA;IAClC,MAAM,aAAa,GAAG;QACpB,cAAc;QACd,mBAAmB;QACnB,WAAW;QACX,eAAe;QACf,WAAW;QACX,oBAAoB;QACpB,mBAAmB;QACnB,oBAAoB;KACrB,CAAA;IACD,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC9C,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IAE/E,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IAChD,MAAM,aAAa,GAAG;QACpB;YACE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC;YACzC,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,IAAI;SACf;QACD;YACE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC;YACzC,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,sBAAsB,CAAC;YAChD,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,KAAK;SAChB;KACF,CAAA;IAED,MAAM,UAAU,GAAG,UAAU;QAC3B,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;QAC/B,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;IAEzC,MAAM,WAAW,GAAa,EAAE,CAAA;IAEhC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QACxC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAA;QACnD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACrC,IAAI,QAAQ,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,IAAI,kCAAkC,CAAC,CAAA;QACrG,CAAC;IACH,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;QAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE;YAC9B,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;SAC1B,CAAC,CAAA;QAEF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,OAAO,CAAC,WAAW,CAAC,CAAA;QACtB,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC1B,MAAM,CAAC,GAAG,CAAC,CAAA;QACb,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5B,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;YACvC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,CAAA;YACb,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEpB,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;YACrC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;gBACtD,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YACjC,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;YAC9C,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC9B,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;YACxC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;gBACtC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACxB,CAAC;QACH,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;YACxC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;gBACtC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACxB,CAAC;QACH,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;YACtC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;gBAC/B,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;YACtC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC3D,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;gBAC/B,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;QAED,OAAO,CAAC,QAAQ,EAAE,CAAA;IACpB,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Blue/Green deployment slot management
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for managing deployment slots and state.
|
|
5
|
+
* Each LinkApp has two slots (blue/green), and version.txt points to the active slot.
|
|
6
|
+
*/
|
|
7
|
+
export type DeploymentSlot = "blue" | "green";
|
|
8
|
+
export interface SlotMetadata {
|
|
9
|
+
deployedAt: string;
|
|
10
|
+
buildHash: string;
|
|
11
|
+
version?: string | undefined;
|
|
12
|
+
}
|
|
13
|
+
export interface DeploymentState {
|
|
14
|
+
activeSlot: DeploymentSlot;
|
|
15
|
+
slots: {
|
|
16
|
+
blue: SlotMetadata | null;
|
|
17
|
+
green: SlotMetadata | null;
|
|
18
|
+
};
|
|
19
|
+
lastUpdated: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get the inactive slot (the one to deploy to)
|
|
23
|
+
*/
|
|
24
|
+
export declare function getInactiveSlot(
|
|
25
|
+
activeSlot: DeploymentSlot,
|
|
26
|
+
): DeploymentSlot;
|
|
27
|
+
/**
|
|
28
|
+
* Determine which slot to deploy to based on current state
|
|
29
|
+
* If no state exists (first deploy), defaults to 'blue'
|
|
30
|
+
*/
|
|
31
|
+
export declare function getTargetSlot(
|
|
32
|
+
state: DeploymentState | null,
|
|
33
|
+
): DeploymentSlot;
|
|
34
|
+
/**
|
|
35
|
+
* Format slot metadata for display
|
|
36
|
+
*/
|
|
37
|
+
export declare function formatSlotAge(deployedAt: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Fetch current deployment state from API
|
|
40
|
+
*/
|
|
41
|
+
export declare function fetchDeploymentState(
|
|
42
|
+
apiUrl: string,
|
|
43
|
+
linkAppId: string,
|
|
44
|
+
accessToken: string,
|
|
45
|
+
): Promise<DeploymentState | null>;
|
|
46
|
+
/**
|
|
47
|
+
* Execute rollback by switching to inactive slot
|
|
48
|
+
*/
|
|
49
|
+
export declare function executeRollback(
|
|
50
|
+
apiUrl: string,
|
|
51
|
+
linkAppId: string,
|
|
52
|
+
accessToken: string,
|
|
53
|
+
): Promise<DeploymentState>;
|
|
54
|
+
//# sourceMappingURL=slot-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/slot-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,CAAA;AAE7C,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,cAAc,CAAA;IAC1B,KAAK,EAAE;QACL,IAAI,EAAE,YAAY,GAAG,IAAI,CAAA;QACzB,KAAK,EAAE,YAAY,GAAG,IAAI,CAAA;KAC3B,CAAA;IACD,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,cAAc,GAAG,cAAc,CAE1E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,GAAG,cAAc,CAK3E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAYxD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAiBjC;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAW1B"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Blue/Green deployment slot management
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for managing deployment slots and state.
|
|
5
|
+
* Each LinkApp has two slots (blue/green), and version.txt points to the active slot.
|
|
6
|
+
*/
|
|
7
|
+
import axios from "axios";
|
|
8
|
+
/**
|
|
9
|
+
* Get the inactive slot (the one to deploy to)
|
|
10
|
+
*/
|
|
11
|
+
export function getInactiveSlot(activeSlot) {
|
|
12
|
+
return activeSlot === "blue" ? "green" : "blue";
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Determine which slot to deploy to based on current state
|
|
16
|
+
* If no state exists (first deploy), defaults to 'blue'
|
|
17
|
+
*/
|
|
18
|
+
export function getTargetSlot(state) {
|
|
19
|
+
if (!state) {
|
|
20
|
+
return "blue";
|
|
21
|
+
}
|
|
22
|
+
return getInactiveSlot(state.activeSlot);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Format slot metadata for display
|
|
26
|
+
*/
|
|
27
|
+
export function formatSlotAge(deployedAt) {
|
|
28
|
+
const deployed = new Date(deployedAt);
|
|
29
|
+
const now = new Date();
|
|
30
|
+
const diffMs = now.getTime() - deployed.getTime();
|
|
31
|
+
const diffMins = Math.floor(diffMs / 60000);
|
|
32
|
+
const diffHours = Math.floor(diffMins / 60);
|
|
33
|
+
const diffDays = Math.floor(diffHours / 24);
|
|
34
|
+
if (diffMins < 1) return "just now";
|
|
35
|
+
if (diffMins < 60) return `${diffMins}m ago`;
|
|
36
|
+
if (diffHours < 24) return `${diffHours}h ago`;
|
|
37
|
+
return `${diffDays}d ago`;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Fetch current deployment state from API
|
|
41
|
+
*/
|
|
42
|
+
export async function fetchDeploymentState(apiUrl, linkAppId, accessToken) {
|
|
43
|
+
try {
|
|
44
|
+
const response = await axios.get(`${apiUrl}/${linkAppId}/deployment`, {
|
|
45
|
+
headers: {
|
|
46
|
+
Authorization: `Bearer ${accessToken}`,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
return response.data;
|
|
50
|
+
} catch (error) {
|
|
51
|
+
if (axios.isAxiosError(error) && error.response?.status === 404) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Execute rollback by switching to inactive slot
|
|
59
|
+
*/
|
|
60
|
+
export async function executeRollback(apiUrl, linkAppId, accessToken) {
|
|
61
|
+
const response = await axios.post(
|
|
62
|
+
`${apiUrl}/${linkAppId}/rollback`,
|
|
63
|
+
{},
|
|
64
|
+
{
|
|
65
|
+
headers: {
|
|
66
|
+
Authorization: `Bearer ${accessToken}`,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
);
|
|
70
|
+
return response.data;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=slot-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot-manager.js","sourceRoot":"","sources":["../../../src/lib/deploy/slot-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AAmBzB;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,UAA0B;IACxD,OAAO,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAA;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAA6B;IACzD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,MAAM,CAAA;IACf,CAAC;IACD,OAAO,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAA;IACrC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAA;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAA;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAA;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAA;IAE3C,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,UAAU,CAAA;IACnC,IAAI,QAAQ,GAAG,EAAE;QAAE,OAAO,GAAG,QAAQ,OAAO,CAAA;IAC5C,IAAI,SAAS,GAAG,EAAE;QAAE,OAAO,GAAG,SAAS,OAAO,CAAA;IAC9C,OAAO,GAAG,QAAQ,OAAO,CAAA;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAc,EACd,SAAiB,EACjB,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAC9B,GAAG,MAAM,IAAI,SAAS,aAAa,EACnC;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;aACvC;SACF,CACF,CAAA;QACD,OAAO,QAAQ,CAAC,IAAI,CAAA;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;YAChE,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,SAAiB,EACjB,WAAmB;IAEnB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,GAAG,MAAM,IAAI,SAAS,WAAW,EACjC,EAAE,EACF;QACE,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,WAAW,EAAE;SACvC;KACF,CACF,CAAA;IACD,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC"}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
|
+
import type { UrlMatchRules } from '../../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Result from the URL match rules test API
|
|
4
|
+
*/
|
|
1
5
|
interface TestUrlMatchRulesResult {
|
|
2
6
|
success: boolean;
|
|
3
|
-
|
|
7
|
+
matched?: boolean | undefined;
|
|
8
|
+
matchedHostname?: string | undefined;
|
|
9
|
+
matchedPattern?: string | undefined;
|
|
10
|
+
error?: string | undefined;
|
|
11
|
+
message?: string | undefined;
|
|
4
12
|
}
|
|
5
|
-
export declare function testUrlMatchRules(endpoint: string, url: string, rules:
|
|
13
|
+
export declare function testUrlMatchRules(endpoint: string, url: string, rules: UrlMatchRules, accessToken: string): Promise<TestUrlMatchRulesResult>;
|
|
6
14
|
export {};
|
|
7
15
|
//# sourceMappingURL=test-url-match-rules.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-url-match-rules.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/test-url-match-rules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"test-url-match-rules.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/test-url-match-rules.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD;;GAEG;AACH,UAAU,uBAAuB;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACpC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC7B;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,uBAAuB,CAAC,CAsBlC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-url-match-rules.js","sourceRoot":"","sources":["../../../src/lib/deploy/test-url-match-rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"test-url-match-rules.js","sourceRoot":"","sources":["../../../src/lib/deploy/test-url-match-rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAezB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB,EAChB,GAAW,EACX,KAAoB,EACpB,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,GAAG,QAAQ,uBAAuB,EAClC;YACE,GAAG;YACH,KAAK;SACN,EACD;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;aACvC;SACF,CACF,CAAA;QAED,OAAO,QAAQ,CAAC,IAAI,CAAA;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC5C,OAAO,GAAG,CAAC,QAAQ,CAAC,IAA+B,CAAA;QACrD,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC"}
|
|
@@ -6,6 +6,7 @@ interface UploadOptions {
|
|
|
6
6
|
accessToken: string;
|
|
7
7
|
isUpdate?: boolean | undefined;
|
|
8
8
|
forceUpdate?: boolean | undefined;
|
|
9
|
+
deployTarget?: 'canary' | 'stable' | undefined;
|
|
9
10
|
}
|
|
10
11
|
export declare function uploadAssets(options: UploadOptions): Promise<DeployResponse>;
|
|
11
12
|
export declare function checkLinkAppExists(apiUrl: string, linkAppId: string, accessToken: string): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/upload.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/upload.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAGpD,UAAU,aAAa;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC9B,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACjC,YAAY,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;CAC/C;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAmFlF;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcjH"}
|